TRANSMISIÓN DE ARCHIVOS ADJUNTOS POR SOAP
Para la transmisión del contenido de los documentos en las operaciones de este servicio se ha utilizado el estándar MTOM (xref:http://www.w3.org/TR/soap12-mtom/). Con MTOM se optimiza la transmisión de archivos adjuntos por SOAP, permitiendo el acceso a los archivos adjuntos como un flujo de bytes que se van procesando a medida que se van transmitiendo por el socket de comunicación.
Este estándar, junto con la especificación XOP, requiere que el mensaje SOAP venga codificado en formato MIME de múltiples partes. Habitualmente la primera parte del mensaje MIME es el documento XML del mensaje SOAP. Las partes adicionales son los archivos adjuntos, que en el caso de este servicio será el contenido del documento.
En lugar de que el contenido del documento adjunto se encuentre incluido en el documento XML del mensaje SOAP, el primero habitualmente codificado en Base64, en MTOM el documento XML del mensaje SOAP solo hará referencia al identificador de la parte MIME que posee el contenido del documento adjunto.
Un ejemplo de referencia al contenido del documento adjunto sería el siguiente:
<xop:Include href="nombreAdjunto"
xmlns:xop="http://www.w3.org/2004/08/xop/include" />
El valor del atributo “href” indica el identificador de la parte MIME (n el ejemplo, “nombreAdjunto”) que contiene el contenido del documento adjunto.
Si el programador utiliza una pila o framework de servicios web que admita MTOM, el programador no ha de preocuparse por la construcción del mensaje SOAP con partes múltiples MIME ni de especificar la referencia al contenido. El propio framework, una vez analice el WSDL del servicio, tendrá en cuenta todo lo necesario para realizar una invocación SOAP con MTOM en aquellas operaciones en el que se utilice este estándar.
Lo que sí es necesario que especifique el programador es la activación de MTOM en el cliente del servicio web.
MTOM debe estar activado para cualquiera de las operaciones del servicio, incluso si la operación no utiliza archivos adjuntos. Todas las respuestas del servicio web vendrán codificadas según MTOM, debido a que en la plataforma .NET una vez activado MTOM esta espera que todas las respuestas se reciban con MTOM.
Dependiendo de la plataforma utilizada para consumir este servicio, y del framework de servicios web con el que se generen los consumidores del servicio, el tipo de los parámetros que representen archivos adjuntos podrá diferir entre unos y otros con estas posibilidades:
-
array de bytes: a pesar de utilizar MTOM, el framework requiere que se carguen los datos del archivo en un array de bytes; es el caso de WSE 3.0 en la plataforma .NET,
-
flujo de bytes: el framework es capaz de transferir el contenido del archivo usando un flujo de bytes, sin requerir que se cargue el contenido del archivo en memoria; el contenido se transmite a medida que se requiere; en el caso de la plataforma Java, corresponde a un objeto de la clase
javax.activation.DataHandler
MTOM EN LA PLATAFORMA .NET
Si la plataforma de desarrollo del cliente de este servicio fuera Microsoft .NET el programador debe tener en cuenta lo siguiente:
-
en Visual Studio 2005 no está disponible de serie el uso de MTOM ni de varios estándares WS-\*, ya que el establecimiento de estos estándares fue posterior a la publicación de este producto,
-
Microsoft ha adoptado el uso de MTOM como mecanismo de transferencia de archivos adjuntos en servicios web, dejando atrás otros candidatos propuestos,
-
Microsoft ha publicado un paquete de software que se integra con Visual Studio 2005 para habilitar el uso de MTOM y de otros estándares WS-* en proyectos de .NET desarrollados con Visual Studio 2005 que implementen o utilicen servicios web.
Este paquete de software se denomina WSE 3.0 (web services enhancement, en su versión 3.0) y se puede obtener gratuitamente desde la siguiente URL:
xref:https://www.microsoft.com/en-us/download/details.aspx?id=14089[Web Services Enhancement]
Con este paquete de software el desarrollador podrá crear con facilidad software que consuma este servicio e invocar operaciones con archivos adjuntos.
Para activar el uso de MTOM en el cliente del servicio web, es necesario marcar las casillas correspondientes de la herramienta de configuración del proyecto (Configuration Tool).



MTOM EN LA PLATAFORMA JAVA
Si la plataforma de desarrollo del cliente de este servicio se basa en la plataforma Java, en necesario que el programador identifique la implementación de la pila de servicios web que vaya a utilizar. Por ejemplo:
-
Apache CXF
-
Apache Axis
-
Apache Axis2
-
JBossWS
-
WSO2 WSF
-
JWSDP (GlassFish)
-
XINS
La forma de activar MTOM en la implementación de servicios web difiere en cada caso. Consulte la documentación del producto para conocer los detalles de la activación de MTOM en el lado del cliente.
Para Apache CXF, la forma de activar MTOM en el lado del cliente es la siguiente:
// BindingProvider bp declared previously
SOAPBinding binding = (SOAPBinding)bp.getBinding();
binding.setMTOMEnabled(true);
Para ampliar información se puede consultar la siguiente dirección: http://cxf.apache.org/docs/mtom.html