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

问题是此类路径中可能多次出现此类 - Logger (com.sun.istack.logging.Logger)。

编译代码时,它可以访问这个 Logger 类,这与运行时发现的不同。

两种可能:

  1. 在运行时只有一个 Logger 副本,它与编译期间使用的不匹配。

  2. 此 Logger 有多个副本,类加载器首先找到不正确的副本,因此报告此错误。

检查包含此文件的 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 回答