2009-09-29 11 views
6

Tôi đã sử dụng mã tạo mã Apache CXF wsdl2java để gọi các phương thức từ một dịch vụ web trong một thời gian, cho đến nay vẫn hoạt động tốt .. Vấn đề tôi gặp phải là khi webservice (thực hiện chỉ xuống hành lang từ tôi) cách hợp pháp ném một ngoại lệ xà phòng, CXF đi kèm với thông báo lỗi sau:Bắt ngoại lệ webservice với CXF: NoClassDefFoundError: SOAPFaultBuilder

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

tôi đang sử dụng Ubuntu 9,04, OpenJDK (IcedTea6 1.4.1) 6b14- 1.1.1-0ubuntu11, Maven2 và CXF 2.2.3. Tôi hiện đang ở một mất mát về làm thế nào để giải quyết vấn đề này, như mã và thiết lập tôi đang sử dụng có vẻ trivially đơn giản .. Bất cứ ai có thể chỉ cho tôi đi đúng hướng ở đây? Hãy cho tôi biết nếu tôi có thể gửi thêm bất kỳ chi tiết ..

Đây là toàn bộ stacktrace trả về:

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

Có mục nhập "Tôi có thể chạy trong Java6" trong CXSFFAQ, bạn đã kiểm tra điều đó chưa? http://cxf.apache.org/faq.html#FAQ-FrequentlyAskedQuestions – skaffman

+0

Hmm, cảm ơn. Tôi đã bỏ lỡ lưu ý đó, và bây giờ đã thêm com.sun.xml.bind jaxb-impl & jaxb-xjc vào maven .. Nhưng cho đến nay không có may mắn/thay đổi .. Tôi sẽ làm việc trong này một số chi tiết .. – Tim

+0

Không may mắn có vẻ như: vẫn là cùng một stacktrace .. Có bất cứ điều gì tôi cần phải loại trừ bằng cách sử dụng Maven có lẽ? – Tim

Trả lời

3

Có hai điều thú vị về điều đó stack trace:

1) Người ta gặp vấn đề tìm kiếm thực hiện SAAJ. Có lẽ việc thêm saaj-impl.jar vào classpath có thể giải quyết điều đó.

2) Hoàn toàn không sử dụng CXF. Nó đang sử dụng triển khai tham chiếu Sun JAX-WS được tích hợp vào jre. Vì vậy, có vẻ như các cxf lọ không được chọn ở tất cả.

+0

Hmm thú vị (cũng được phát hiện!) .. Tôi sẽ xem xét điều đầu tiên vào sáng ngày mai! – Tim

+0

Xin cảm ơn, việc thêm phụ thuộc vào cxf đã làm được điều đó! Không bao giờ có xung quanh để thêm cxf như là một phụ thuộc, như mã dường như làm việc mà không có nó .. Silly tôi. – Tim

4

Đã xảy ra sự cố tương tự khi chúng tôi chuyển từ Ant sang Maven. Chúng tôi sử dụng Sun JDK 1.6u20.

Chúng tôi đã bỏ lỡ các thư viện trong maven-lắp ráp chiến tranh:

jaxws-api jaxws-rt jaxws-công cụ

Sau khi thêm tất cả các công trình như nó đã từng làm việc trước đó. Hy vọng điều này sẽ giúp một ai đó!