微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将 java8 和 WLS 12c 迁移到 Java11 和 WLS 14c

如何解决将 java8 和 WLS 12c 迁移到 Java11 和 WLS 14c

我有一个提供 Soap xml web 服务的 java 应用程序,在本例中它是 java8 应用程序并在 weblogic 12c 上运行。我决定升级它 java11 和 weblogic 14c。据我从 Oracle 的文档中读到,Oracle 从 JDK11 中永久删除jaxwsjaxb。根据我读过的几篇文章,我必须在 迁移前的pom.xml

  • 设置 Java 版本 => 11
  • 设置 maven-compiler-plugin 版本 min => 3.8.0
  • 明确放置jaxwsjaxb 依赖

我已经完成了这些事情,并且添加了诸如

之类的依赖项
        <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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?