Glassfish v3中com / sun / istack / logging / Logger的NoClassDefFoundError

时间:2010-03-03 16:22:38

标签: glassfish jax-ws classloader glassfish-3

我有一个调用SOAP服务的应用程序客户端。我使用了来自glassfish发行版的wsimport来生成ws类,并且在Glassfish v2中一切正常。当我从v3运行它(webstart)时,应用程序运行正常,但是当我启动SOAP调用时,我得到了

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提供吗?当然,如果我将它与我的应用程序一起包含它会带来冲突的风险吗?

1 个答案:

答案 0 :(得分:3)

您的问题描述和重现步骤根本不明确,但GlassFish v3捆绑了Java SE 6附带的Metro 2.0和Metro 2.0 contains JAX-WS 2.2, which clashes with the JAX-WS 2.1

  

有关详细分析的详细信息,请参阅此Wiki page。这些失败的原因是Metro 2.0包含JAX-WS 2.2,它与Java SE 6中内置的JAX-WS 2.1 1发生冲突。如果您没有使用我们的安装脚本Metro安装Metro 2.0,您将只会看到这些故障。上glassfish.xml /城域上tomcat.xml。如果你是这样的话通过更新中心为GlassFish 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中描述的情况:

  

Metro 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功能的代码将无法正常工作。