【问题标题】:What's the minimum classpath for an Axis2 client?Axis2 客户端的最小类路径是什么?
【发布时间】:2010-09-24 03:01:56
【问题描述】:

我想用 Maven2 构建一个 Axis2 客户端(我只是访问一个远程 Web 服务,我没有实现一个!)我不想添加 21MB 的 JAR 到我的项目。当我使用 ADB 转换 WSDL 时,我必须在 pom.xml 中放入什么来编译代码?

【问题讨论】:

    标签: java maven-2 classpath axis2


    【解决方案1】:

    总结对工作客户端的最小依赖


    • 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

    下面列出了带有详细信息的最小依赖项

    客户端存根使用 %AXIS2_HOME%\bin\WSDL2Java 工具针对给定 WSDL 生成的 ServiceClient 类(为了生成,您需要类路径上的所有轴 jar,通过设置 AXIS_HOME 最容易实现)

    客户端存根在编译时需要的类


    • axiom-api-1.2.14.jar - 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 -- org.apache.axis2.databinding.ADBException 的客户端存根在编译时需要
    • axis2-kernel-1.6.3.jar -- org.apache.axis2.AxisFault 类的客户端存根在编译时需要

    RUN时间成功调用客户端存根所需的类

    • axiom-impl-1.2.14.jar(没有这个 org.apache.axiom.om.OMException: No meta factory found for feature 'default';这通常意味着 axiom-impl.jar 不在类路径中)
    • axis2-transport-http-1.6.3.jar(没有这个 org.apache.axis2.deployment.DeploymentException: org.apache.axis2.transport.http.CommonsHTTPTransportSender)
    • axis2-transport-local-1.6.3.jar(没有这个 org.apache.axis2.deployment.DeploymentException: org.apache.axis2.transport.local.LocalTransportSender)
    • commons-codec-1.3.jar(没有这个 java.lang.NoClassDefFoundError: org/apache/commons/codec/DecoderException)
    • commons-httpclient-3.1.jar(没有这个 org.apache.axis2.deployment.DeploymentException: org/apache/commons/httpclient/HttpException)
    • commons-logging-1.1.1.jar(没有这个 java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory)
    • httpcore-4.0.jar(没有这个 java.lang.NoClassDefFoundError: org/apache/http/HttpResponseFactory)
    • mail-1.4.jar(没有这个 java.lang.NoClassDefFoundError: javax/mail/internet/ParseException)
    • neethi-3.0.2.jar(没有这个 java.lang.NoClassDefFoundError: org/apache/neethi/PolicyComponent)
    • wsdl4j-1.6.2.jar(没有这个 java.lang.NoClassDefFoundError: javax/wsdl/WSDLException)
    • XmlSchema-1.4.7.jar(没有这个 java.lang.ClassNotFoundException:org/apache/ws/commons/schema/XmlSchema)

    org.apache.axis2.AxisFault:连接被拒绝:连接 -> 仅当 Web 服务因其他原因未启动或无法访问时才出现错误

    请注意确切的版本,但行为会因版本之间的打包更改而足够通用,因此,上面提到了 FQCN-

    轴版本 - 1.6.3

    Tomcat 版本 - Apache Tomcat/7.0.64

    Servlet 版本 - 3.0

    java.runtime.version - 1.7.0_79-b15

    【讨论】:

    • 谢谢。这正是我想要的。
    【解决方案2】:

    对于那些使用 Gradle 的人,这里我排除了不必要的库:

    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)
    
    }
    

    Here 是我在 Gradle 论坛中的原始帖子。

    【讨论】:

      【解决方案3】:

      Axis2 版本 1.6.2 如果没有 axis2-xmlbeans 对我不起作用(尽管这可能与我也在使用 axis2-wsdl2code- maven-plugin 插件和 xmlbeans 作为我的数据绑定框架)。我有以下 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>
      

      【讨论】:

      • 我认为,如果在从 WSDL 文件生成 Java 类时使用 -d xmlbeans 选项,则应该只需要 XML Beans 库,然后就不需要axis2-adb 依赖项。见:axis.apache.org/axis2/java/core/docs/…
      【解决方案4】:

      客户端的最小罐子是:

      • 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

      以下 STAX jar 不是 Axis2 1.5.1 版本的一部分,如果您的 JDK 版本低于 6,则需要:

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

      【讨论】:

      • 非常完整的列表。正是我需要让 Axis2 在我的 Websphere Application Server v8.5 上工作
      【解决方案5】:

      也必须添加运输工具

      <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>
      

      【讨论】:

      • +1,是的,在较新的 Axis2 版本中,某些类不再在 axis2-kernel 中,例如LocalTransportSender, CommonsHTTPTransportSender
      • 我也能够摆脱 axis2-transport-local,但这可能只是因为我正在以编程方式配置 Axis。
      【解决方案6】:

      在 Axis2 版本 1.5.1 中,maven 模块似乎已经过重组。

      我的 Groovy 脚本(使用 ADB 绑定)具有以下依赖项:

      @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'),
      ])
      

      这些都是有逻辑的。在生成我的存根时,我可以使用替代绑定框架,或者可以使用替代 HTTP 的传输协议。

      answer中的示例代码

      【讨论】:

        【解决方案7】:

        实际上,您只需要 axis-abd 依赖项,因为 axis2-kernelaxis-abd 的子依赖项。 因此,您可以总结为:

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

        【讨论】:

        • 但是请注意,Maven 最佳实践表明,如果您在代码中使用axis2-kernel 中的任何内容,您应该明确声明它。这样您以后在删除 adb 时就不会遇到意外的惊喜。 (当然,内核应该始终包含在内,至少您认为会包含在内)
        【解决方案8】:

        如果您的客户端在 Java 6 上运行,请考虑使用 JAX-WS 来使用 WS。 JAX-WS 使用 JAXB 标准进行绑定,客户端不需要一个额外的 jar。

        【讨论】:

        • 当我们的生产服务器迁移到 Java 6 时,我会考虑这一点,这应该会在未来十年左右发生...... ;)
        【解决方案9】:

        注意:此回复由 Aaron Digulla 本人提供。以下是他自己回复的确切文本。)

        在 maven2 中,使 ADB 客户端工作的最小依赖设置(“ADB”,就像您从 WSDL 创建 Java 类的方式一样)是这样的:

            <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>
        

        嗯...看来我无法将其标记为正确答案。有人可以复制这个,以便我可以标记他的帖子吗?

        【讨论】:

        • 在较新的 Axis2 版本中,提到的依赖项是不够的,请参阅下面 Renaud 的回答
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-23
        • 2011-05-08
        • 1970-01-01
        • 1970-01-01
        • 2018-07-01
        相关资源
        最近更新 更多