2015-02-11 2 views
4

Нашего клиента веб-службы в живой среде в последнее время получил исключение:NoClassDefFoundError для com.sun.xml.internal.ws.fault.SOAPFaultBuilder

java.lang.NoClassDefFoundError: Could not initialize class com.sun.xml.internal.ws.fault.SOAPFaultBuilder 
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:107) 
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:78) 
at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:135) 
at com.sun.proxy.$Proxy146.search(Unknown Source) 
.... 

Я сделал много поиска в Интернете, в том числе несколько вывешивает здесь StackOverflow:

Catching webservice exception with CXF: NoClassDefFoundError: SOAPFaultBuilder

Could not initialize class com.sun.xml.internal.ws.fault.SOAPFaultBuilder

java.lang.NoClassDefFoundError: Could not initialize class com.sun.xml.internal.ws.fault.SOAPFaultBuilder

И я понял, что наш клиент получил ошибку SOAP с сервера, и в нем отсутствует файл jar. Поэтому я пытаюсь решить проблему, сначала воссоздав ее.

Я создал простой проект веб-сервиса в Eclipse, который имеет веб-метод, который генерирует простой класс ошибок, аннотированный @WebFault. Затем я создал простой клиентский проект веб-сервиса, который использует веб-метод. Клиентский проект не имеет дополнительных библиотек/банок в своем пути к классам; все, что у него есть, это JRE. К моему удивлению, он не выбрал исключение NoClassDefFoundError! Вместо этого я получил javax.xml.ws.soap.SOAPFaultException, который я определил на стороне сервера.

Класс SOAPFaultBuilder действительно находится в rt.jar в JRE. Таким образом, простые проекты веб-сервисов, которые я создал, возможно, просто работают так, как должны. Однако, как клиент веб-службы в нашей живой среде генерирует исключение NoClassDefFoundError? Этот проект определенно имеет rt.jar в пути к классам.

Может ли кто-нибудь пролить свет на эту проблему? Если в нем отсутствуют некоторые файлы jar (либо из jaxws RI, либо Apache CXF или других), почему бы простой простой клиент, который я создал, не выбрасывал ошибку? Как среда, так и моя локальная среда используют Java7u51.

+0

Одна вещь, которую я узнал после этого сообщения, - это разница между 'java.lang.ClassNotFoundException' и' java.lang.NoClassDefFoundError'. В этом случае проблема, вероятно, связана с тем, что 'SOAPFaultBuilder' не удалось инициализировать по какой-либо другой причине. К сожалению, я не нашел других исключений в наших производственных журналах. На данный момент я просто попытаюсь исправить проблему, добавив 'jaxws-api.jar',' jaxws-rt.jar', 'jaxws-tools.jar' и' saaj-impl.jar' путь к классам, как и другие сообщений. – xli

+0

Я использую TomEE с RS-libs ... но у вас тоже есть проблема ... @xli У вас есть какой-то прогресс, так как вы работали над этим? – FibreFoX

+0

@FibreFoX Не много. Вы можете попробовать добавить эти JAR, чтобы узнать, помогает ли это. Я закончил удаление этих JAR, потому что они вызвали некоторую проблему зависимости в нашей системе. – xli

ответ

1

У меня был такой же erorr, и я решил эту проблему, удалив jax-impl.jar из папки tomcat lib. Это был возможный конфликт версий jaxb jar с одним из моих webapps, установленным в tomcat.

http://programtalk.com/java/i-was-running-gwt-application-on-tomca/

+0

Обратите внимание, что [ссылки только ответов] (http://meta.stackoverflow.com/tags/link-only-answers/info) не приветствуются, ответы SO должны быть конечной точкой поиска решения (vs. еще одна остановка ссылок, которые со временем становятся устаревшими). Пожалуйста, подумайте о добавлении отдельного резюме здесь, сохранив ссылку в качестве ссылки. – kleopatra

+0

получил смысл. спасибо за указание .. будут иметь в виду будущие должности – awsome

0

я столкнулся с той же проблемой, и я мог бы впоследствии решить эту проблему.

Из-за следующей ошибки, упомянутой в проблеме, невозможно найти причину ошибки SOAP Fault.

Я выполнил шаги, указанные в следующей ссылке, чтобы определить причину NoClassDefFoundError.

http://javarevisited.blogspot.in/2011/06/noclassdeffounderror-exception-in.html 

я мог бы найти следующие ошибки в моем журнале приложений:

java.lang.ExceptionInInitializerError
Вызванный: java.lang.ClassCastException: com.sun.xml.bind.v2. runtime.JAXBContextImpl не может быть приведен к com.sun.xml.internal.bind.api.JAXBRIContext

причина выше исключение classcast из-за конфликтующие файлы баночка.

rt.jar (это присутствует в jre classpath) jaxb-impl-2.0.1.jar (это присутствует в моем приложении classpath).

Я удалил файл jaxb-impl-2.0.1.jar из моего пути к классам, и фактическая ошибка исчезла.