【问题标题】:common logging jar conflict with apache axis soap client常见的日志记录 jar 与 apache 轴肥皂客户端冲突
【发布时间】:2012-03-16 16:20:14
【问题描述】:

我在尝试使用轴调用 SOAP Web 服务时遇到此异常。基本上我已经写了一个轴客户端。

org.apache.commons.discovery.DiscoveryException: Class org.apache.commons.logging.impl.SLF4JLogFactory does not implement org.apache.commons.logging.LogFactory.

当我删除所有常见的日志记录 jar 时,我可以删除这些错误,但是这些 jar 来自其他 api,我无法控制它们。

有什么办法可以解决这个问题吗?

【问题讨论】:

  • 可能最好的解决方案如下。但是,如果您使用的是 maven 项目,那么您可以通过排除删除 commons-logging。 axisaxis1.4commons-loggingcommons-logging

标签: java axis2


【解决方案1】:

commons logging documentation 中有关于问题可能是什么以及调试方法的非常详细的解释。您的具体问题可能是,

还有另一种更不寻常的方式会导致此转换失败: 即使二进制文件兼容,加载的实现类 运行时可以链接到 LogFactory 类的不同实例。 如需更多信息,请参阅tech guide

【讨论】:

    【解决方案2】:

    上述Documentation 到“修复”部分的链接建议包括

     -Dorg.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.LogFactoryImpl
    

    在您的设置中。 对于某些人来说,包含此代码可能更容易:

    static
    {
        System.setProperty(LogFactory.FACTORY_PROPERTY, LogFactory.FACTORY_DEFAULT);
    }
    

    【讨论】:

      【解决方案3】:

      这些解决方案都不适合我。我在 SLF4J 文档中找到了我的解决方案

      http://slf4j.org/faq.html#excludingJCL

      alternative 2) 提供范围 Commons-logging 可以相当简单并且 通过在提供的声明中方便地将其排除为依赖项 项目的 pom.xml 文件中的范围。实际上 公共日志记录类将由 jcl-over-slf4j 提供。这 翻译成以下pom文件sn-p:

      <dependency>  
         <groupId>commons-logging</groupId>  
         <artifactId>commons-logging</artifactId>
         <version>1.1.1</version>  
         <scope>provided</scope>
      </dependency> 
      
      <dependency>
         <groupId>org.slf4j</groupId>  
         <artifactId>jcl-over-slf4j</artifactId>
         <version>1.7.21</version>
      </dependency>
      

      第一个依赖声明本质上说 commons-logging 将由您的环境“以某种方式”提供。这 第二个声明将 jcl-over-slf4j 包含到您的项目中。作为 jcl-over-slf4j 是一个完美的二进制兼容替代品 commons-logging,第一个断言变为真。很遗憾, 在提供的范围内声明 commons-logging 得到工作 完成,您的 IDE,例如Eclipse,仍会将 commons-logging.jar 放在 IDE 看到的项目的类路径。你需要做 确保 jcl-over-slf4j.jar 在 commons-logging.jar 之前可见 你的 IDE。

      SLF4J 文档提供了更多选择,这对我有用。

      【讨论】:

      • 这应该是公认的答案。在这里的所有建议中,这是唯一对我有用的!
      【解决方案4】:

      用 commons-logging jar 替换 jcl-over-slf4j jar

      【讨论】:

      • 如 OP 中所述,错误来自 3rd 方库。所以这不是一个解决方案。另外,这比 7(!)年前接受的答案有什么好处?
      • 在这种情况下,您应该将这种上下文添加到答案中。
      【解决方案5】:

      可能为时已晚:-) 但对我来说,以下工作。我正在使用弹簧靴并将其添加为主要方法的第一行。上面建议的更多解释是here

          System.setProperty("org.apache.commons.logging.LogFactory", "org.apache.commons.logging.impl.LogFactoryImpl");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-01-27
        • 2011-07-07
        • 1970-01-01
        • 2014-01-09
        • 1970-01-01
        • 1970-01-01
        • 2011-08-11
        • 2017-09-27
        相关资源
        最近更新 更多