2009-09-29 193 views
6

我一直在使用Apache CXF wsdl2java生成的代碼從web服務調用方法一段時間,到目前爲止一直工作正常..我遇到的問題是當WebService(剛剛從我在大廳實現)合法地拋出一個SOAP異常,CXF想出了以下錯誤消息:用CXF捕獲web服務異常:NoClassDefFoundError:SOAPFaultBuilder

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

我使用Ubuntu 9.04的OpenJDK(IcedTea6 1.4.1)6b14- 1.1.1-0ubuntu11,Maven2和CXF 2.2.3。我目前對如何解決這個問題感到茫然,因爲我使用的代碼和設置看起來非常簡單。任何人都可以在這裏指出我正確的方向嗎?讓我知道如果我可以發佈任何進一步的細節..

這是一個完整的堆棧跟蹤返回:

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:107) 
    at $Proxy36.downloadPDB(Unknown Source) 
    at path.to.my.code.downloadInvalidFileID(SingleMethodTest.java:64) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:616) 
    at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:59) 
    at org.junit.internal.runners.MethodRoadie.runTestMethod(MethodRoadie.java:98) 
    at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:79) 
    at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:87) 
    at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:77) 
    at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:42) 
    at org.junit.internal.runners.JUnit4ClassRunner.invokeTestMethod(JUnit4ClassRunner.java:88) 
    at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51) 
    at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44) 
    at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27) 
    at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37) 
    at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42) 
    at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:62) 
    at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:140) 
    at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:127) 
    at org.apache.maven.surefire.Surefire.run(Surefire.java:177) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:616) 
    at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:338) 
    at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:997) 
+1

在CXSFFAQ中有一個「我可以在Java6下運行」的條目,你有檢查嗎? http://cxf.apache.org/faq.html#FAQ-FastAskedQuestions – skaffman 2009-09-30 07:25:55

+0

嗯,謝謝。我錯過了那個註釋,並且現在在maven中添加了com.sun.xml.bind jaxb-impl&jaxb-xjc ..但是到目前爲止沒有運氣/改變..我會在這裏工作一些.. – Tim 2009-09-30 08:00:58

+0

沒有運氣它似乎:仍然是相同的stacktrace ..有什麼我需要排除使用Maven也許? – Tim 2009-09-30 16:20:49

回答

3

有兩個有關堆棧跟蹤有趣的事情:

1)它是有問題尋找SAAJ實施。可能將saaj-impl.jar添加到類路徑可能會解決此問題。

2)它根本不使用CXF。它使用內置於jre中的Sun JAX-WS參考實現。因此,它看起來像cxf罐子根本沒有被拾起。

+0

嗯有趣(很好,發現!)..我明天早上看看這第一件事! – Tim 2009-09-30 18:40:37

+0

謝謝,添加cxf依賴關係的竅門!從未嘗試添加cxf作爲依賴項,因爲代碼在沒有它的情況下似乎也能正常工作......傻了我。 – Tim 2009-10-01 07:41:47

4

當我們從Ant切換到Maven時出現了類似的問題。我們使用Sun JDK 1.6u20。

我們已經錯過了Maven的組裝戰爭的這些庫:

JAXWS-API JAXWS-RT JAXWS工具

將他們所有的作品,因爲它曾經工作過之後。希望這會幫助別人!