如何更改SOAP消息的编码

OAP消息的编码一般默认为UTF-8,一般情况下是能满足我们的开发的,但是在具体的的项目开发里,可能需要调整为特殊的编码,如Shift_JIS、 GB2312、UTF-16等。鉴于网上关于这方面的资料很少,通过几个小时的搜索和测试,终于找到了更改编码的方式。本文主要以Axis和Axis2做 为SOAP引擎为例,总结其更改方法。
1. Axis
  *Stub.java文件的调用方法里增加蓝色语句(_call.setProperty(org.apache.axis.client.Call.CHARACTER_SET_ENCODING, "Shift_JIS");

         org.apache.axis.client.Call _call = createCall();
        _call.setOperation(_operations[0]);
        _call.setUseSOAPAction(true);
        _call.setEncodingStyle(null);
        _call.setProperty(org.apache.axis.client.Call.SEND_TYPE_ATTR, Boolean.FALSE);
        _call.setProperty(org.apache.axis.AxisEngine.PROP_DOMULTIREFS, Boolean.FALSE);
        _call.setSOAPVersion(org.apache.axis.soap.SOAPConstants.SOAP11_CONSTANTS);
        _call.setOperationName(new javax.xml.namespace.QName("http://tempuri.org/wkn15h0", "KN15H0"));
         _call.setProperty(org.apache.axis.client.Call.CHARACTER_SET_ENCODING, "Shift_JIS");

   其中 org.apache.axis.client.Call.CHARACTER_SET_ENCODING = javax.xml.soap.character-set-encoding
其他SOAP引擎也是通过类似setProperty(
"javax.xml.soap.character-set-encoding", "Shift_JIS" )的方式进行更改编码的。

2. Aixs2
   在
*Stub.java文件的调用方法里,应该有两种方法修改。
   方法一:通过MessageContext.setProperty(org.apache.axis2.Constants.Configuration.CHARACTER_SET_ENCODING,"UTF-16");
   方法二:_operationClient.getOptions().setProperty(org.apache.axis2.Constants.Configuration.CHARACTER_SET_ENCODING,"Shift_JIS");
 (注意: 通过以上两种方式,测试发现都不能成功,似乎始终是按照UTF-8编码处理,参照:http://www.nabble.com/-Axis2--Character-Set-Encoding-problem-td18645088.html)

参考:
    1. http://mail-archives.apache.org/mod_mbox/ws-axis-user/200504.mbox/%[email protected]%3E
    2. http://ws.apache.org/axis2/1_4_1/http-transport.html
    3. http://www.w3school.com.cn/soap/soap_httpbinding.asp
    4. http://publib.boulder.ibm.com/infocenter/wsdoc400/v6r0/index.jsp?topic=/com.ibm.websphere.iseries.doc/info/ae/ae/twbs_changeutf.html

 

转载 http://blog.csdn.net/chopin407/article/details/3505297

 

你可能感兴趣的:(SOAP)