apache soap soap客户端常见日志记录jar冲突

问题描述:

我在尝试使用axis调用SOAP webservice时收到此异常。基本上我写了一个轴客户端。apache soap soap客户端常见日志记录jar冲突

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

当我删除了所有常见的日志记录罐子,我就能够消除这些错误,但这些罐是从其他的API来了,我没有对他们的控制。

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

+0

可能最好的解决方案如下。但是如果你使用的是Maven项目,那么你可以通过排除来删除commons-logging。 1.4 \t \t \t \t 共享记录 \t \t \t 共享记录 Purushothaman 2017-05-09 12:09:35

commons logging documentation中有什么问题可能会有详细的解释和调试方法。您的具体问题而定,

也有另一种更不寻常的方式在这个转换可能失败: 即使二进制兼容,在 运行时加载的实现类可以链接到的不同实例LogFactory类。 欲了解更多信息,请参阅tech guide

链接到上述Documentation节“修复”建议包括

-Dorg.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.LogFactoryImpl 
在您的设置

。 对某些人来说可能更容易有此代码来代替:

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

这个解决方案中没有为我工作。我弄清楚我的溶液SLF4J文档中

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

备选2)提供范围共享记录可以是相当简单且 由POM内所提供的 范围声明它方便地排除作为依赖。您项目的xml文件。实际的 commons-logging类将由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> 

第一依赖声明主要指出 共享记录将是“莫名其妙”的环境中提供。 第二个声明将jcl-over-slf4j包含到您的项目中。由于 jcl-over-slf4j是 commons-logging的完美二进制兼容替代品,因此第一个断言将变为true。不幸的是, 在声明所提供范围内的公用日志记录完成作业 时,您的IDE(例如, Eclipse仍然会将IDE的commons-logging.jar放置在项目的类路径中。你需要确定在你的IDE之前jcl-over-slf4j.jar在commons-logging.jar之前可见 。

SLF4J文档给出了更多的选择,这对我很有用。