O suporte para codificação UTF-16 (Universal Transformation Format) é
exigido pelo WS-I Basic Profile 1.0. O WebSphere Application Server está em conformidade com o WS-I Basic Profile 1.1. UTF-16 é um tipo de esquema de codificação
unicode que utiliza valores de 16 bits para armazenar caracteres UCS (Universal Character Set). UTF-8 é a codificação mais
comum utilizada na Internet e a codificação UTF-16 é geralmente utilizada para aplicativos do produto Java™ e Windows. É possível alterar a codificação em uma mensagem SOAP de UTF-8 para
UTF-16.
Antes de Iniciar
Para saber mais sobre os requisitos do Web Services-Interoperability
Basic Profile (WS-I), incluindo UTF-16, consulte as informações sobre Web Services-Interoperability
Basic Profile.
Sobre Esta Tarefa
O suporte para codificação UTF-16 é requerido pelo Perfil Básico WS-I. O servidor de aplicativos só suporte a codificação UTF-8 e UTF-16 das mensagens SOAP.
É possível alterar a codificação de caracteres de uma das
duas maneiras:
Procedimento
- Utilize uma propriedade no Stub para ser definida pelos usuários.
Essa
opção se aplica somente ao cliente.
Para um cliente, a codificação é especificada
no pedido SOAP. O mecanismo SOAP serializa o pedido e o envia para o mecanismo de serviço da Web. O mecanismo de serviço da Web recebe o pedido e desserializa a mensagem para os objetos Java, que são retornados para você em uma resposta.
Quando o mecanismo de serviço da Web no servidor recebe o pedido serializado, uma mensagem bruta na forma de um fluxo de entrada, é passada ao analisador, que entende Byte Order Mark (BOM). BOM é obrigatório para codificação em UTF-16 e pode ser
utilizado em UTF-8. A mensagem é desserializada para um objeto Java e é feita
uma chamada de serviço.
Para os dois modos de chamada, o mecanismo precisa serializar a mensagem
utilizando uma codificação específica e enviá-la de volta ao responsável pela chamada.
O seguinte exemplo mostra como usar uma propriedade no Stub
para alterar o conjunto de caracteres: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();
Neste exemplo de código,
com.ibm.wsspi.webservices.Constants.MESSAGE_CHARACTER_SET_ENCODING = "com.ibm.wsspi.webservices.xmlcharset";
- Utilize um manipulador para alterar o conjunto de caracteres pelo SAAJ (SOAP with Attachments
API for Java).
Se estiver
utilizando um manipulador, a mensagem SOAP será transformada em um formato SAAJ a
partir de outros formatos possíveis, como um fluxo de entrada.
Em casos em que há um método handleRequest no lado do cliente e um método handleResponse no lado do servidor, o mecanismo de serviços da Web se transforma de um formato SAAJ de volta para o fluxo com codificação de caracteres apropriado.
Essa transformação ou mudança é chamada de transformação de ida e volta.
O exemplo a seguir mostra como você pode usar um manipulador para especificar
a codificação de caracteres por meio da 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");
}
}
Resultados
Você modificou a codificação de caracteres de UTF-8 para UTF-16 na mensagem SOAP do serviço da Web.