generate from example java maven-2 classpath axis2
Apache Tomcat / 7.0.641.6.3

java - example - axis2 generate client from wsdl



¿Cuál es la ruta de clases mínima para un cliente Axis2? (9)

Quiero construir un cliente Axis2 (¡solo estoy accediendo a un servicio web remoto, no lo estoy implementando!) Con Maven2 y no quiero agregar 21MB de JAR a mi proyecto. ¿Qué tengo que poner en mi pom.xml para compilar el código cuando he convertido el WSDL con ADB?


( Nota: esta respuesta fue proporcionada por el propio Aaron Digulla. Lo que sigue es el texto exacto de su propia respuesta).

En maven2, la dependencia mínima establecida para hacer que un cliente ADB funcione ("ADB" como en la forma en que creó las clases de Java a partir del WSDL) es esta:

<dependency> <groupId>org.apache.axis2</groupId> <artifactId>axis2-kernel</artifactId> <version>1.4.1</version> </dependency> <dependency> <groupId>org.apache.axis2</groupId> <artifactId>axis2-adb</artifactId> <version>1.4.1</version> </dependency>

Hmmm ... parece que no puedo señalar eso como la respuesta correcta. ¿Alguien puede copiar esto para que pueda marcar su publicación?


Si su cliente se ejecuta en Java 6, considere usar JAX-WS para consumir WS. JAX-WS utiliza el estándar JAXB para el enlace y no necesita un solo contenedor adicional para el cliente.


En realidad, solo necesita la dependencia axis-abd ya que axis2-kernel es una subdependencia de axis-abd . Por lo tanto, puedes resumirlo con:

<dependency> <groupId>org.apache.axis2</groupId> <artifactId>axis2-adb</artifactId> <version>1.5.1</version> </dependency>


Tuve que agregar los transportes, también

<dependency> <groupId>org.apache.axis2</groupId> <artifactId>axis2-adb</artifactId> <version>1.5.4</version> </dependency> <dependency> <groupId>org.apache.axis2</groupId> <artifactId>axis2-transport-local</artifactId> <version>1.5.4</version> </dependency> <dependency> <groupId>org.apache.axis2</groupId> <artifactId>axis2-transport-http</artifactId> <version>1.5.4</version> </dependency>


Los jarros mínimos para el cliente son:

  • activation-1.1.jar
  • axiom-api-1.2.8.jar
  • axiom-impl-1.2.8.jar
  • axis2-adb-1.5.1.jar
  • axis2-kernel-1.5.1.jar
  • axis2-transport-http-1.5.1.jar
  • axis2-transport-local-1.5.1.jar
  • commons-codec-1.3.jar
  • commons-httpclient-3.1.jar
  • commons-logging-1.1.1.jar
  • httpcore-4.0.jar
  • mail-1.4.jar
  • neethi-2.0.4.jar
  • wsdl4j-1.6.2.jar
  • XmlSchema-1.4.3.jar

Los archivos STAX siguientes no son parte de la versión 1.5.1 de Axis2 y serán necesarios si su versión de JDK es inferior a 6:

  • stax-1.2.0.jar
  • stax-api-1.0.1.jar

La versión 1.6.2 de Axis2 no funcionaría para mí sin axis2-xmlbeans (aunque esto puede tener algo que ver con el hecho de que también estoy usando el complemento axis2-wsdl2code-maven- plugin y xmlbeans como mi marco de enlace de datos). Tengo el siguiente POM:

<dependency> <groupId>org.apache.axis2</groupId> <artifactId>axis2-kernel</artifactId> <version>1.6.2</version> </dependency> <dependency> <groupId>org.apache.axis2</groupId> <artifactId>axis2-adb</artifactId> <version>1.6.2</version> </dependency> <dependency> <groupId>org.apache.axis2</groupId> <artifactId>axis2-transport-http</artifactId> <version>1.6.2</version> </dependency> <dependency> <groupId>org.apache.axis2</groupId> <artifactId>axis2-transport-local</artifactId> <version>1.6.2</version> </dependency> <dependency> <groupId>org.apache.axis2</groupId> <artifactId>axis2-xmlbeans</artifactId> <version>1.6.2</version> </dependency>


Para aquellos que usan Gradle , aquí excluyo las bibliotecas innecesarias:

dependencies { ext.compileEx = { lib, exModules, exGroups -> compile (lib) { exModules.each { exclude module : "$it" } exGroups.each { exclude group: "$it" } } } List axisExModules = [ ''axiom-compat'', ''jaxen'', ''apache-mime4j-core'' ] List axisExGroups = [ ''javax.servlet'', ''commons-fileupload'', ''org.apache.woden'', ''javax.ws.rs'', ''org.apache.geronimo.specs'', ''org.codehaus.woodstox'' ] compileEx (''org.apache.axis2:axis2-adb:1.6.3'', axisExModules, axisExGroups) compileEx (''org.apache.axis2:axis2-transport-local:1.6.3'', axisExModules, axisExGroups) compileEx (''org.apache.axis2:axis2-transport-http:1.6.3'', axisExModules, axisExGroups) }

