JAX-WS Dispatch客户端工作正常,直到添加了wlfullclient.jar

时间:2012-07-31 16:07:30

标签: java-ee weblogic jax-ws

我有一个独立的批处理程序,它运行在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)

2 个答案:

答案 0 :(得分:3)

我们遇到了同样的问题,经过研究和发现这个问题后,我跟着预感并查看了Weblogic Server的文档。

我一直在寻找其他客户。

基本上有三个客户端罐子:

  • wlclient.jar - 适用于IIOP客户
  • wlfullclient.jar - 用于一个罐子里的所有东西(大小约50MB)
  • wlthint3client.jar - 对于一个非常薄的t3客户端

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

将表格wlfullclient.jar切换为wlthint3client.jar后,所有NoClassDefFoundError都消失了。

此处指向Weblogic Documentation的链接。

答案 1 :(得分: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使用。我不能删除它,但我自己没有使用它。