Servicio web Axis2, enfoque ascendente, objeto complejo

Estoy usando axis2 para exponer un método de clase existente como un servicio web (enfoque de abajo hacia arriba). El método toma un objeto complejo (tipo no primitivo) como parámetro y también devuelve un objeto complejo.

Entiendo que axis2 intentará generarme el esquema en el archivo wsdl cuando exponga el método como un servicio web, y puedo obtener el archivo wsdl visitando la URL del servicio web y agregando? Wsdl al final.

Pero tras un examen más detenido, algunos de los atributos del tipo complejo en los parámetros se representan como xs: anyType en la parte del esquema del wsdl resultante. Los atributos que se convierten en xs: anyType es una lista. Lo malo de esto es que cuando genero el código auxiliar para el código del cliente, la firma del método para establecer esos atributos particulares tomará un objeto como parámetro, es decir, setAttribute (Object obj).

Entonces, mi solución a esto es usar JAXB 2.0 para generar el esquema xml de las clases que necesito y luego, importar el xsd en el archivo wsdl que es generado por axis2 (descargado del servicio web url +? Wsdl) y usar el archivo editado wsdl en lugar del generado automáticamente. Esta solución parece funcionar bien para el lado del cliente. La firma del método para establecer los atributos generados por el código stub tomará el tipo adecuado, es decir, setAttribute (AnotherComplexType abcd). Y al usar tcpmon, puedo ver que el xml que se envía desde el cliente al servidor parece ser correcto.

Sin embargo, este enfoque no funciona bien para el lado del servidor porque axis2 no usa la anotación JAXB 2.0 para convertir el xml recibido nuevamente en las clases que el método expuesto podrá procesar.

Mi pregunta es, ¿hay alguna forma de resolver mi problema? Las posibles formas en las que puedo pensar es modificar la forma en que axis2 procesa el xml después de recibirlo (estoy de acuerdo con procesarlo manualmente si de hecho hay una manera), o hacer que axis2 funcione bien con la anotación JAXB 2.0. ¿O quizás alguna otra idea?

Nota: no estoy usando la parte JAX-WS de axis2

preguntado el 10 de mayo de 11 a las 13:05

1 Respuestas

Al final, lo resolví yo mismo. Genere el código auxiliar para el lado del servidor usando wsdl, modifiqué los messageReceivers para usar el receptor de mensajes generado en su lugar, escribí una clase contenedora que implementa la interfaz generada, escribí un convertidor para convertir el objeto de los tipos generados en el parámetro de la clase contenedora Los métodos estarán expuestos a mis tipos internos y expondrán la clase contenedora en su lugar.

contestado el 21 de mayo de 11 a las 05:05

Hola, ¿puedes publicar el código para esto? Estoy enfrentando el mismo problema: Samir

Hola, esto fue hace tanto tiempo, perdí todos los datos antiguos para esto. Hery

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.