如何更改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/%3C57023d1305042000012efa50d5@mail.gmail.com%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
?