Creación de una aplicación cliente de servicios web siempre comienza con un archivo WSDL existente (a diferencia de la elaboración de un proveedor de servicios web) y, aunque esta no es la única manera, me gustaría sugerir a utilizar la herramienta wsimport
(vea 5 Techniques for Creating Java Web Services from WSDL para otras opciones pero no las cubriré).
Así, en el proyecto de cliente, agregue el siguiente fragmento de su pom.xml
:
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>wsimport</goal>
</goals>
<configuration>
<wsdlUrls>
<wsdlUrl>
http://localhost:8080/helloservice/HelloService?wsdl
</wsdlUrl>
</wsdlUrls>
<packageName>com.example.maven.jaxws.helloclient</packageName>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
<bulid>
El mojo jaxws-maven-plugin:wsimport
está asociada de forma predeterminada a la fase del ciclo generate-sources
vida para el funcionamiento de cualquier posterior fase de generate-sources
activará el jaxws:wsimport
Gol.
Tenga en cuenta que esta es realmente una configuración mínima. Si desea más detalles/control, consulte la documentación del wsimport
mojo.
Por ejemplo, para utilizar archivos en lugar de URL para el WSDL (y para generar código Java en un lugar más compatible con Maven mejores prácticas), utilice:
<configuration>
<sourceDestDir>${project.build.directory}/generated-sources/wsimport</sourceDestDir>
<wsdlDirectory>${basedir}/src/wsdl</wsdlDirectory>
<wsdlFiles>
<wsdlFile>foo.wsdl</wsdlFile>
<wsdlFile>bar.wsdl</wsdlFile>
</wsdlFiles>
...
</configuration>
Actualización: para invocar un pre stub -configured (usando la dirección de punto final de la WSDL), el código es:
Hello port = new HelloService().getHelloPort();
String result = port.sayHello("Duke!");
con el fin de invocar un punto final cuya dirección es diferente de la especificada en el WSDL, definir el nuevo URL de punto final y la QName :
URL endpoint_new = new URL("NEW_ADDRESS_HERE");
QName qname = new QName("http://"+"ORIGINAL_PACKAGE", "SERVICENAME");
Hello port = new HelloService(endpoint_new, qname).getHelloPort();
donde ORIGINAL_PACKAGE
es el paquete donde el servicio publicado en, SERVICENAME
es el nombre del servicio que necesitamos, por ejemplo, HelloService
.
Entonces dice que debe descargar una copia del WSDL de una ejecución anterior. Para Metro esto puede ser difícil ya que contiene búsquedas adicionales. –