2009-03-02 76 views
1

QUESTION:如何可以使用不同的編碼(字符集和轉移)與軸?AXIS2由於編碼而生成錯誤的SOAP消息。如何解決它?

這是我的客戶機:

public Object[] invoke(String xmlRepresentation) 
      throws CustomApplicationException { 

      Object[] responseWS = null; 
      RPCServiceClient serviceClient = new RPCServiceClient();    
      Options options = serviceClient.getOptions();   
      options.setAction("WBSREFT"); 
      options.setTo(new EndpointReference("http://localhost:6132")); 
      QName qName = new QName(XML_SCHEMA, operation); 

      Object[] args = new Object[] { "blablabla" }; 
      responseWS = serviceClient.invokeBlocking(qName, args, returnTypes); 


      String responseAsString = (String) responseWS[0]; 
      return responseWS; 

    } 

這裏正在生成的SoapEnvelope(捕獲的使用TCP/IP監視器):

<?xml version="1.0" encoding="http://schemas.xmlsoap.org/soap/envelope/"?> 
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
<soapenv:Body> 
<WBSREFT xmlns="http://tempuri.org/LICPOCSampleService"> 
<arg0 xmlns="">blablabla</arg0> 
</WBSREFT> 
</soapenv:Body> 
</soapenv:Envelope> 

WHY Axis2中生成此笨編碼(http://schemas.xmlsoap.org/soap/envelope)???如果我發送郵件使用的soapUI這就是TCPMon的捕獲XML請求

POST/HTTP/1.1 
Content-Type: text/xml; charset=UTF-8 
SOAPAction: "WBSREFT" 
User-Agent: Axis2 
Host: 172.17.192.113:6133 
Transfer-Encoding: chunked 

102 
<?xml version='1.0' encoding='UTF-8'?> 
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
     <soapenv:Body> 
     <WBSREFT xmlns="http://tempuri.org/LICPOCSampleService"> 
      <arg0 xmlns="">to cobol</arg0> 
     </WBSREFT> 
     </soapenv:Body> 
    </soapenv:Envelope>0 

POST/HTTP/0.9 
Content-Type: text/xml;charset=UTF-8 
SOAPAction: "" 
User-Agent: Jakarta Commons-HttpClient/3.1 
Host: 172.17.192.113:6133 
Content-Length: 265 

<?xml version="1.0" encoding="UTF-8"?> 
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
     <soapenv:Body> 
     <WBSREFT xmlns="http://tempuri.org/LICPOCSampleService"> 
      <arg0 xmlns="">to cobol</arg0> 
     </WBSREFT> 
     </soapenv:Body> 
    </soapenv:Envelope> 

我已經注意到了這個奇怪的輸出:

使用Apache TCPMon的我已經捕捉到了這一請求102而在XML中間的0 ...它可能是什麼?

+0

我想你應該還發布可重複創建已損壞的SOAP請求的最小代碼。 – Tomalak 2009-03-02 10:34:02

+0

您發佈了3個XML片段。只有第一個有奇怪的/破壞的編碼屬性。你是怎樣產生後兩者的? – 2009-03-02 11:55:59

回答

2

所有Eclipse的插件後,TCP/IP監視器顯然不給我正確的XML請求導致我錯了方向。

它顯示encoding =「http://schemas.xmlsoap.org/soap/envelope/」,而Apache TCPMon給了我不同的(右)結果。

由於saua指出,問題是組塊編碼,你可以用這個改變(並解決了我的問題):

options.setProperty(org.apache.axis2.transport.http.HTTPConstants.CHUNKED, Boolean.FALSE); 

並回答我的問題:

options.setProperty(org.apache.axis2.Constants.Configuration.CHARACTER_SET_ENCODING, "UTF-8"); 
2

在102和0的XML中間是的神器「傳輸編碼:分塊」他們不是你發送的內容的一部分。

相關問題