如何解决将 java8 和 WLS 12c 迁移到 Java11 和 WLS 14c
我有一个提供 Soap xml web 服务的 java 应用程序,在本例中它是 java8 应用程序并在 weblogic 12c 上运行。我决定升级它 java11 和 weblogic 14c。据我从 Oracle 的文档中读到,Oracle 从 JDK11 中永久删除了 jaxws 和 jaxb。根据我读过的几篇文章,我必须在 迁移前的pom.xml;
- 设置 Java 版本 => 11
- 设置 maven-compiler-plugin 版本 min => 3.8.0
- 明确放置jaxws 和jaxb 依赖
我已经完成了这些事情,并且添加了诸如
之类的依赖项 <dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-ri</artifactId>
<version>2.3.1</version>
<type>pom</type>
<exclusions>
<exclusion>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-xjc</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-jxc</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>eclipselink</artifactId>
<version>2.7.6</version>
</dependency>
我删除了旧的 jaxb 实现并添加了 MOXY 实现。一切都很好,直到部署到 wls 14c,编译成功,我可以在我的 war 文件中看到 jar;
- jaxb-api-2.3.1.jar
- jaxws-api-2.3.1.jar
- jaxws-rt-2.3.1.jar
- eclipselink-2.7.6.jar
当我尝试将 war 文件部署到 wls 14c 时,我在 wsl 14c 控制台日志上收到奇怪的堆栈跟踪错误;
weblogic.application.ModuleException: java.lang.VerifyError: Bad type on operand stack
Exception Details:
Location:
com/sun/xml/ws/db/glassfish/JAXBRIContextFactory.getContext(Ljavax/xml/bind/Marshaller;)Lcom/sun/xml/ws/spi/db/BindingContext; @8: invokevirtual
Reason:
Type 'com/sun/xml/bind/v2/runtime/JAXBContextImpl' (current frame,stack[1]) is not assignable to 'javax/xml/bind/JAXBContext'
Current Frame:
bci: @8
flags: { }
locals: { 'com/sun/xml/ws/db/glassfish/JAXBRIContextFactory','javax/xml/bind/Marshaller' }
stack: { 'com/sun/xml/ws/db/glassfish/JAXBRIContextFactory','com/sun/xml/bind/v2/runtime/JAXBContextImpl' }
Bytecode:
0000000: 2a2b c000 34b6 0035 b600 36b0
at weblogic.application.internal.ExtensibleModuleWrapper.start(ExtensibleModuleWrapper.java:140)
at weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:124)
at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:233)
at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:228)
at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:45)
Truncated. see log file for complete stacktrace
我无法理解错误信息,我错过了什么?你能帮忙吗。
解决方法
我找到了解决方案,如果您在 wls14c 上运行您的应用程序,您唯一需要做的就是在 provided 范围内添加 JAX-RT 依赖项。因为在 java11 中,jax-ws 和 jaxb 被删除了,但在 wls14c 中没有。
lu_lu-backend-mariadb_1_807f9a7f6096 docker-entrypoint.sh --def ... Up 0.0.0.0:8306->3306/tcp
lu_lu-backend-nginx_1_b2df3bd1ddc1 /docker-entrypoint.sh ngin ... Up 80/tcp
lu_lu-backend-php_1_566405992c8f bash /usr/local/bin/docker ... Up 9000/tcp
lu_lu-redis_1_12cc7e7d897e docker-entrypoint.sh redis ... Up 0.0.0.0:6379->6379/tcp
lu_lu-traefik_1_78171c03c3d5 /entrypoint.sh traefik Up 0.0.0.0:4200->4200/tcp,0.0.0.0:443->443/tcp,0.0.0.0:80->80/tcp,0.0.0.0:8080->8080/tcp
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。