2010-03-03 88 views
2

我有一個調用SOAP服務的應用程序客戶端。我已經使用了glassfish發行版中的wsimport來生成ws類,並且Glassfish v2中的一切正常。當我從V3運行它(在webstart),應用程序運行正常,但是當我發起一個SOAP調用,我得到NoClassDefFoundError for com/sun/istack/logging/Logger in Glassfish v3

Exception in thread "Thread-146" java.lang.NoClassDefFoundError: com/sun/istack/logging/Logger 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:621) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124) 
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:260) 
    at java.net.URLClassLoader.access$000(URLClassLoader.java:56) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:195) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188) 
    at com.sun.jnlp.JNLPClassLoader.findClass(JNLPClassLoader.java:257) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:252) 
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) 
    at com.sun.xml.ws.policy.jaxws.WsitPolicyResolver.<clinit>(WsitPolicyResolver.java:62) 
    at com.sun.xml.ws.policy.jaxws.WsitPolicyResolverFactory.doCreate(WsitPolicyResolverFactory.java:48) 
    at com.sun.xml.ws.api.policy.PolicyResolverFactory.create(PolicyResolverFactory.java:58) 
    at com.sun.xml.ws.wsdl.parser.RuntimeWSDLParser.parse(RuntimeWSDLParser.java:131) 
    at com.sun.xml.ws.client.WSServiceDelegate.parseWSDL(WSServiceDelegate.java:267) 
    at com.sun.xml.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:230) 
    at com.sun.xml.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:178) 
    at com.sun.xml.ws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:106) 
    at javax.xml.ws.Service.<init>(Service.java:56) 
    at (class generated from wsdl) 
    at (SOAP call) 

我甚至無法找到命名的類的任何地方,而且似乎是幾乎沒有在網上參考它。

編輯它在JAXB的osgi.jar

這難道不應該由GlassFish的提供?當然,如果我將它與我的應用程序一起使用,它會帶來衝突風險嗎?

+0

嗨想提出這個問題備份。不幸的是,由於Oracle和Java.net發生了巨大的變化,我無法弄清楚細節(通過粘貼 - 這非常有幫助),所以維基頁面不再工作。 所以情況是這樣的,我有一個Java Web Start應用程序需要從glassfish v3服務器調用Web服務。它似乎100%可重複。 問題是javaws(客戶端jdk)是2.1,但glassfish是2.2。 Glassfish決定告訴網絡啓動應用加載哪個罐子。網絡啓動應用程序使用的資源包括:jaxb-api-os – geocode 2011-01-25 20:36:45

+0

我遇到了同樣的問題。你有沒有設法解決它? – Mizipzor 2012-03-23 16:23:40

回答

3

你的問題的描述和再現是不是所有,但GlassFish的第三版束地鐵2.0和Metro 2.0 contains JAX-WS 2.2, which clashes with the JAX-WS 2.1自帶的Java SE 6中明確的步驟:

對於詳細的分析時,恰好發生這種情況,看到這Wiki page。造成這些故障的原因是Metro 2.0包含JAX-WS 2.2,它與內置於Java SE 6中的JAX-WS 2.1 1衝突。如果未使用我們的安裝腳本安裝Metro 2.0,則只會看到這些故障metro-上glassfish.xml /城域上tomcat.xml。例如,如果你是通過更新中心安裝MetroFish V3的Metro 2.0,或者如果您使用內置於NetBeans中的GlassFish V3版本。

最簡單的解決方案是下載Metro 2.0 nightly build並運行安裝腳本。該腳本將包含JAX-WS 2.2 API的文件webservices-api.jar複製到<java-home>/lib/endorsed中。或者,您當然也可以手動將webservices-api.jar複製到合適的背書目錄中。

而且由於com/sun/istack/logging/Loggera dependency of JAX-WS 2.2,你很可能在提到Wiki page描述的情況:

地鐵2.0捆綁JAX-WS 2.2。 Java SE 6包含JAX-WS 2.1(SE 6升級3和更早版本包含JAX-WS 2.0)。這意味着Java將默認選擇JAX-WS 2.1 API,並且利用JAX-WS 2.2功能的實現和代碼將無法工作。

+0

聽起來好像它可能是相關的,但這聽起來像glassfish v3在這種情況下被打破。我使用了glassfish v3的wsimport並部署到同一臺服務器上。然後,我通過webstart(Java 6)和「繁榮」運行應用程序客戶端。這意味着這個應用程序客戶端不能通過任何標準的j2se安裝來運行 - 這有點不值得webstart的重點。然而,它可能會讓我找到解決方案。 – Draemon 2010-03-06 00:59:35

+0

@Draemon問題不在於GlassFish v3,問題在於Java 6和JAX-WS 2.2。所以,因爲你使用的是JWS,所以我建議在你的情況下使用與Java 6綁定的'wsimport'作爲客戶端。 – 2010-03-06 01:49:37