2012-02-27 6 views
14

軸を使用してSOAP Webサービスを呼び出そうとしているときに、この例外が発生します。基本的に私は軸クライアントを書いています。共通ログjarとApacheの軸SOAPクライアントとの競合

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

私はすべて共通のロギングのjarファイルを削除すると、私はこれらのエラーを取り除くことができるだろうが、これらのjarファイルは、他のAPIから来て、私はそれらのコントロールを持っていけません。

この問題を解決する方法はありますか?

+0

おそらく、最良の解決策を以下に示します。しかし、あなたがmavenプロジェクトを使用している場合は、除外によってコモンズロギングを削除することができます。 \t \t コモンズ・ログ \t \t \t コモンズ・ログ 1.4 \t Purushothaman

答えて

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

どれも私のために働いていません。私は

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

SLF4Jのドキュメントで私の解決策を見つけ出す代替2)・コモンズ・ロギングがかなり簡単にすることができ、 が便利ポンポン内で提供 スコープでそれを宣言することで、依存関係として除外範囲を提供します。プロジェクトのxmlファイル。実際の コモンズログクラスは、jcl-over-slf4jによって提供されます。この は、次のポンポンのファイルの断片に変換:

<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> 

最初の依存関係の宣言は、本質的に コモンズ・ロギングが「何とか」ご使用の環境によって提供されているだろうと述べています。 2番目の宣言には、プロジェクトにjcl-over-slf4jが含まれています。 jcl-over-slf4jは、 commons-loggingの完全なバイナリ互換の置換えであるため、最初のアサーションはtrueになります。残念ながら、 のスコープでcommons-loggingを宣言すると、ジョブ が完了します。 Eclipseでは、IDEで見られるように、プロジェクトのクラスパスである にcommons-logging.jarが配置されます。 は、IDEの によってcommons-logging.jarより前にjcl-over-slf4j.jarが表示されるようにする必要があります。

SLF4Jのドキュメントには、もっと多くの選択肢がありますが、これは私の役に立つものでした。