Нашего клиента веб-службы в живой среде в последнее время получил исключение: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
И я понял, что наш клиент получил ошибку SOAP с сервера, и в нем отсутствует файл jar. Поэтому я пытаюсь решить проблему, сначала воссоздав ее.
Я создал простой проект веб-сервиса в Eclipse, который имеет веб-метод, который генерирует простой класс ошибок, аннотированный @WebFault
. Затем я создал простой клиентский проект веб-сервиса, который использует веб-метод. Клиентский проект не имеет дополнительных библиотек/банок в своем пути к классам; все, что у него есть, это JRE. К моему удивлению, он не выбрал исключение NoClassDefFoundError! Вместо этого я получил javax.xml.ws.soap.SOAPFaultException
, который я определил на стороне сервера.
Класс SOAPFaultBuilder
действительно находится в rt.jar в JRE. Таким образом, простые проекты веб-сервисов, которые я создал, возможно, просто работают так, как должны. Однако, как клиент веб-службы в нашей живой среде генерирует исключение NoClassDefFoundError
? Этот проект определенно имеет rt.jar в пути к классам.
Может ли кто-нибудь пролить свет на эту проблему? Если в нем отсутствуют некоторые файлы jar (либо из jaxws RI, либо Apache CXF или других), почему бы простой простой клиент, который я создал, не выбрасывал ошибку? Как среда, так и моя локальная среда используют Java7u51.
Одна вещь, которую я узнал после этого сообщения, - это разница между 'java.lang.ClassNotFoundException' и' java.lang.NoClassDefFoundError'. В этом случае проблема, вероятно, связана с тем, что 'SOAPFaultBuilder' не удалось инициализировать по какой-либо другой причине. К сожалению, я не нашел других исключений в наших производственных журналах. На данный момент я просто попытаюсь исправить проблему, добавив 'jaxws-api.jar',' jaxws-rt.jar', 'jaxws-tools.jar' и' saaj-impl.jar' путь к классам, как и другие сообщений. – xli
Я использую TomEE с RS-libs ... но у вас тоже есть проблема ... @xli У вас есть какой-то прогресс, так как вы работали над этим? – FibreFoX
@FibreFoX Не много. Вы можете попробовать добавить эти JAR, чтобы узнать, помогает ли это. Я закончил удаление этих JAR, потому что они вызвали некоторую проблему зависимости в нашей системе. – xli