Aquí está mi publicación original en los foros de Gradle.


Dependencia mínima para un cliente que trabaja en resumen

  • axiom-api-1.2.14.jar
  • axiom-impl-1.2.14.jar
  • axis2-adb-1.6.3.jar
  • axis2-kernel-1.6.3.jar
  • axis2-transport-http-1.6.3.jar
  • axis2-transport-local-1.6.3.jar
  • commons-codec-1.3.jar
  • commons-httpclient-3.1.jar
  • commons-logging-1.1.1.jar
  • httpcore-4.0.jar
  • mail-1.4.jar
  • neethi-3.0.2.jar
  • wsdl4j-1.6.2.jar
  • XmlSchema-1.4.7.jar

Enumerado debajo de las dependencias mínimas con detalles

El apéndice del cliente utiliza la clase ServiceClient generada con la herramienta% AXIS2_HOME% / bin / WSDL2Java contra un WSDL dado (para generar, necesitaría todos los ejes jar en classpath, lo que se logra más fácilmente configurando AXIS_HOME)

Clases requeridas por el talón del Cliente en el momento de COMPILAR

  • axiom-api-1.2.14.jar - requerido en tiempo de compilación por el apéndice del cliente para org.apache.axiom.om.OMElement, org.apache.axiom.soap.SOAPEnvelope, org.apache.axiom.soap.SOAPFactory, org .apache.axiom.om.OMNamespace
  • axis2-adb-1.6.3.jar - requerido en tiempo de compilación por el stub del cliente para org.apache.axis2.databinding.ADBException
  • axis2-kernel-1.6.3.jar - requerido en el tiempo de compilación por el stub del cliente para la clase org.apache.axis2.AxisFault

Clases requeridas para la invocación exitosa del código auxiliar del Cliente en el momento de EJECUTAR

  • axiom-impl-1.2.14.jar (sin esta org.apache.axiom.om.OMException: no se ha encontrado una meta fábrica para la característica ''predeterminada''; esto generalmente significa que axiom-impl.jar no se encuentra en la ruta de clases)
  • axis2-transport-http-1.6.3.jar (sin esta org.apache.axis2.deployment.DeploymentException: org.apache.axis2.transport.http.CommonsHTTPTransportSender)
  • axis2-transport-local-1.6.3.jar (sin esta org.apache.axis2.deployment.DeploymentException: org.apache.axis2.transport.local.LocalTransportSender)
  • commons-codec-1.3.jar (sin este java.lang.NoClassDefFoundError: org / apache / commons / codec / DecoderException)
  • commons-httpclient-3.1.jar (sin esta org.apache.axis2.deployment.DeploymentException: org / apache / commons / httpclient / HttpException)
  • commons-logging-1.1.1.jar (sin este java.lang.NoClassDefFoundError: org / apache / commons / logging / LogFactory)
  • httpcore-4.0.jar (sin este java.lang.NoClassDefFoundError: org / apache / http / HttpResponseFactory)
  • mail-1.4.jar (sin este java.lang.NoClassDefFoundError: javax / mail / internet / ParseException)
  • neethi-3.0.2.jar (sin este java.lang.NoClassDefFoundError: org / apache / neethi / PolicyComponent)
  • wsdl4j-1.6.2.jar (sin este java.lang.NoClassDefFoundError: javax / wsdl / WSDLException)
  • XmlSchema-1.4.7.jar (sin este java.lang.ClassNotFoundException: org / apache / ws / commons / schema / XmlSchema)

org.apache.axis2.AxisFault: conexión rechazada: connect -> ERROR SOLAMENTE si el servicio web no está activo o accesible por alguna otra razón

Tenga en cuenta la (s) versión (es) exacta (s), sin embargo, el comportamiento sería lo suficientemente genérico, sujeto a cambios de empaquetado en la versión, por lo tanto, mencionó los FQCNs arriba

Versión de Eje - 1.6.3

Versión Tomcat - Apache Tomcat / 7.0.64

Versión del servlet - 3.0

java.runtime.version - 1.7.0_79-b15


En Axis2 versión 1.5.1 los módulos maven parecen haber sido reestructurados.

Mis scripts Groovy (usando el enlace ADB) tienen las siguientes dependencias:

@Grapes([ @Grab(group=''org.apache.axis2'', module=''axis2-kernel'', version=''1.5.1''), @Grab(group=''org.apache.axis2'', module=''axis2-adb'', version=''1.5.1''), @Grab(group=''org.apache.axis2'', module=''axis2-transport-local'', version=''1.5.1''), @Grab(group=''org.apache.axis2'', module=''axis2-transport-http'', version=''1.5.1''), ])

Hay una lógica en esto. Podría usar un marco de enlace alternativo al generar mi stub o podría usar un protocolo de transporte alternativo a HTTP.

Código de ejemplo en esta respuesta