¿Cómo llamar a un servicio web utilizando JavaEE?

He estado usando rpclib para generar automáticamente un WSDL e implementarlo en Python.

Luego quise llamar a un servicio web * que tiene este WSDL usando JavaEE, así que simplemente usé el servicio web de WSDL en el asistente de creación en Eclipse (Indigo 3.7.1 con OEPE), pero luego la comstackción de Ant falló con el excepción (en breve):

weblogic.wsee.tools.WsBuildException Error running JAX-WS wsdlc Caused by java.lang.NoSuchMethodException: javax.xml.bind.annotation.XmlElementRef.required() 

¿Qué tengo que hacer? ¿Cómo puedo llamar al servicio web utilizando JavaEE?

* El servicio web está configurado con: Apache HTTP Server 2.2.2 + mod_wsgi 3.3 + Python 2.6.5 + rpclib 2.6.1.

Ok, me topé con tu publicación la segunda vez, así que elaboraré mi comentario dado antes :).

Primero recapitulo tu puesta a punto:

  • Tiene un servicio web en funcionamiento y una URL que apunta al WSDL correspondiente
  • Intentarás invocar los métodos WS de un proyecto Java EE diferente en una máquina diferente

Opciones generales para invocar un WS:

  1. Utilice la dependency injection para inyectar la referencia WS
  2. Crea tus propios talones WS

La primera opción no funcionará en su configuración porque DI solo funcionará en un entorno administrado por contenedor (ver mi comentario). Eso significa que la clase WS y la clase ejecutante tienen que estar en el mismo contenedor (por ejemplo, el mismo servidor).

Entonces, lo que queda es generar sus apéndices WS manualmente. Por lo tanto, puede utilizar la herramienta wsimport mencionada en su propia respuesta. Hay varias formas diferentes de usar esta herramienta. Vamos a echar un vistazo en el uso de CLI:

  1. navegue en su carpeta de proyectos del cliente WS utilizado por su IDE: %IDE_WORKSPACE%/your project/src
  2. crear una nueva carpeta, por ejemplo, stub
  3. abrir una ventana de comando en este directorio
  4. ejecute el siguiente comando: wsimport -keep
  5. Después de una actualización deberías ver varios archivos creados.

De vuelta en su IDE:

Ahora puede utilizar sus archivos de resguardo generados para conectarse al WS obteniendo un port del service generado -archivo

 public class WsClient { public static void main(String[] args) { //Create Service 'GeneratedFile'Service service = new 'GeneratedFile'Service(); //create proxy 'GeneratedFile' proxy = service.get'GeneratedFile'Port(); //invoke System.out.println(proxy.yourMethod(yourParam)); } } 

Últimos consejos:

  • Para propósitos de portabilidad, verifique los archivos generados. En sus anotaciones, a veces el archivo WSDL está vinculado a una copia local. Solo cambia esto de nuevo a tu WSDL-URL.
    AFAIK hay una opción en la herramienta wsimport para establecer esto directamente en la rutina de importación.
  • Hay un complemento para Eclipse llamado soapUI que le permite usar la herramienta wsimport en una GUI fuera de Eclipse. Una vez configurado, debería acelerar su trabajo.
  • También he encontrado una guía de inicio rápido en el desarrollo de clientes WS con eclipse.

Espero que esto ayude, diviértete!

EDITAR: Sólo para aclarar:

archivos necesarios después de la generación wsimport

Después de usar la herramienta wsimport , debe tener un directorio que contenga los archivos que se muestran en la imagen. Para aclarar este ejemplo, necesitará obtener un servicio del servicio de RequestFileService (esta es mi operación WS) como el RequestFileService service = new RequestFileService(); y después de esto, necesitará un puerto en este servicio como RequestFile proxy = service.getRequestFilePort(); .
Después de esto, puede invocar sus llamadas de método utilizando el puerto proxy.yourMethod(yourParam);