0

私は Web サービスを開発し、それを Websphere 7.0 にデプロイし、同じアプリケーション サーバーでも実行される JAX-WS API を使用して動的ディスパッチ クライアントを開発しました。次の行でエラーが発生します。

Dispatch<SOAPMessage> dispatch = service.createDispatch(portName, SOAPMessage.class, Service.Mode.MESSAGE);
Error:
Caused by: java.lang.NoSuchMethodError: com/sun/istack/logging/Logger.getLogger(Ljava/lang/Class;)Lcom/sun/istack/logging/Logger;
at com.sun.xml.ws.api.config.management.policy.ManagementAssertion.<clinit>(ManagementAssertion.java:87)
at java.lang.J9VMInternals.initializeImpl(Native Method)
at java.lang.J9VMInternals.initialize(J9VMInternals.java:200)
at java.lang.J9VMInternals.initialize(J9VMInternals.java:167)
at com.sun.xml.ws.server.MonitorBase.createManagedObjectManager(MonitorBase.java:177)
at com.sun.xml.ws.client.Stub.<init>(Stub.java:196)
at com.sun.xml.ws.client.Stub.<init>(Stub.java:174)
at com.sun.xml.ws.client.dispatch.DispatchImpl.<init>(DispatchImpl.java:129)
at com.sun.xml.ws.client.dispatch.SOAPMessageDispatch.<init>(SOAPMessageDispatch.java:77)
at com.sun.xml.ws.api.pipe.Stubs.createSAAJDispatch(Stubs.java:143)
at com.sun.xml.ws.api.pipe.Stubs.createDispatch(Stubs.java:264)
at com.sun.xml.ws.client.WSServiceDelegate.createDispatch(WSServiceDelegate.java:390)
at com.sun.xml.ws.client.WSServiceDelegate.createDispatch(WSServiceDelegate.java:401)
at com.sun.xml.ws.client.WSServiceDelegate.createDispatch(WSServiceDelegate.java:383)
at javax.xml.ws.Service.createDispatch(Service.java:336) 

次の依存関係を含めました。

    <dependency>
        <groupId>javax.xml.ws</groupId>
        <artifactId>jaxws-api</artifactId>
        <version>2.1</version>
    </dependency>

また、ポリシーの依存関係を追加してみました (バージョン - 2.2 および 2.2.1)

<dependency>
        <groupId>com.sun.xml.ws</groupId>
        <artifactId>policy</artifactId>
        <version>2.2.1</version>
</dependency>

追加する必要がある依存関係についてのアイデアはありますか?

4

4 に答える 4

1

jaxb-impl jar (2.2) には、istack-commons-runtime jar と同じロギング クラスが含まれています。

バージョンの不一致を修正するために、次の除外を追加します。

<dependency>
    <groupId>com.sun.xml.ws</groupId>
    <artifactId>jaxws-rt</artifactId>
    <version>2.2</version>
    <exclusions>
        <exclusion>
            <artifactId>istack-commons-runtime</artifactId>
            <groupId>com.sun.istack</groupId>
        </exclusion>
    </exclusions>
</dependency>
于 2011-02-01T15:07:45.330 に答える
0

問題は、このクラスが複数出現する可能性が高いという事実です-クラスパスにロガー(com.sun.istack.logging.Logger)。

コードがコンパイルされると、実行時に検出されるものとは異なるこのLoggerクラスにアクセスできました。

2つの可能性:

  1. 実行時にロガーのコピーが1つだけあり、コンパイル中に使用されたものと一致しません。

  2. このロガーには複数のコピーがあり、クラスローダーは最初に誤ったコピーを検出するため、このエラーを報告します。

このファイルを含むJARを確認してください。

通常、jaxb-osgi.jarにあります。

HTHマングル

于 2010-05-25T06:14:04.573 に答える
0

JAX-WS 2.1 はすでに Java 6 に組み込まれているので、アプリケーションにバンドルする必要はありません (Java 6 を使用している場合)。試してみると、このようなクラスローディング エラーが発生する可能性があります。

を含むすべての jax-ws JAR をアプリから削除してみてくださいjaxws-api

于 2010-05-21T07:08:14.980 に答える
0

私は同じ問題を抱えていましたが、問題は jaxb バージョンの互換性に関連していました。Apache Camel camel-core 依存関係は、jaxb-core と jaxb-impl をインポートしていました。jaxws-rt の依存関係からそれらを削除すると、問題が解決しました。

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-core</artifactId>
    <version>${org.apache.camel.version}</version>
    <exclusions>
        <exclusion>
             <groupId>com.sun.xml.bind</groupId>
             <artifactId>jaxb-core</artifactId>
         </exclusion>
         <exclusion>
             <groupId>com.sun.xml.bind</groupId>
             <artifactId>jaxb-impl</artifactId>
         </exclusion>
    </exclusions>
</dependency>
于 2020-08-15T21:54:31.823 に答える