Cxf Content-Transfer-Encoding Binary Options


Manejo de datos binarios con el contenido de Axis2 (MTOM / SwA) Introducción A pesar de la flexibilidad, la interoperabilidad y la aceptación global de XML, hay momentos en los que la serialización de datos en XML no tiene sentido. Los usuarios de servicios web pueden querer transmitir archivos adjuntos binarios de varios tipos, como imágenes, dibujos, documentos XML, etc., junto con un mensaje SOAP. Tales datos están a menudo en un formato binario particular. Tradicionalmente, se han utilizado dos técnicas para tratar datos opacos en XML. El envío de datos binarios por valor se consigue mediante la incorporación de datos opacos (por supuesto después de alguna forma de codificación) como un elemento o contenido de atributo del componente XML de datos. La principal ventaja de esta técnica es que da a las aplicaciones la capacidad de procesar y describir datos, basados ​​únicamente en el componente XML de los datos. XML admite datos opacos como contenido mediante el uso de codificación de texto base64 o hexadecimal. Ambas técnicas hinchan el tamaño de los datos. Para la codificación de texto subyacente UTF-8, la codificación base64 aumenta el tamaño de los datos binarios en un factor de 1,33x del tamaño original, mientras que la codificación hexadecimal expande los datos por un factor de 2x. Los factores anteriores se duplicarán si se utiliza la codificación de texto UTF-16. También preocupa la sobrecarga en los costos de procesamiento (tanto reales como percibidos) para estos formatos, especialmente cuando se vuelve a descifrar en binario en bruto. El envío de datos binarios por referencia se logra uniendo datos binarios puros como entidades externas no modificadas externas fuera del documento XML y luego incorporando URI de referencia a esas entidades como elementos o valores de atributo. Esto evita el hinchamiento innecesario de datos y el desperdicio de potencia de procesamiento. El principal obstáculo para el uso de estas entidades sin reparar es su gran dependencia de DTD, lo que impide la modularidad, así como el uso de los espacios de nombres XML. Había varias especificaciones introducidas en el mundo de los servicios Web para tratar este problema de apego binario usando la técnica de referencia de referencia quot. SOAP with Attachments es un ejemplo. Dado que SOAP prohíbe las declaraciones de tipo de documento (DTD) en los mensajes, esto conduce al problema de no representar datos como parte del mensaje infoset, creando así dos modelos de datos. Este escenario es como enviar adjuntos con un mensaje de correo electrónico. A pesar de que los archivos adjuntos están relacionados con el contenido del mensaje que no están dentro del mensaje. Esto hace que las tecnologías que procesan y describen los datos basados ​​en el componente XML de los datos funcione mal. Un ejemplo es WS-Security. ¿Dónde MTOM viene en MTOM (mecanismo de optimización de transmisión de mensajes SOAP) es otra especificación que se centra en la solución del problema quotAttachmentsquot. MTOM intenta aprovechar las ventajas de las dos técnicas anteriores al tratar de combinar las dos técnicas. MTOM es en realidad un método de referencia quotby. El formato de cable de un mensaje optimizado MTOM es el mismo que el mensaje SOAP with Attachments, que también lo hace compatible con los puntos finales SwA. La característica más notable de MTOM es el uso del elemento XOP: Include, que se define en la especificación XOP (XML Binary Optimized Packaging) para hacer referencia a los datos adjuntos binarios (entidades generales externas no modificadas) del mensaje. Con el uso de este elemento exclusivo, el contenido binario adjunto se lógicamente se convierte en línea (por valor) con el documento SOAP, aunque realmente se adjunta por separado. Esto fusiona los dos reinos haciendo posible trabajar sólo con un modelo de datos. Esto permite que las aplicaciones procesen y describan sólo mirando la parte XML, haciendo que la dependencia de DTD sea obsoleta. En una nota más ligera, MTOM ha normalizado el mecanismo de referencia de SwA. El siguiente es un extracto de la especificación XOP. En el nivel conceptual, estos datos binarios pueden considerarse codificados en base64 en el documento XML. Dado que esta forma conceptual puede ser necesaria durante algún procesamiento del documento XML (por ejemplo, para firmar el documento XML), es necesario tener una correspondencia uno a uno entre los conjuntos de información XML y los paquetes XOP. Por lo tanto, la representación conceptual de estos datos binarios es como si estuviera codificada en base64, utilizando la forma léxica canónica del tipo de datos XML Schema base64Binary (vea XML Schema Parte 2: Datatypes Second Edition 3.2.16 base64Binary). En la dirección inversa, XOP es capaz de optimizar sólo los datos de Infoset codificados en base64 que están en la forma léxica canónica. Apache Axis2 es compatible con la codificación Base64. SOAP con adjuntos y MTOM (mecanismo de optimización de la transmisión de mensajes SOAP). MTOM con el modelo de programación Axis2 AXIOM es (y puede ser el primero) modelo de objetos que tiene la capacidad de almacenar datos binarios. Tiene esta capacidad como OMText puede contener contenido binario en bruto en forma de javax. activation. DataHandler. OMText ha sido elegido para este propósito con dos razones. Uno de ellos es que XOP (MTOM) es capaz de optimizar sólo los datos de Infoset codificados en base64 que se encuentran en la forma léxica canónica del tipo de datos XML Schema base64Binary. Otro es preservar el infoset tanto en el remitente como en el receptor. (Para almacenar el contenido binario en el mismo tipo de objeto independientemente de si está optimizado o no). MTOM permite codificar selectivamente porciones del mensaje, lo que nos permite enviar datos codificados en base64 así como datos binarios brutos conectados externamente referidos por el elemento xOPquot (contenido optimizado) para ser enviados en un mensaje SOAP. Puede especificar si un nodo OMText que contiene datos binarios sin formato o datos binarios codificados en base64 está calificado para ser optimizado en el momento de la construcción de ese nodo o posterior. Para una eficiencia óptima de MTOM, se aconseja a un usuario que envíe archivos adjuntos binarios más pequeños utilizando archivos base64encoding (no optimizados) y archivos adjuntos de mayor tamaño como contenido optimizado. Además, un usuario puede crear un nodo de contenido binario optimizable usando una cadena codificada en base64, que contiene contenido binario codificado, dado con el tipo MIME de la representación binaria real. Axis2 utiliza javax. activation. DataHandler para manejar los datos binarios. Todos los nodos de contenido binario optimizados se serializarán como cadenas de base64 si quotMTOM no está habilitadoquot. También puede crear nodos de contenido binario, que no se optimizarán en ningún caso. Serán serializados y enviados como cadenas de base64. Habilitar la optimización de MTOM en el lado del cliente En Opciones, establezca la propiedad quotenableMTOMquot en True cuando envíe mensajes. Cuando esta propiedad se establece en True, cualquier sobre SOAP, independientemente de si contiene contenido optimizable o no, se serializará como un mensaje MIME optimizado MTOM. Axis2 serializa todos los nodos de contenido binario como cadenas codificadas en Base64 independientemente de si están calificadas para ser optimizadas o no si la propiedad quotenableMTOMquot está establecida en False. Si el sobre contiene elementos de información del elemento del nombre xop: Include (véase XML-binario Optimized Packaging 3. XOP Infosets Constructs). El usuario no tiene que especificar nada para que Axis2 pueda recibir mensajes optimizados de MTOM. Axis2 automáticamente identificará y des-serializar en consecuencia, como y cuando llega un mensaje MTOM. Habilitación de la optimización MTOM en el servidor El servidor Axis 2 identifica automáticamente los mensajes optimizados MTOM entrantes basados ​​en el tipo de contenido y los des-serializa en consecuencia. El usuario puede habilitarMTOM en el lado del servidor para los mensajes salientes, Para habilitarMTOM globalmente para todos los servicios, los usuarios pueden establecer el parámetro quotenableMTOMquot en True en el Axis2.xml. Cuando se establece, todos los mensajes salientes se serializarán y se enviarán como mensajes MIME optimizados MTOM. Si no está establecido, todos los datos binarios en los nodos de contenido binario se serializarán como cadenas codificadas en Base64. Esta configuración se puede sobreescribir en services. xml sobre la base de por servicio y por operación. Debe reiniciar el servidor después de configurar este parámetro. Acceso a los datos binarios recibidos (código de ejemplo) Tengo un problema extraño al consumir un servicio web para un producto que mi empresa ha comprado. El producto se llama Campaign Commander y su hecho por una empresa llamada Email Vision. Estaba tratando de utilizar la API de SOAP de actualización de datos en masa. Cada vez que intento llamar a cualquiera de los métodos en el webservice, la llamada realmente tiene éxito, pero el cliente falla al procesar la respuesta y recibo una excepción. Los detalles de los errores están abajo, gracias por cualquier ayuda que ustedes puedan ofrecer. Error al usar la Referencia de Web (cliente de webservice de estilo antiguo) Cuando consume el servicio como Referencia de Web obtengo una InvalidOperationException para cualquier llamada que hago, con el siguiente mensaje: Como puede ver, el sobre de jabón de respuesta parece válido Respuesta y la llamada se realizó correctamente), pero el cliente parece tener un problema con el tipo de contenido y genera una excepción. Error al usar Referencia de servicio (cliente de WCF) Cuando consume el servicio como referencia de servicio obtengo una excepción de protocolo para cualquier llamada que realice, con el siguiente mensaje: Al igual que en el ejemplo anterior, recibimos una respuesta de jabón válida y la llamada fue correcta , Pero el cliente parece tener un problema con el tipo de contenido y ha generado una excepción. ¿Hay alguna opción que pueda establecer por lo que el cliente no tiene un problema con el tipo de respuesta He hecho algunas búsquedas de Google, pero nada que he encontrado me ha ayudado hasta ahora. Preguntado 8 de mayo 12 a las 9:42 Después de haber luchado con esto durante unos días, encontré una solución extraordinariamente simple para este problema: Active el Editor de configuración seleccionando Herramientas-WCF Service Configuration Editor desde el menú principal de VS2010 Cierre de nuevo a la derecha Haga clic en el archivo App. Config para encontrar un nuevo elemento de menú Editar configuración WCF Haga clic en el enlace Cambiar el MessageEncoding a Mtom Guardar. Espero que esto ayude a alguien. Respondió Jun 26 14 at 16:06 Encontró un montón de c en mi configuración a través de la herramienta de edición. Me ahorró horas de trabajo ndash Mixxiphoid Aug 28 15 at 7:21 Trabajó como se esperaba. Gracias ndash Alex 28 de agosto a las 13:08 Tengo exactamente el mismo problema con la misma función y la misma empresa y pasar un par de horas en Google tratando de encontrar la respuesta correcta. Después de tantos intentos finalmente lo conseguí. Esto es lo que hice: La siguiente cadena fue la respuesta que funciona desde Email Vision donde me devuelve (Mi propósito principal era la Carga masiva pero permito a getLastUpload por simplicidad y pruebas). Si nos fijamos en la parte superior de la cadena tiene un valor clave y otro personal del servidor que hizo que la clase SoapClient para lanzar una excepción parece que no tenemos ningún documento XML. Aunque el documento xml estaba por debajo de todo este personal. Del mismo modo en la parte inferior de la cadena (después de la xml) la misma clave aparece Así que la solución fue tratar de deshacerse de la parte de la cadena desde el principio hasta el inicio del archivo xml y desde el final del archivo xml a El final de la cadena. He encontrado un script muy bueno que me ayudó a abordar esta solución aquí MTOM php cliente. Sin embargo, mi respuesta xml era un poco diferente, así que sólo modificó ese script un poco y aquí está mi versión. Respondió Dec 10 12 at 4:47 por favor proporcione el enlace para la solución url ndash Akhil Jain Dic 10 12 at 5:17 Si youre self-hosting de un servicio WCF y youre consumir el servicio con un cliente WCF. Usted debe recordar fijar la propiedad MessageEncoding en el anfitrión como esto: Corrí en este problema también. Mi cliente siguió lanzando esta excepción en el arranque y no pude averiguar por qué hasta que me di cuenta de que se me olvidó establecer mis enlaces MessageEncoding propiedad en la aplicación de acogida. Respondió 24 de mayo 13 a las 13: 56camel-cxf proxy con MTOM no obtener adjunto de nuevo cuando RPC / literal estilo WSDL utilizado Descripción Tengo un caso de prueba de camel-cxf proxy con MTOM habilitado. El WSDL utilizado en el proyecto es RPC / estilo literal. Sin embargo, no pude obtener apego de nuevo a través de la respuesta. Por favor, eche un vistazo al caso de prueba para más detalles. Después de un poco de depuración, parece que el productor camel-cxf obtuvo el archivo adjunto de nuevo. Sin embargo, había dos partes relacionadas con el accesorio. Una parte no tenía ningún archivo adjunto (vacío) pero tenía un Content-ID correcto. La otra parte contenía todo el archivo adjunto, pero tenía un Content ID diferente. Por ejemplo: Y el mensaje de respuesta devuelto fue: Debido a que la respuesta apuntaba al Content-ID de y las partes identificadas por el Content-ID: lt15839364-d75d-4cbe-a163-40838bca762a-31cxf. apache. orggt estaba vacía. Por lo tanto, el cliente no puede obtener el archivo adjunto de nuevo.

Comments