2009-03-02 10 views
1

질문 : 인코딩 (문자 세트 및 전송) 축을 어떻게 다른 방법으로 사용할 수 있습니까?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> 

가 왜 Axis2는이 바보 인코딩 (http://schemas.xmlsoap.org/soap/envelope)를 생성 ??? 나는이 이상한 출력을 발견했습니다

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 

: 아파치 tcpmon을 사용

나는이 요청을 캡처 한 (102) 그리고 XML의 중간에 0 ... 그것은 무엇 일 수 있습니까?

+0

을 또한 깨진 SOAP 요청을 재생산 할 수있는 최소 코드를 게시합니다. – Tomalak

+0

3 개의 XML 조각을 게시합니다. 첫 번째 코드에만 이상하거나 깨진 인코딩 속성이 있습니다. 후자의 두 작품은 어떻게 제작 했습니까? –

답변

2

이클립스의 플러그인 TCP/IP Monitor가 나에게 올바른 XML 요청을 제공하지 않아 잘못된 방향으로 인도했다.

인코딩 = "http://schemas.xmlsoap.org/soap/envelope/"이고 Apache TCPMon은 다른 (RIGHT) 결과를 표시했습니다. saua으로

은 문제가이로 변경할 수 있습니다 청크 인코딩이었다, 지적 (AND MY 문제 SOLVED) :

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

글쎄, 어떻게 든 webservice 인코딩을 이해하지 못했습니다. 그것은 COBOL 웹 서비스입니다. –

2

XML의 중간에있는 102와 0은 전송하는 콘텐츠의 일부가 아닌 "Transfer-Encoding : chunked"아티팩트입니다.