我正在使用netbeans從WSDL文檔生成Web服務客戶端。Jar未使用包含的類或名稱空間衝突
客戶工作得很好,直到我們把它放到我們的生產環境中。這些jar是從jaxws-api.jar和jaxb-api.jar中針對javax.ws.xxxxx類生成的,我們將它們放在生產類路徑中。
在我們的生產環境中,我們有其他依賴於xfire庫的代碼。當我們嘗試實例化SubmissionAPI()時,我們得到一個NoClassDefFound異常。我正在粘貼下面的堆棧跟蹤。
UBLSoapTest類似乎調用正確的'Service'類,但'Service'類 正在調用org.codehaus.xfire.jaxws.Provider。
我檢查了javax.xml.ws.Service的源代碼,它有'import javax.xml.ws.spi.Provider'
我們已經嘗試將jar與javax.xxxx類組合起來,仍然得到相同的結果。我懷疑我們需要在清單文件中設置類路徑,但我不確定需要在那裏。
FAIL: Exception: java.lang.NoClassDefFoundError: Could not initialize class
org.codehaus.xfire.jaxws.JAXWSHelper
org.codehaus.xfire.jaxws.ServiceDelegate.<init>(ServiceDelegate.java:33)
org.codehaus.xfire.jaxws.ServiceDelegate.<init>(ServiceDelegate.java:53)
org.codehaus.xfire.jaxws.Provider.createServiceDelegate(Provider.java:32)
javax.xml.ws.Service.<init>(Service.java:56)
org.ubl.soap.test.SubmissionAPI.<init>(SubmissionAPI.java:44)
即使從這裏看,我有點茫然。
我們已經嘗試在清單中設置classpath,但收效甚微。
我們已經基本罐子結構的嘗試是:
/org/xxxx
/META-INF/xxx
和
/org/xxx
/META-INF/xxx
/javax/xxx
和
/org/xxx
/META-INF/xxx
/jaxws-api.jar
/jaxb.jar
感謝您的回答!這兩個api罐子不是impl嗎?如果沒有,我們是否需要從javaws-ri下載中複製整個/ lib文件夾?或者是其他東西? (很明顯,xfire不適用於此版本) – lavajumper
通常,任何名稱爲「api」的jar都只是用於編譯代碼的接口。 jaxws-api.jar可能只包含接口而沒有實現。因此,類加載器將搜索您的類路徑以查找第一個實現,並可能從Codehaus jars中選取它,這可能不是JAX-WS的完整實現。 (但後來可能是這樣,我之所以懷疑是因爲我在他們的網站上看到它是新添加的)。 – raminr
就像我所說的,據我所知,所有的JEE應用服務器都應該爲JAX- WS。如果沒有,請嘗試下載參考實現:https://jax-ws.java.net/ - 您使用哪個應用程序服務器? – raminr