gpt4 book ai didi

java - 使用 XML 参数 UTF-8 Java 发送 SOAP 请求

转载 作者:太空宇宙 更新时间:2023-11-04 10:23:08 25 4
gpt4 key购买 nike

我正在寻找有关我的问题的建议。我有一个 Java 中的 SOAP 请求,代码如下:

private static SOAPMessage createSOAPRequest(String shellType, String filterCondition, 
Map<String, String> AndySiteToSync) throws Exception {
MessageFactory messageFactory = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL);
SOAPMessage soapMessage = messageFactory.createMessage();
createSoapEnvelope(soapMessage, shellType, filterCondition, AndySiteToSync);

MimeHeaders headers = soapMessage.getMimeHeaders();
soapMessage.saveChanges();
ByteArrayOutputStream stream = new ByteArrayOutputStream();
soapMessage.writeTo(stream);
return soapMessage;
}

我的 XML 结构如下。

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:gen="http://general.service.webservices.skire.com">
<soap:Header/>
<soap:Body>
<gen:updateShell>
<!--Optional:-->
<gen:shortname>xxx</gen:shortname>
<!--Optional:-->
<gen:authcode>xxx</gen:authcode>
<!--Optional:-->
<gen:shellType>xxx</gen:shellType>
<!--Optional:-->
<gen:shellXML>
<![CDATA[
<List_Wrapper>
<_shell>
<paraminside>letterwithutf8_ññ</uuu_longitude>
</_shell>
</List_Wrapper>
]]>
</gen:shellXML>
</gen:updateShell>
</soap:Body>
</soap:Envelope>

对于没有 ñ 或 áéíóú 的字符,它工作得非常好,但是当我传递带有 ñ 的参数时,我会在结果上看到 à±。当我打印输入 xml 时,它显示 XML 具有正确的字符,但是当我发送请求时,结果显示错误的字符 (±)

我将相同的输入 XML 粘贴到 SOAPUI 中,结果很好,ñ 字符引入得很好。问题是当我使用 Java 发送请求时。我认为这是消息的编码。所以我在 saveChanges 之前添加了这些行:

MimeHeaders headers = soapMessage.getMimeHeaders();
headers.addHeader("Content-Type", "application/soap+xml;charset=UTF-8");

还可以使用以下方法进行测试: headers.setHeader("Content-Type", "application/soap+xml;charset=UTF-8");

这些 header 与 SOAPUI 相同,但“action”除外我确保标题可以打印。

for (int iii = 0; iii < headers.getHeader("Content-Type").length; iii++) {
System.out.println((headers.getHeader("Content-Type"))[iii]);
}

我得到了响应 application/soap+xml;charset=UTF-8

这样我就可以创建连接:

SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance();
SOAPConnection soapConnection = soapConnectionFactory.createConnection();
SOAPMessage soapResponse = soapConnection.call(createSOAPRequest(....))

SOAPUI

POST https://xxxxxxxxxxxxxxxxx/WebServices HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: application/soap+xml;charset=UTF-8;action="urn:xxxxxxx"
Content-Length: 4381
Host: xxxxxxxxxxxxxxxx
Connection: Keep-Alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)

谢谢。

==============================================

感谢 Andreas,我做了更多测试,编码问题出现在 SOAP 请求之前,我使用以下代码从 json 格式的 URL 获取信息:

JSONArray jsonDataFinal = new JSONArray();
JSONArray jsonData = (JSONArray) parser.parse(readUrl(URL));

然后:

List<Map<String,String>> mergeArray = new ArrayList<Map<String,String>>();
Map<String, String> mergeObj = null;
for (Object o : sitesArray)
{
if((siteAndy.get("xxxx")) == null) mergeObj.put("xxxx", "");
else mergeObj.put("xxxx", ((String) siteAndy.get("xxxx")).trim());
}

什么时候应该使用 utf-8 编码?

谢谢

最佳答案

我改成这样:

reader = new BufferedReader(new InputStreamReader(url.openStream(), StandardCharsets.UTF_8));

我的问题已经解决了。

谢谢!!

关于java - 使用 XML 参数 UTF-8 Java 发送 SOAP 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50868763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com