Error de Axis2 / Jax-WS cuando soltera el archivo XML con elementos de texto grandes

StackOverflow https://stackoverflow.com/questions/1105104

  •  12-09-2019
  •  | 
  •  

Pregunta

Estoy completamente atascado y necesito su ayuda ... He creado un trozo de servicio web con Jaxb 2.x para un servicio que envía un archivo binario (imágenes JPG codificadas Base64) dentro de un mensaje SOAP. Todo funcionó bien y pude recibir y mostrar las imágenes, hasta que intenté exportar la aplicación Eclipse RCP a un producto, lo que causó imediatly LinkageErrors (como de costumbre, javax.xml.namespace.qname y algunos más).

Pude resolver ese problema para 'Rebundle' Axis2 y ahora todo vuelve a funcionar bien, excepto el análisis de la parte del archivo binario dentro del trozo, lo que ahora causa una excepción (elemento inesperado).

Una apariencia más cercana reveló que el lector (OMStaxWrapper), que se usa en el trozo generado por Axis2-Jaxb, ahora no lee todo el texto Base64 sino solo en los primeros 10000 bytes. Entonces no encuentra el final correcto del elemento y lanza una excepción.

Como se mencionó anteriormente, esto no sucedió al principio, así que espero que sea solo un parámetro o una opción. ¡Muchas gracias de antemano por cada ayuda o pista!

EditarNo era Jaxb, usé Jaxws y WSIMPORT para crear el trozo para el archivo WSDL ...

¿Fue útil?

Solución

Para un poco de fondo, OMStaxWrapper es parte de Axiom, que es la utilidad de transmisión personalizada de Axis2 para servicios web, que Axis2 utiliza como reemplazo para SAaj. No me sorprendería mucho si fuera buggy, si mi experiencia previa con el eje es algo por lo que pasar.

Si desea enviar binarios grandes sobre jabón, la mejor tecnología para esto en este momento parece ser MTOM (ver aquí para cómo usarlo con axis2). Esto puede optimizar mejor la representación binaria, y su problema puede desaparecer. Sin embargo, tanto el cliente como el servidor deben poder hablar MTOM, por lo que puede no ser una opción para usted.

Alternativamente, debería ser posible convencer a Axis2 para que use la API SAAJ estándar en lugar de usar Axiom. Saaj es más lento, pero debería ser menos erróneo.

Mi sugerencia final es abandonar Axis2 para su cliente y usar algo más liviano. Spring-WS Proporciona una API de cliente muy agradable, que actualmente es mi herramienta de elección para hablar con servicios web remotos. Admite Axiom y Saaj, así como MTOM, y es suficientemente liviano que es bastante fácil descubrir por qué algo salió mal.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top