2009-03-02 3 views
1

質問:別のエンコーディング(文字セットと転送)を軸に使用するにはどうすればよいですか?ここでAXIS2はエンコーディングのために間違ったSOAPメッセージを生成します。どのようにそれを修正するには?

は私のクライアントです:Axis2のは、この愚かなエンコーディング(http://schemas.xmlsoap.org/soap/envelope)を生成WHY

<?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> 

???:ここ

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モニターを使用してキャプチャ)であります私はこの奇妙な出力を気づいた

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> 

::私はtcpmonのは、キャプチャ何あるsoapUIを使用して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 

:Apacheのtcpmonのを使用して

私はこの要求を撮影してきた102 XMLの途中で0が...何ができますか?

+0

を、私はあなたがすべきだと思います破損したSOAP要求を再現可能に作成する最小限のコードを送信します。 – Tomalak

+0

3つのXMLフラグメントを投稿します。最初のものだけが奇妙な/壊れたエンコーディング属性を持っています。どのように後者の2つを作りましたか? –

答えて

2

EclipseのプラグインTCP/IP Monitorは、間違った方向へ私を導く正しいXMLリクエストを与えてくれていないようです。

Apacheのtcpmonのは私に異なる(RIGHT)の結果が得られた一方でそれは、エンコーディング= "http://schemas.xmlsoap.org/soap/envelope/"を示しました。

sauaが指摘したように、問題はあなたがこれを変更することができ、チャンクエンコーディングした(AND MY問題を解決した):

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

そして、私の質問に答えるために:

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

チャンクエンコーディングは問題ではなく、データを転送する標準的な方法です。なぜそれを変更したいのですか? –

+0

まあ、何とかWebサービスはエンコーディングを理解していませんでした。それはCOBOL Webサービスです。 –

2

XMLの中央にある102と0は、送信するコンテンツの一部ではない「転送エンコード:チャンク」の成果物です。

関連する問題