generate from example java code-generation axis2 wsdl2java

java - example - axis2 generate client from wsdl



GeneraciĆ³n de clientes del servicio web Axis2-Tipos sin modificar el cliente (6)

Está generando el cliente del servicio web desde wsdl, ¿correcto?

Lo único que sabe la herramienta wsdl2java es la información en el wsdl, por lo que no sabrá sobre ningún tipo que ya haya creado.

Si puede obtener la información del tipo en el wsdl, puede hacer que funcione, aunque nunca lo intenté.

Si desea una forma sencilla de copiar del Tipo A al Tipo B, puede probar BeanUtils.copyProperties , siempre que los ajustadores y los buscadores de Tipo A y Tipo B coincidan.

¿Es posible con Axis2 y Eclipse generar un cliente de servicio web y hacer que use los tipos de Java que ya tiene en paquetes en lugar de crear sus propios tipos? La razón es, por supuesto, si tengo el tipo A ya creado y crea su propio tipo AI no puede simplemente asignar la variable de tipo A a la variable de tipo B.

El wsdl se genera desde un servicio web implementado en un servidor de aplicaciones. Si no es posible generarlo, sería posible generar un cliente a partir de los archivos java existentes.


Casi todos los proyectos de servicios web de Java pasan por esto. No sé si el mundo .NET / C # tiene una solución más elegante.

Tiene sentido, como mencionó Mike, usar BeanUtils.copyProperties.

BR,
~ A


Si realmente desea reutilizar las clases existentes, puede llamar a la API de Axis2 directamente sin generar un cliente que use wsdl2java. A continuación se muestra un código relativamente simple para llamar a un servicio web. Solo debe completar el punto final del servicio web, el método QName, la (s) clase (s) de retorno esperados y los argumentos para el servicio. Puede reutilizar sus clases existentes como valores de retorno o argumentos.

Si su servicio web es bastante complicado, entonces puede que tenga que profundizar en la API para que este enfoque funcione.

serviceClient = new RPCServiceClient(); Options options = serviceClient.getOptions(); EndpointReference targetEPR = new EndpointReference("http://myservice"); options.setTo(targetEPR); QName methodName = new QName("ns","methodName"); Class<?>[] returnTypes = new Class[] { String.class }; Object[] args = new Object[] { "parameter" }; Object[] response = serviceClient.invokeBlocking(methodName, args, returnTypes);



Puede usar directamente la clase ServiceClient para llamar al servicio web, que proporciona llamadas solo mediante XML y devuelve una respuesta XML. Para diferentes métodos de servicio web, debe convertir la respuesta XML a algún POJO Java para usarlo. Solo el manejo de la respuesta debe hacerse al final. que puedes hacer de XML a Map etc ...

Por lo tanto, no necesitará otras clases de stub para llamar a ningún servicio web, solo necesita manejar XML de respuesta. Puede convertir XML a POJO utilizando las librerías Castor o JAXB.

Esta es la forma en que no necesita modificar su cliente cada vez para diff. servicios web. Puede desarrollar como proporcionar un controlador de respuesta al cliente externamente. De modo que para cada servicio web diferente tendrá diff. clase de controlador de respuesta que es la implementación de su interfaz.

//common interface for response handlers... //implement this for diff. web service/methods public interface WSRespHandler{ public Object getMeResp(Object respData); } //pass particular handler to client when you call some WS public class WebServiceClient { public Object getResp(WSRespHandler respHandler) { .. return repHandler.getMeResp(xmlData); } }

referencia:

http://www.developer.com/java/web/article.php/3863416/Using-Axis2-and-Java-for-Asynchronous-Web-Service-Invocation-on-the-Client-Side.htm

http://www.devdaily.com/blog/post/java/java-web-service-client-read-array-list/

Gracias.

www.techlads.com


En caso de que esta publicación aún sea útil para alguien, leí la guía de generación de clientes de axis2: http://axis.apache.org/axis2/java/core/docs/userguide-creatingclients.html .

Parece que el complemento Axis2 Eclipse está configurado para llamar a la generación de código ADB en modo integrado (ver http://axis.apache.org/axis2/java/core/docs/adb/adb-howto.html ), creando así clases internas en el código de servicio web. No sé si es posible cambiar el modo de generación a modo expandido (generar clases de datos fuera de la clase de stub), pero puede hacerlo desde la línea de comando usando Wsdl2Java:

%AXIS2_HOME%/bin/WSDL2Java -uri <wsdl file path> -p <package name> -u

La opción -u le dice al generador de código ADB que cree clases de datos como clases separadas y no como clases internas en el código auxiliar.