2015-02-11 22 views
4

我們在實際環境中Web服務客戶最近得到了異常:的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 Fault,它缺少一些jar文件。所以我試圖通過重新創建來解決這個問題。

我在Eclipse中創建了一個簡單的Web服務服務器項目,它有一個web方法拋出一個簡單的錯誤類@WebFault註釋。然後我創建了一個簡單的Web服務客戶端項目,它使用Web方法。客戶端項目的類路徑中沒有任何額外的庫/ jar;它只有JRE。令我驚訝的是,它沒有拋出NoClassDefFoundError異常!相反,我得到了我在服務器端定義的javax.xml.ws.soap.SOAPFaultException

該類SOAPFaultBuilder確實在JRE的rt.jar中。所以我創建的簡單的Web服務項目可能就像他們應該做的那樣工作。但是,在我們的現場環境中,Web服務客戶端如何拋出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 2015-02-25 16:39:57

+0

我使用的是帶有RS-libs的TomEE ......但也有這個問題... @xli你有沒有任何進展,因爲你從事這個工作? – FibreFoX 2015-09-29 15:15:06

+0

@FibreFoX並不多。您可以嘗試添加這些JAR以查看是否有幫助。我最終刪除了那些JAR,因爲它們在我們的系統中引起了一些依賴性問題。 – xli 2015-10-06 21:06:56

回答

1

我有相同的erorr,我通過從tomcat lib文件夾中刪除了jax-impl.jar來解決這個問題。這是jaxb jar版本與我在tomcat中安裝的一個webapps可能發生的衝突。

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

+0

請注意,[只有鏈接的答案](http://meta.stackoverflow.com/tags/link-only-answers/info)不鼓勵,所以答案應該是搜索解決方案的最終點(vs.而另一個引用的中途停留時間往往會隨着時間推移而過時)。請考慮在此添加獨立的摘要,並將鏈接保留爲參考。 – kleopatra 2015-10-12 10:42:52

+0

明白了。感謝指出..將記住未來的職位 – awsome 2015-10-12 11:47:45

0

我也遇到了同樣的問題,我可以隨後解決這個問題。

由於在問題中提到以下錯誤,無法找到SOAP錯誤的基本原因。

我按照以下鏈接中提到的步驟確定了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例外是由於衝突的jar文件。

rt.jar(這是存在於類路徑JRE) jaxb-impl-2.0.1.jar(這是存在於我的應用的類路徑)。

我從我的類路徑中刪除了文件jaxb-impl-2.0.1.jar,實際的錯誤消失了。