簡體   English   中英

使用XML參數UTF-8 Java發送SOAP請求

[英]Send SOAP Request with XML Parameter UTF-8 Java

我在這里尋找有關我的問題的建議。 我有一個帶有以下代碼的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”);

這些標頭與SOAPUI相同,除了“操作”外,我確保標頭可以正常打印。

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

並且我得到了響應應用程序/ 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 Request之前,我使用以下代碼從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));

我的問題是解決。

謝謝!!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM