从 Weblogic 10 迁移到 12 的 JAXB Web 服务

JAXB Webservice migrating from Weblogic 10 to 12

我在 Weblogic 10.3 上有一个 运行 网络服务 (JAX-WS 2.2)。一切正常。所以不可能是wsdl的问题。

我尝试迁移到 WLS 12。但现在我在部署时遇到错误。

从 WLS 10 到 WLS 12 有什么变化会导致问题?

WLS 12 的 JAXB 实现发生了变化。

  • 在 Oracle Weblogic WLS10 中提供了 Glassfish JAXB RI 实现
  • 在 Oracle Weblogic WLS12 中提供了 EclipseLink Implementaiotn MOXy

您可以按照所述使用 JAXB RI 强制 WLS12 oracle docs

您需要覆盖以下两个属性以告知 WLS12 使用 JAXB RI:

  • com.sun.xml.ws.spi.db.BindingContextFactory=com.sun.xml.ws.db.glassfish.JAXBRIContextFactory
  • javax.xml.bind.JAXBContext=com.sun.xml.bind.v2.ContextFactory

执行此操作的最简单方法是 添加数据绑定。override_1.0.0.0.jar 到您的类路径

或者您可以将它们设置为 java 系统属性,但如 oracle 文档中所写

在某些情况下,可能很难将系统属性传播到间接调用的 Java 实例,例如从 Ant 任务派生的客户端。在这些情况下,确保您使用的环境传播属性很重要。

我正在从 10.3.6 升级到 12.2.1.3 并看到同样的问题:下面的异常。 modules/databinding.override_1.0.0.0.jar 不是分发的一部分,但我发现:Oracle/Middleware_Home12c/wlserver/modules/databinding.override.jar我将其包含在 calsspath 中,但这并没有解决问题,仍然出现相同的异常。

Feb 07, 2019 9:22:51 AM org.springframework.web.context.ContextLoader initWebApplicationContext

SEVERE: Context initialization failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'basketService' defined in ServletContext resource [/WEB-INF/store-services.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public synchronized java.lang.Object org.apache.cxf.jaxws.JaxWsProxyFactoryBean.create()] threw exception; nested exception is Exception [EclipseLink-25037] (Eclipse Persistence Services - 2.6.5.v20170607-b3d05bd): org.eclipse.persistence.exceptions.XMLMarshalException

Exception Description: A cycle is detected in the object graph.  This will cause an infinite loop: org.eclipse.persistence.internal.oxm.schema.model.ComplexType@8e926ca -> org.eclipse.persistence.internal.oxm.schema.model.Element@3e83f11a -> org.eclipse.persistence.internal.oxm.schema.model.Sequence@745d452e -> org.eclipse.persistence.internal.oxm.schema.model.ComplexType@8e926ca

        at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:597)

        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1055)

        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:951)

        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:487)