NoSuchMethodError:com / sun / istack / logging / Logger.getLogger

时间:2010-05-20 21:42:07

标签: web-services websphere jaxb jax-ws webservice-client

我开发了一个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 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

我相信JAX-WS 2.1已内置于Java 6中,因此您不需要将其与应用程序捆绑在一起(假设您使用的是Java 6)。如果你尝试,你可能会遇到像这样的类加载错误。

尝试从应用中删除所有jax-ws JAR,包括jaxws-api

答案 2 :(得分:0)

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

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

两种可能性:

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

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

  3. 检查包含此文件的JAR。

    通常在jaxb-osgi.jar中找到。

    HTH Manglu

答案 3 :(得分:0)

我遇到了同样的问题,该问题与jaxb版本兼容性有关。 Apache Camel骆驼核心依赖项正在导入jaxb-core和jaxb-impl。从jaxws-rt的依赖项中删除它们可以解决问题。

var xlsx = require("xlsx");

var oldBook = xlsx.readFile("example.xlsx", {cellDates: true});

var oldSheet = oldBook.Sheets["Sheet1"];


var OldSheetJSON = xlsx.utils.sheet_to_json(oldSheet);

var newSheet;

var newBook;

newFileCreator = (oldSheet,propertyValue1,propertyValue2,name) => {

    

    oldSheet[5].__EMPTY_2 = propertyValue1;
    oldSheet[6].__EMPTY_2 = propertyValue2;

    newSheet = xlsx.utils.json_to_sheet(oldSheet);

    newBook = xlsx.utils.book_new();

    xlsx.utils.book_append_sheet(newBook,newSheet,name)

    xlsx.writeFile(newBook,name + ".xlsx")

};

newFileCreator(oldSheet,"x", "y"," JOHN DOE" );