Tengo que generar un WS Client y no puedo decidir qué plugin usar. Hasta ahora mis opciones son: jaxb2-maven-plugin, axistools-maven-plugin y jaxws-maven-plugin.¿Cuál es el mejor plugin de maven para generar un cliente de servicio web?
Respuesta
I have to generate a WS Client and I can't decide wich plugin to use. Until now my options are: jaxb2-maven-plugin, axistools-maven-plugin and jaxws-maven-plugin.
primer lugar, el jaxb2-maven-plugin
no es realmente la intención de generar clientes WS. ELIMINADO
En segundo lugar, en lo personal I wouldn't use Axis even for client development only por lo que se no recomienda utilizar el axistools-maven-plugin
. ELIMINADO
Esto nos deja con la JAX-WS RI y el Apache CXF pilas, y sus respectivos plugins de Maven: los JAX-WS Maven Plugin (instrucciones para utilizar el JAX-WS Maven Plugin se puede encontrar en la página Usage) y el cxf-codegen-plugin.
En cuanto a los pros y los contras, me gustaría resumir como esto:
- JAX-WS RI está incluido en Java 6, pero la documentación es más "bruto" (aunque you'll find plenty of tutorials about JAX-WS RI too).
- Apache CXF está mejor documentado y proporciona más flexibilidad si desea ir más allá de las especificaciones.
Al final, ambas opciones son decentes, por lo que sugiero navegar un poco por los enlaces y hacer su propia opinión.
[JAX-WS Maven Plugin] (https://jax-ws-commons.java.net/jaxws-maven-plugin/) cambio de enlace. – Dormouse
Le sugiero que edite la respuesta para actualizar los enlaces. –
¡No se preocupen chicos, lo tengo! – javajavajava
Uso jaxws-maven-plugin. En mi opinión, JAX-WS es la implementación estándar de facto para WS. Tiene código generado mucho mejor que AXIS, y es más fácil de configurar e implementar. Tiene soporte de Maven y Spring.
La generación de código de cliente a partir de archivos WSDL, en pom.xml:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<executions>
<execution>
<id>generate-reports-ws-code</id>
<phase>generate-sources</phase>
<goals>
<goal>wsimport</goal>
</goals>
<configuration>
<!-- This property is used to support having multiple <execution> elements. The plugin has, from some reason, only one timestamp file per the all executions, thus if you have two executions, it doesn't know exactly when to recompile the code. Here we tell it explicitly to have one timestamp file per each execution --> <staleFile>${project.build.directory}/jaxws/stale/.staleFlag.reports</staleFile>
<packageName>com.acme.reports.ws.api</packageName>
<wsdlDirectory>${project.build.directory}/wsdl</wsdlDirectory>
<wsdlFiles>
<wsdlFile>InternalReportsAPIService.wsdl</wsdlFile>
</wsdlFiles>
<verbose>true</verbose>
<sourceDestDir>${wsdl.generated.source.files.dir}</sourceDestDir>
</configuration>
</execution>
</executions>
</plugin>
Una interfaz para crear el grano de servicio al cliente (esto se genera no automático):
public interface InternalReportsAPIServiceFactory {
public InternalReportsAPIService createInternalReportsAPIService();
}
Su frijol implementación:
public class InternalReportsAPIServiceFactoryBean implements InternalReportsAPIServiceFactory {
private URL acmeReportsWsdlURL;
private final static QName V1_QNAME = new QName("http://internal.reports.api.acme.net/v1","InternalReportsAPIService");
@Override
public InternalReportsAPIService createInternalReportsAPIService() {
return new InternalReportsAPIService(acmeReportsWsdlURL, V1_QNAME);
}
public void setAcmeReportsWsdlUrl(String acmeReportsWsdlUrl) {
try {
this.acmeReportsWsdlURL = new URL(acmeReportsWsdlUrl);
} catch (MalformedURLException ex) {
throw new RuntimeException("Acme Reports WSDL URL is bad: "+ex.getMessage(), ex);
}
}
}
La idea en este bean (utilizado como Spring Bean) es tener un singleton para gen erating un código de servicio al cliente. Requiere dos entradas: la url WSDL, es decir, la URL real del servidor que implementa el WSDL. El código de servicio al cliente, al momento de la construcción, envía una solicitud de obtención del WSDL en la URL proporcionada. Luego crea el WSDL basado en las anotaciones que residen en el código generado automáticamente, y lo compara. Creo que esto se hace para asegurarse de que se está ejecutando contra la versión correcta del servidor. Por lo tanto, coloqué el URL en un archivo de propiedades accesible para mi aplicación, por lo tanto, lo inicializo en mi archivo de contexto de la aplicación Spring.
He aquí un ejemplo del uso de la fábrica para generar un servicio y después de usarlo:
InternalReportsAPIService internalReportsAPIService = acmeReportsWSFactory.createInternalReportsAPIService();
InternalReportsAPI port = internalReportsAPIService.getInternalReportsAPIPort();
A partir de aquí, sólo tiene que utilizar la variable de puerto para llamar a cualquier operación disponibles en el WSDL.
ejemplos de trabajo son siempre agradables. –
Agregado ahora. Espero que ayude –
esto no funcionó para mí. puedes poner todos los aspectos de tu pom con respecto al wsgen y wsimport gracias. por cierto, se queja de 'Error original: no se pudieron transferir los metadatos org.jvnet.staxex: stax-ex/maven-metadata.xml de/a java.net (http://download.java.net/maven/1/): No hay conector disponible para acceder al repositorio java.net' –
- 1. cliente web para servicio web
- 2. ¿Cuál es el mejor cliente de Subversion basado en web?
- 3. ¿Cuál es la mejor manera de implementar inicio de sesión para un servicio web?
- 4. Patrón de diseño de cliente de servicio web (mejor práctica)
- 5. ¿Es posible generar un código de cliente de servicios web en un paquete especial usando apache cxf en maven?
- 6. ¿Cuál es el mejor plugin para Eclipse GWT?
- 7. Plugin de plantilla Maven?
- 8. ¿Cuál es la mejor forma de generar una sal aleatoria para un sitio web?
- 9. ¿Cuál es la mejor manera de devolver grandes cantidades de datos binarios de un servicio web?
- 10. ¿Cuál es la mejor manera de evitar maven-jar?
- 11. Generar servicio web a partir de WSDL
- 12. ¿Cuál es el mejor plugin de zoom de producto jQuery?
- 13. Cliente de servicio web Python
- 14. ¿Cómo crear un cliente Java para el servicio web?
- 15. ¿Cuál es el mejor cliente SFTP scriptable gratuito para Windows?
- 16. Cuál es la mejor manera de tener Autenticación para un servicio web
- 17. Generar un cliente de servicio web en el modo de cumplimiento WS-I
- 18. Creación de un cliente de servicio web directamente desde la fuente
- 19. cómo generar servicio web fuera de wsdl
- 20. ¿Cuál es el mejor plugin de jquery tooltip?
- 21. ¿Cuál es el mejor enfoque para construir un cliente de iPhone para una aplicación de rieles?
- 22. ¿Cuál es el tiempo razonable para generar una página web?
- 23. ¿Cuál es el mejor plugin de Eclipse gratuito para un desarrollador de Java?
- 24. biblioteca de servicio Web (SOAP) cliente genérico para C++
- 25. ¿Cuál es el mejor enfoque para deshabilitar un botón de envío (del lado del cliente)?
- 26. Error al usar Jax para generar el cliente del servicio web Proxy
- 27. Plugin de Mocha para Maven
- 28. Cliente Java para el servicio web SOAP con autenticación NTLM
- 29. Cuál es la diferencia entre maven-rpm-plugin y rpm-maven-plugin
- 30. ¿Cuál es la mejor forma de consumir un servicio web de VB6?
aquí http://stackoverflow.com/questions/2432859/difference-of-maven-jaxb-plugins dice que maven-jaxb2-plugin se desarrolla y prefiere constantemente.¿Por qué no puedes usar maven-jaxb2-plugin? – despot