问题描述
我正在尝试将调用SOAP Web服务的Oracle JDK 8应用程序迁移到采用OpenJDK 11(jdk-11.0.8.10-hotspot
)。我从Maven repository下载了jaxws-ri-3.0.0-M4
,在WSDL文件上运行了wsimport
,它生成了一堆代理类(类似于我以前使用的代理类,但是具有不同的包引用),我添加了从jaxws-ri-3.0.0-M4
到项目的JAR,更新了应用程序中包导入的名称,并且构建良好(没有编译错误)。但是当我从Eclipse运行应用程序时,出现以下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: jakarta/xml/ws/Service
at java.base/java.lang.classLoader.defineClass1(Native Method)
at java.base/java.lang.classLoader.defineClass(ClassLoader.java:1017)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:800)
at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClasspathOrNull(BuiltinClassLoader.java:698)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:621)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.classLoader.loadClass(ClassLoader.java:522)
at net.codejava.Test.main(Test.java:31)
Caused by: java.lang.classNotFoundException: jakarta.xml.ws.Service
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.classLoader.loadClass(ClassLoader.java:522)
... 10 more
看起来异常是由应用程序试图实例化wsimport
生成的Web服务客户端代理类引起的。
程序代码:
TestWS ws = new TestWS(wsdlUrl);
代理类:
public class TestWS
extends Service
如果我选择Service
类并从上下文菜单中选择 Open Declaration 选项,它将带我到jakarta.xml.ws-api.jar
元数据:
// Compiled from Service.java (version 1.8 : 52.0,super bit)
public class jakarta.xml.ws.Service {
// Field descriptor #34 Ljakarta/xml/ws/spi/ServiceDelegate;
private jakarta.xml.ws.spi.ServiceDelegate delegate;
存在Service
类实现的JAR,那么为什么会出现此错误?
我阅读了多篇文章(StackOverflow,GitHub等),这些文章解决了由应用迁移到JDK 11引起的类似问题,但是我找不到适合我的解决方案。大多数文章建议定义适当的Maven依赖关系,但是我们的应用程序未使用Maven(这不在我的控制范围内),因此我只是手动复制了JAR,我认为这样做也可以。
有什么我想念的吗?是否有更好的方法从Java调用SOAP Web服务?我花了一段时间才弄清楚如何使用Oracle JDK 8进行操作,但最终它起作用了,而我完全想尝试使用OpenJDK 11进行操作。
请记住,我不精通Java(我有多年的.NET经验,但这是我的第一份Java作业)。
谢谢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)