常见的日志jar与apache axis soap客户端冲突

时间:2012-02-27 06:24:30

标签: java axis2

我在尝试使用axis调用SOAP webservice时遇到此异常。基本上我写了一个轴客户端。

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

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

有没有办法克服这个问题?

5 个答案:

答案 0 :(得分:11)

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

  

还有另一种更不寻常的方式可以使这个演员失败:   即使二进制文件兼容,实现类也会加载   运行时可以链接到LogFactory类的不同实例。   有关详细信息,请参阅tech guide

答案 1 :(得分:7)

指向上述Documentation至"修正"的链接建议包括

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

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

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

答案 2 :(得分:3)

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

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

  

备选方案2)提供范围Commons-logging可以相当简单   通过在提供的中声明它来方便地排除作为依赖   项目的pom.xml文件中的范围。实际上   公共日志类将由jcl-over-slf4j提供。这个   转换为以下pom文件片段:

<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是完美的二进制兼容替代品   公共记录,第一个断言成为现实。不幸,   声明公共空间 - 在提供的范围内进行日志记录可以获得这项工作   完成,您的IDE,例如Eclipse,仍将放置commons-logging.jar   IDE所见的项目类路径。你需要做   确保jcl-over-slf4j.jar在commons-logging.jar之前可见   你的IDE。

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

可能为时已晚:-),但对我而言,以下方法奏效了。我正在使用spring boot并将其作为主要方法的第一行添加。以上建议的更多解释是here

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