Cambio del cifrado de los mensajes SOAP para que admitan WSI-Basic Profile

El soporte para la codificación Universal Transformation Format (UTF)-16 es necesario para WS-I Basic Profile 1.0. WebSphere® Application Server se ajusta a WS-I Basic Profile 1.1. UTF-16 es un tipo de esquema de codificación Unicode que utiliza valores de 16-bit para almacenar caracteres UCS (Universal Character Set). UTF-8 es la codificación más común que se utiliza en Internet y la codificación UTF-16 se utiliza normalmente para aplicaciones de productos Java™ y Windows. Puede cambiar la codificación de un mensaje SOAP de UTF-8 a UTF-16.

Antes de comenzar

Para obtener más información sobre los requisitos de WS-I (Web Services-Interoperability), incluido UTF-16, consulte Web Services-Interoperability Basic Profile.

Acerca de esta tarea

WS-I Basic Profile requiere soporte para el cifrado UTF-16. El servidor de aplicaciones sólo soporta el cifrado UTF-8 y UTF-16 de los mensajes SOAP.

Puede cambiar la codificación de caracteres de las dos formas siguientes:

Procedimiento

  • Utilice una propiedad en el objeto Stub para que lo usuarios lo establezcan.

    Esta opción sólo se aplica al cliente.

    Para un cliente, la codificación se especifica en la solicitud SOAP. El motor SOAP serializa la solicitud y la envía al motor de servicios web. El motor de servicio web recibe la solicitud y deserializa el mensaje en objetos Java, que se devuelven al usuario en una respuesta.

    Cuando el motor de servicios web del servidor recibe una solicitud serializada, se pasa al analizador un mensaje con el formato de una corriente de datos de entrada que entiende Byte Order Mark (BOM). BOM es obligatorio para la codificación UTF-16 y puede utilizarse en UTF-8. El mensaje se deserializa en objetos Java y se realiza una invocación de servicio. Para invocaciones bidireccionales, el motor necesita serializar el mensaje utilizando una codificación específica y devolverla al llamante.

    En el siguiente ejemplo se muestra cómo utilizar una propiedad en el objeto Stub para cambiar el juego 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();
    
    
    En este código de ejemplo, com.ibm.wsspi.webservices.Constants.MESSAGE_CHARACTER_SET_ENCODING = "com.ibm.wsspi.webservices.xmlcharset";
  • Utilice un manejador para cambiar el juego de caracteres mediante SAAJ (SOAP with Attachments API for Java).

    Si utiliza un manejador, el mensaje SOAP se transforma, de todos los otros formatos posibles como una corriente de entrada, a formato SAAJ. En algunos casos, como en un método handleRequest en el cliente y un método handleResponse en el servidor, el motor de servicios web vuelve a transformar un formato SAAJ a la corriente de datos con la codificación de caracteres adecuada. Esta transformación o cambio se denomina transformación de ida y vuelta.

    A continuación, se muestra un ejemplo de cómo utilizar un manejador para especificar la codificación de caracteres mediante 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

Ha cambiado la codificación de caracteres UTF-8 por UTF-16 en el mensaje SOAP del servicio web.