WS-I Basic Profile 1.0 要求支持通用转换格式 (UTF) -16 编码。WebSphere® Application Server 符合 WS-I Basic Profile 1.1。UTF-16 是使用 16 位值存储通用字符集 (UCS) 字符的一种 unicode 编码方案。UTF-8 是因特网上使用的最常见编码,而 UTF-16 编码通常用于 Java™ 和 Windows 产品应用程序。可以将 SOAP 消息中的编码从 UTF-8 更改为 UTF-16。
开始之前
要了解有关 Web Service-Interoperability Basic Profile (WS-I) 以及 UTF-16 的要求的更多信息,请参阅 Web Services-Interoperability
Basic Profile 信息。
关于此任务
WS-I Basic Profile 需要对 UTF-16 编码的支持。应用程序服务器只支持 SOAP 消息的 UTF-8 和 UTF-16 编码。
可用以下两种方式中的一种更改字符编码:
过程
- 使用存根上的属性供用户设置。
此选项只应用于客户机。
对于客户机,编码是在 SOAP 请求中指定的。SOAP 引擎序列化请求并将它发送到 Web Service 引擎。Web Service 引擎接收请求并将消息反序列化到 Java 对象,这将在响应中返回给您。
当服务器上的 Web Service 引擎接收序列化的请求时,输入流格式的原始消息将传递到能识别字节顺序标记 (BOM) 的解析器。BOM 对于 UTF-16 编码是必须的,而且它可以在 UTF-8 中使用。消息将反序列化到 Java 对象,并将进行服务调用。对于两种方式调用,引擎需要使用特定编码来序列化消息,并将其发送回调用者。
以下示例向您说明如何使用存根上的属性来更改字符集:javax.xml.rpc.Stub stub=service.getPort("MyPortType");
((javax.xml.rpc.Stub)stub).setProperty(com.ibm.wsspi.webservices.Constants.MESSAGE_CHARACTER_SET_ENCODING,"UTF-16");
stub.invokeMethod();
在此代码示例中,com.ibm.wsspi.webservices.Constants.MESSAGE_CHARACTER_SET_ENCODING = "com.ibm.wsspi.webservices.xmlcharset";
- 使用处理程序通过 SOAP with Attachments API for Java API (SAAJ) 来更改字符集。
如果正在使用处理程序,那么 SOAP 消息将从其他可能的格式(例如,输入流)转换为 SAAJ 格式。在这种情况下,作为客户机端的 handleRequest 方法和服务器端的 handleResponse 方法,Web Service 引擎将从 SAAJ 格式转换回具有合适字符编码的流。此转换或更改称为来回转换。
以下是如何使用处理程序通过 SAAJ 指定字符编码的示例:handleResponse(MessageContext mc) {
SOAPMessageContext smc = (SOAPMessageContext) context;
javax.xml.soap.SOAPMessage msg = smc.getMessage();
msg.setProperty (javax.xml.soap.SOAPMessage.CHARACTER_SET_ENCODING, "UTF-16");
}
}
结果
您已将 Web Service SOAP 消息中的字符编码从 UTF-8 修改为 UTF-16。