【问题标题】:NoClassDefFoundError for com/sun/istack/logging/Logger in Glassfish v3Glassfish v3 中 com/sun/istack/logging/Logger 的 NoClassDefFoundError
【发布时间】:2011-01-23 07:09:00
【问题描述】:

我有一个调用 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 提供的吗?如果我将它包含在我的应用中,肯定会带来冲突风险吗?

【问题讨论】:

  • 您好想再次提出这个问题。不幸的是,由于 Oracle 和 Java.net 发生了如此巨大的变化,wiki 页面不再工作,我无法弄清楚细节(通过了粘贴——这非常有帮助)。所以情况是这样的,我有一个需要从 glassfish v3 服务器调用 Web 服务的 Java Web Start 应用程序。它似乎 100% 可重现。问题是javaws(客户端jdk)是2.1,但glassfish是2.2。 Glassfish 决定告诉 Web 启动应用程序加载哪些 jar。 web start 应用使用的资源包括:jaxb-api-os
  • 我遇到了同样的问题。你有没有设法解决它?

标签: glassfish jax-ws classloader glassfish-3


【解决方案1】:

您的问题的描述和重现步骤根本不清楚,但 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- on-glassfish.xml/metro-on-tomcat.xml。如果您是这种情况,例如通过更新中心安装 Metro 2.0 for GlassFish V3,或者如果您使用 NetBeans 内置的 GlassFish V3 版本。

最简单的解决方案是下载Metro 2.0 nightly build 并运行安装脚本。该脚本将包含 JAX-WS 2.2 API 的文件 webservices-api.jar 复制到 &lt;java-home&gt;/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 功能的实现和代码将不起作用。

【讨论】:

  • 这听起来可能是相关的,但听起来 glassfish v3 在这种情况下被破坏了。我使用 glassfish v3 中的 wsimport 并部署到同一台服务器。然后我通过 webstart (Java 6) 和“boom”运行应用程序客户端。这意味着这个应用程序客户端不能通过任何标准的 j2se 安装运行——这有点错过了 webstart 的要点。但是,它可能会引导我找到解决方案。
  • @Draemon 问题不是 GlassFish v3,问题是 Java 6 和 JAX-WS 2.2。因此,由于您使用的是 JWS,我建议您在客户端使用与 Java 6 捆绑的 wsimport
猜你喜欢
  • 2013-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-16
  • 2020-10-17
  • 1970-01-01
相关资源
最近更新 更多