Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml AXIS2由于编码而生成错误的SOAP消息。如何修复它?_Xml_Web Services_Wsdl_Axis2_Wsdl2java - Fatal编程技术网

Xml AXIS2由于编码而生成错误的SOAP消息。如何修复它?

Xml AXIS2由于编码而生成错误的SOAP消息。如何修复它?,xml,web-services,wsdl,axis2,wsdl2java,Xml,Web Services,Wsdl,Axis2,Wsdl2java,问题:如何对axis使用不同的编码(字符集和传输) 这是我的客户: public Object[] invoke(String xmlRepresentation) throws CustomApplicationException { Object[] responseWS = null; RPCServiceClient serviceClient = new RPCServiceClient();

问题:如何对axis使用不同的编码(字符集和传输)

这是我的客户:

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监视器捕获):


)

使用Apache TCPMon,我捕获了以下请求:

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/1.1
内容类型:text/xml;字符集=UTF-8
SOAPAction:“WBSREFT”
用户代理:Axis2
主持人:172.17.192.113:6133
传输编码:分块
102
cobol
0
如果我使用soapUI发送XML请求,则TCPMon将捕获:

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>
POST/HTTP/0.9
内容类型:text/xml;字符集=UTF-8
SOAPAction:“
用户代理:Jakarta Commons HttpClient/3.1
主持人:172.17.192.113:6133
内容长度:265
cobol

我注意到这个奇怪的输出:在XML的中间102和0…在XML中间的102和0是“传输编码:分块”的工件,它们不是你发送的内容的一部分。

< P>中间的102和0是“转移编码:分块”的工件。它们不是您发送的内容的一部分。

毕竟Eclipse的插件TCP/IP监视器显然没有给我正确的XML请求,导致我走向错误的方向

它正在显示编码=”http://schemas.xmlsoap.org/soap/envelope/“,而ApacheTcpmon给了我不同(右)的结果

如前所述,问题在于块编码,您可以通过此更改块编码(并解决了我的问题):

回答我的问题:

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

毕竟Eclipse的插件TCP/IP监视器显然没有给我正确的XML请求,这导致我走错了方向

它正在显示编码=”http://schemas.xmlsoap.org/soap/envelope/“,而ApacheTcpmon给了我不同(右)的结果

如前所述,问题在于块编码,您可以通过此更改块编码(并解决了我的问题):

回答我的问题:

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

我认为您还应该发布最少的代码,以重复创建中断的SOAP请求。只有第一个具有奇怪/损坏的编码属性。您是如何生成后两个的?我认为您还应该发布最少的代码,以重复地创建损坏的SOAP请求。您发布了3个XML片段。只有第一个具有奇怪/损坏的编码属性。后两者是如何产生的?区块编码不是问题,它是一种标准化的数据传输方式。你为什么要更改它?嗯,不知为什么Web服务不理解编码。这是一个COBOLWebServices。区块编码不是问题,它是一种标准化的数据传输方式。你为什么要更改它?嗯,不知为什么Web服务不理解编码。这是一个COBOLWebServices。
options.setProperty(org.apache.axis2.Constants.Configuration.CHARACTER_SET_ENCODING, "UTF-8");