我在尝试使用axis调用SOAP webservice时遇到此异常。基本上我写了一个轴客户端。
org.apache.commons.discovery.DiscoveryException: Class org.apache.commons.logging.impl.SLF4JLogFactory does not implement org.apache.commons.logging.LogFactory.
当我删除所有常见日志记录罐时,我可以删除这些错误,但这些罐子来自其他api,我无法控制它们。
有没有办法克服这个问题?
答案 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");