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

2022-09-02 21:08:11

我在尝试使用轴调用 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,我无法控制它们。

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


答案 1

共享资源日志记录文档中,有一个非常详细的解释,说明问题可能是什么以及调试它的方法。您的特定问题可能是,

还有另一种更不寻常的方式,这种强制转换可能会失败:即使二进制文件兼容,在运行时加载的实现类也可能链接到LogFactory类的不同实例。有关详细信息,请参阅技术指南


答案 2

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

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

备选方案2)提供范围 Commons-logging可以相当简单方便地排除为依赖项,方法是在项目的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-loging可以完成工作,但你的IDE,例如Eclipse,仍然会将commons-log.jar放在你的IDE所看到的项目的类路径上。您需要确保 jcl-over-slf4j.jar 在共享资源日志记录之前可见.jar由 IDE 提供。

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


推荐