6

我有一个在 jdk1.6.0_31 上运行的独立批处理程序。这个独立的程序有 JAX-WS 客户端和 EJB 客户端。在我为 EJB 客户端添加 wlfullclient.jar 之前,JAX-WS 客户端在没有添加任何 jar 的情况下工作正常。现在在类路径中使用 wlfullclient.jar 我得到以下异常。请让我知道如何解决这个问题。感谢你的帮助。

Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/xml/ws /spi/ProviderImpl
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at javax.xml.ws.spi.FactoryFinder.safeLoadClass(FactoryFinder.java:150)
at javax.xml.ws.spi.FactoryFinder.newInstance(FactoryFinder.java:30)
at javax.xml.ws.spi.FactoryFinder.find(FactoryFinder.java:90)
at javax.xml.ws.spi.Provider.provider(Provider.java:83)
at javax.xml.ws.Service.<init>(Service.java:56)
at javax.xml.ws.Service.create(Service.java:691)
4

2 回答 2

3

我们遇到了同样的问题,在研究并找到这个问题后,我凭直觉查看了 Weblogic Server 的文档。

我正在寻找替代客户。

基本上有三个客户端jar:

  • wlclient.jar - 用于 IIOP 客户端
  • wlfullclient.jar - 一个罐子里的所有东西(巨大的~50MB)
  • wlthint3client.jar - 用于非常瘦的 t3 客户端

最后一个选项是客户端的精简版,它支持 Weblogics 专有的 t3 协议。它在功能方面有一些缺点,但如果您需要做的只是与服务器上的 ejb 对话:它就在那里。

将表单 wlfullclient.jar 切换到 wlthint3client.jar 后,一切NoClassDefFoundError都消失了。

这里是Weblogic 文档的链接。

于 2013-02-27T08:56:58.883 回答
1

你有这个运气吗?我在 JetSpeed 2.2.2(基于 tomcat 的门户服务器)上运行时遇到了完全相同的问题。在我将 wlfullclient.jar 包含在服务器的 lib 文件夹中之前,我的 Web 服务工作正常。包含后,它会在实例化时与您在上面包含的堆栈跟踪完全相同。

我的想法(现阶段的理论)如下:

wlfullclient.jar 有一个与 Metro Web 服务堆栈中已有的类具有相同名称和包的类。这个类在 Metro 类之前被加载,然后将类加载引导到加载 Web 逻辑实现而不是 Metro 实现的路径上。Web 逻辑实现不存在(我们并没有努力包含它们,因为我们想使用标准 java),这解释了 NoClassDefFound。

值得注意的是,我在 Metro 和 wlfullclient.jar 中都没有找到这个具有相同名称和包的假定类。从这个意义上说,该类目前类似于希格斯玻色子。那么假设它存在,该怎么办呢?

我很想知道您是否找到了解决方案。

另外我应该补充:

我需要包含 wlfullclient.jar,因为它被运行在同一服务器上的其他 portlet 使用。我无法删除它,但我自己没有使用它。

于 2012-11-19T21:31:36.560 回答