JAX-WS - 在SOAP Handler中获取Message时的NoSuchMethodError

时间:2012-03-14 11:44:08

标签: java web-services jax-ws

我正在使用JDK 1.6,JAX-WS RI 2.2.5 当在服务端点没有添加处理程序时,事情很完美。但是当调用Web方法时,在服务器端添加SOAP Handler并且处理程序执行soapMessageContext.getMessage()。toString()后,客户端将获得内部服务器错误500(这意味着服务器在处理请求时遇到错误)。在服务器端,打印跟踪:

Mar 14, 2012 4:26:15 PM com.sun.xml.ws.transport.http.servlet.WSServletDelegate doGet
SEVERE: caught throwable
java.lang.NoSuchMethodError: com.sun.istack.XMLStreamReaderToContentHandler.<init>(Ljavax/xml/stream/XMLStreamReader;Lorg/xml/sax/ContentHandler;ZZ[Ljava/lang/String;)V
at com.sun.xml.ws.message.stream.StreamMessage.writePayloadTo(StreamMessage.java:355)
at com.sun.xml.ws.message.stream.StreamMessage.writeTo(StreamMessage.java:462)
at com.sun.xml.ws.message.AbstractMessageImpl.readAsSOAPMessage(AbstractMessageImpl.java:198)
at com.sun.xml.ws.handler.SOAPMessageContextImpl.getMessage(SOAPMessageContextImpl.java:84)
at com.myapp.jaxws.TestingSOAPHandler.handleMessage(TestingSOAPHandler.java:21)

经过一些谷歌搜索,它看到了它的图书馆问题。 JAX-WS也在JDK 1.6中,我也加入了我的项目。但是当我从项目中删除JAX-WS 2.2.5库时,它会触发一些缺少错误的类。

其实我不确定,它是libs兼容性还是重复问题还是别的。任何帮助都将受到高度赞赏。

以下是终点配置:

<endpoint name="TestingService" implementation="com.myapp.jaxws.TestingService" url-pattern="/jaxws/TestingService" enable-mtom="true">
<handler-chains xmlns="http://java.sun.com/xml/ns/javaee">
  <handler-chain>
      <handler>
          <handler-name>MyLogicalHandler</handler-name>
          <handler-class>com.myapp.jaxws.TestingLogicalHandler</handler-class>
      </handler>
      <handler>
          <handler-name>MySOAPHandler</handler-name>
          <handler-class>com.myapp.jaxws.TestingSOAPHandler</handler-class>
      </handler>
    </handler-chain>
</handler-chains>
</endpoint>

1 个答案:

答案 0 :(得分:3)

问题已解决。这是JAXB jar冲突,另一个较旧的JAXB实现错误地放在classpath中。并且JAXWS 2.2.6库未被认可,JVM使用的是JDK较旧的impl。详情请见此处。 http://www.bitspedia.com/2012/03/how-to-use-jax-ws-226-with-jdk-16.html