2010-07-23 14 views
7

Soy nuevo en los servicios web y he leído información sobre XML, SOAP y WSDL. ¡Es muy interesante! Estoy trabajando en un proyecto existente que tiene un servicio web y un cliente. Sin embargo, los "superiores" no están satisfechos con la aplicación del cliente. Es demasiado complejo, les gustaría una aplicación más sencilla y fácil de usar que se pueda expandir fácilmente.¿Qué métodos existen para generar automáticamente stubs de clientes java a partir de archivos WSDL?

El proyecto utiliza Apache Axis2. Encontré los archivos WSDL y me gustaría construir un cliente basado en eso. Sin embargo, no quiero usar Axis2 por las razones anteriores (su opinión). Me pregunto cómo puedo hacer un cliente más simple dado que tengo que trabajar con un código ya existente (archivos wsdl). ¿Alguien conoce algún otro método que pueda usar para auto generar stubs de clientes basados ​​en los archivos WSDL existentes? He oído hablar de wsimport, ¿esto debería funcionar incluso si los archivos wsdl se crearon utilizando Axis2?

Cualquier ayuda o sugerencia es muy apreciada.

Respuesta

2

Ver Step1: Generate Skeleton Code:

para generar el esqueleto y las clases requeridas, puede utilizar la herramienta WSDL2Java proporcionada en Axis2. Esta herramienta se encuentra en el directorio bin de la distribución y se puede ejecutar utilizando las secuencias de comandos proporcionadas (.bat o .sh).

$ wsdl2java.sh -uri ../samples/wsdl/Axis2SampleDocLit.wsdl -ss -sd -d xmlbeans 
    -o ../samples -p org.apache.axis2.userguide 
+1

Hola gracias, probé este método parcialmente (solo con la marca -uri) ¡y funciona! Tras una investigación adicional del código de cliente existente, parece que los desarrolladores originales también usaron WSDL2Java para generar sus stubs de cliente. Me preguntaba si podría usar otro método que aún funcionaría con el archivo wsdl auto2 generado axis2 existente. De lo contrario, utilizaré los mismos métodos que utilizaron los desarrolladores originales. Creando una vez más el mismo cliente 'demasiado complejo'. (¿O debería simplemente usar WSDL2Java y hacer mi mejor esfuerzo para codificarlo más simple?) – ghostlines

2

Una de las ventajas del uso de SOAP es la riqueza de bibliotecas de cliente que están disponibles. Lo mejor es preguntarle a su cliente qué es lo que prefiere que sea la tecnología de implementación.

Clientes capaz de soportar una Java o C# cliente se declarará inmediatamente su allegience a su martillo favorito :-)

Si su cliente no le importa que significa que sólo quieren algo que "funciona" y es "fácil/barato de mantener ". Si ese es el caso, entonces recomendaría una de las soluciones dadas en el siguiente answer

Soy un gran admirador de Axis2, pero según mi experiencia, CXF genera código más legible a partir de WSDL complejos. Aun así, la API es raramente utilizable ... WSDL tiene una tendencia a ser sobre-diseñado con complejos y múltiples niveles de herencia de esquema XML ... Los clientes siempre culpan al marco de generación de código por el código de cliente "ilegible" sin pensar en la especificación de la interfaz que no se puede interpretar sin la ayuda de una costosa herramienta de diseño XML :-)

¿Mi consejo? Si controla el código del lado del servidor, simplifique el WSDL para que valide el mismo mensaje SOAP. Notarás que el código del lado del cliente se vuelve mucho más simple también y obtendrás una mejor comprensión de lo que tu servicio web está ofreciendo.

Alternativa (si no controla el WSDL) utilice una herramienta como SOAPUI para ver el SOAP/XML real que se intercambia y simplemente genere esos mensajes XML directamente.

2

Probar wsimport. Lo he usado anteriormente. En ese momento, decidí no usar Axis2 por la sencilla razón de que producía trozos más complejos e hinchados para codificar.

+0

Gracias, probé wsimport y creó algunos archivos .class para mí. Aunque en los archivos .class son códigos legibles en lugar de códigos de bytes. Creo que voy a cambiar la extensión a .java y tratar de usarlos para construir mi nueva aplicación cliente. – ghostlines

+2

@ghostlines: ¡Oh! Si recuerdo correctamente, obtienes archivos .java si especificas la opción "-manejar". – waxwing

+0

Terminé de usar wsimport para crear mi clientstub desde un archivo wsdl local que estaba presente en la fuente. No pude conseguirlo del servicio web propio primo este método que veo un montón en línea no funciona para mí -> wsimport http: //

: /servicio WSDL?. Y leí la parte de cliente de este tutorial https://jax-ws.dev.java.net/jax-ws-ea3/docs/UsersGuide.html#mozTocId69398 Pero no entiendo que tengo que especificar el dirección del servicio web para que pueda usar mis talones para invocar las solicitudes. ¿Debo hacer mensajes de jabón separados y especificar el punto final y el puerto? Ayuda apreciada – ghostlines

4

Bueno, hemos utilizado Xfire, pero no el enfoque centrado en el WSDL-: WSDL fue creado sobre la marcha de las interfaces remotas expuestas. El cliente tenía las mismas interfaces que se asignaron al wsdl generado automágicamente.

AFAICS Xfire evolucionaron en CXF y el CXF home page me dice esto:

CXF soporta tanto el primer contrato de desarrollo con WSDL y código de primera desarrollo a partir de Java. Para REST, CXF también admite una interfaz JAX-RS (TCK ).

Como ya he entendido que necesita wsdl2java herramienta para generar talones del lado del cliente de archivo WSDL existente si decide basar en WSDL. Si ambos pares ejecutan Java, entonces el enfoque centrado en Java es aplicable y bastante más transparente (ya que las interfaces de servicio/POJO pueden compartirse entre cliente/servidor con transporte generado en tiempo de ejecución sin ningún paso de generación de proxy/proxy).

+0

Y no, no hubo necesidad de anotaciones adicionales en las interfaces o POJOs involucrados. Un poco offtopic, ¿pero tal vez eche un vistazo al modelo de servicios web RESTful? Este no es ese tipo de datos/estructura segura como XML (ya que usa JSON) pero pudimos crear protocolos RPC personalizados con 400 líneas de código usando la biblioteca de mapas Jackson JSON. –

+0

Muchas gracias por los comentarios, voy a trabajar en ello esta semana y les haré saber qué ruta tomé. – ghostlines

Cuestiones relacionadas