JAX-WS - NoSuchMethodError при получении сообщения в обработчике SOAP - PullRequest
4 голосов
/ 14 марта 2012

Я использую JDK 1.6, JAX-WS RI 2.2.5. Все работает отлично, когда на конечной точке сервиса не добавлен обработчик.Но когда веб-метод вызывается, после добавления обработчика SOAP на стороне сервера и выполнения обработчиком 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)

После некоторого поиска в Google, он видит свою проблему с библиотеками.JAX-WS также присутствует в JDK 1.6, и я также добавил в свой проект.Но когда я удаляю библиотеки JAX-WS 2.2.5 из проекта, это вызывает ошибку пропуска некоторых классов.

На самом деле я не уверен, что это проблема совместимости или дублирования библиотек или что-то еще.Любая помощь будет принята с благодарностью.

Вот конфигурация конечной точки:

<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 Ответ

3 голосов
/ 16 марта 2012

Проблема решена. Это был конфликт jar JAXB, другая классическая реализация JAXB была неправильно помещена в classpath И библиотеки JAXWS 2.2.6 не были одобрены, JVM использовала JDK старше Подробности здесь. http://www.bitspedia.com/2012/03/how-to-use-jax-ws-226-with-jdk-16.html

...