2012-02-27 79 views
14

我在嘗試使用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

回答

9

commons logging documentation中有什麼問題可能會有詳細的解釋和調試方法。您的具體問題而定,

也有另一種更不尋常的方式在這個轉換可能失敗: 即使二進制兼容,在 運行時加載的實現類可以鏈接到的不同實例LogFactory類。 欲瞭解更多信息,請參閱tech guide

6

鏈接到上述Documentation節「修復」建議包括

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

。 對某些人來說可能更容易有此代碼來代替:

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

這個解決方案中沒有爲我工作。我弄清楚我的溶液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文檔給出了更多的選擇,這對我很有用。