3

私はJavaでWebサービスを実装し、JavaでもWebサービスクライアントを実装しています。WebサービスとWebサービスクライアントの両方が異なるプロジェクトにあり、jacobを使用してdllを作成しています。

私のWebサービスとWebサービスクライアントは同じコンピューター上にあります。Webサービスクライアントを使用してWebサービスを呼び出すときはいつでも、次の例外が発生します。

例外

org.apache.jasper.JasperException: javax.xml.ws.soap.SOAPFaultException: ネイティブ ライブラリ C:\Program Files (x86)\Java\jdk1.6.0_24\bin\jacob.dll が別のクラスローダーに既にロードされている根本的な原因

javax.xml.ws.soap.SOAPFaultException: ネイティブ ライブラリ C:\Program Files (x86)\Java\jdk1.6.0_24\bin\jacob.dll が別のクラスローダーに既にロードされている根本的な原因

java.lang.UnsatisfiedLinkError: Native Library C:\Program Files (x86)\Java\jdk1.6.0_24\bin\jacob.dll は別のクラスローダーに既にロードされています

4

1 に答える 1

7

jacob.dll は、JVM のインスタンスごとに 1 回だけロードできます。ライブラリ jacob.jar が複数回ロードされると、jacob.dll も複数回ロードしようとします。

これを回避するには、両方の Web サービスから jacob.jar を削除し、両方の Web サービスが共有するクラスローダーが検出できる場所に置きます。そうすれば、jacob.jar は 1 回だけロードされます。たとえば、Tomcat を使用している場合は、その Tomcat の /lib ディレクトリに jacob.jar を配置します。

于 2012-02-17T13:06:49.183 に答える