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

Java 常见日志jar与apache axis soap客户端冲突,java,axis2,Java,Axis2,我在尝试使用axis调用SOAP Web服务时遇到此异常。基本上我已经写了一个axis客户端 org.apache.commons.discovery.DiscoveryException: Class org.apache.commons.logging.impl.SLF4JLogFactory does not implement org.apache.commons.logging.LogFactory. 当我删除所有常见的日志jar时,我将能够删除这些错误,但是这些jar来自其他api

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

org.apache.commons.discovery.DiscoveryException: Class org.apache.commons.logging.impl.SLF4JLogFactory does not implement org.apache.commons.logging.LogFactory.
当我删除所有常见的日志jar时,我将能够删除这些错误,但是这些jar来自其他api,我无法控制它们


有什么方法可以克服这个问题吗?

有一个非常详细的解释,说明了问题可能是什么,以及如何在中调试它。你的问题可能是

还有另一种更不寻常的方式,这种铸造可能会失败: 即使二进制文件兼容,也会在 运行时可以链接到LogFactory类的不同实例。 有关更多信息,请参阅


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

 -Dorg.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.LogFactoryImpl
在您的设置中。 对于某些人来说,可能更容易包含以下代码:

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

这些解决方案对我都不起作用。我在SLF4J文档中找到了我的解决方案

备选方案2)提供的范围共用日志记录可以非常简单 通过在提供的 项目的pom.xml文件中的范围。实际的 公共日志类将由jcl-over-slf4j提供。这 转换为以下pom文件片段:


公用记录
公用记录
1.1.1  
假如
org.slf4j
jcl-over-slf4j
1.7.21
第一个依赖项声明基本上声明 commons日志记录将由您的环境“以某种方式”提供。这个 第二个声明将jcl-over-slf4j包含到您的项目中。作为 jcl-over-slf4j是一个完美的二进制兼容的替代品 在commons日志中,第一个断言变为true。不幸的是, 在声明commons时,在提供的作用域中进行日志记录将获得作业 完成后,您的IDE(例如Eclipse)仍将放置commons-logging.jar IDE看到的项目的类路径。你需要做出决定 确保jcl-over-slf4j.jar在commons-logging.jar之前是可见的 你的IDE


SLF4J文档提供了更多的替代方案,这对我很有用。

用commons日志jar替换jcl-over-SLF4J jar

可能为时已晚:-),但对我来说,下面的方法很有效。我正在使用SpringBoot,并将其添加为主要方法的第一行。以上建议的更多解释如下


下面可能给出了最佳解决方案。但是如果您使用的是maven项目,那么您可以通过排除来删除commons日志记录。axis axis 1.4 commons logging commons logging这应该是公认的答案。在这里所有的建议中,这是唯一对我有用的!正如OP中所述,错误来自第三方LIB。所以这不是一个解决方案。还有,这比7年前被接受的答案更好吗?在这种情况下,你应该在答案中添加这种上下文。
<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>
    System.setProperty("org.apache.commons.logging.LogFactory", "org.apache.commons.logging.impl.LogFactoryImpl");