【问题标题】:cxf, jaxb on AIX/IBM Java - CollisionCheckStack issueAIX/IBM Java 上的 cxf、jaxb - CollisionCheckStack 问题
【发布时间】:2014-12-30 17:04:48
【问题描述】:

我最近在我的代码中遇到了以下问题。环境是:

Java(TM) SE 运行时环境(构建 pap6470sr1-20120330_01(SR1))

IBM J9 VM(内部版本 2.6,JRE 1.7.0 AIX ppc64-64 20120322_106209(启用 JIT,启用 AOT))

J9VM - R26_Java726_SR1_20120322_1720_B106209

Throwable occurred: java.lang.ArrayIndexOutOfBoundsException: Array index out of range: -14
    at com.sun.xml.bind.v2.util.CollisionCheckStack.findDuplicate(CollisionCheckStack.java:133)
    at com.sun.xml.bind.v2.util.CollisionCheckStack.push(CollisionCheckStack.java:71)
    at com.sun.xml.bind.v2.schemagen.XmlSchemaGenerator$Namespace.writeTypeRef(XmlSchemaGenerator.java:705)
    at com.sun.xml.bind.v2.schemagen.XmlSchemaGenerator$Namespace.access$1900(XmlSchemaGenerator.java:429)
    at com.sun.xml.bind.v2.schemagen.XmlSchemaGenerator$Namespace$ElementWithType.writeTo(XmlSchemaGenerator.java:1273)
    at com.sun.xml.bind.v2.schemagen.XmlSchemaGenerator$Namespace.writeTo(XmlSchemaGenerator.java:583)
    at com.sun.xml.bind.v2.schemagen.XmlSchemaGenerator$Namespace.access$600(XmlSchemaGenerator.java:429)
    at com.sun.xml.bind.v2.schemagen.XmlSchemaGenerator.write(XmlSchemaGenerator.java:411)
    at com.sun.xml.bind.v2.runtime.JAXBContextImpl.generateSchema(JAXBContextImpl.java:755)
    at org.apache.cxf.jaxb.JAXBUtils.generateJaxbSchemas(JAXBUtils.java:760)
    at org.apache.cxf.jaxb.JAXBDataBinding.generateJaxbSchemas(JAXBDataBinding.java:447)
    at org.apache.cxf.jaxb.JAXBDataBinding.initialize(JAXBDataBinding.java:374)
    at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.buildServiceFromClass(ReflectionServiceFactoryBean.java:429)
    at org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.buildServiceFromClass(JaxWsServiceFactoryBean.java:637)
    at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.initializeServiceModel(ReflectionServiceFactoryBean.java:492)
    at org.apache.cxf.service.factory.ReflectionServiceFactoryBean.create(ReflectionServiceFactoryBean.java:240)
    at org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.create(JaxWsServiceFactoryBean.java:180)
    at org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:99)
    at org.apache.cxf.frontend.ClientFactoryBean.create(ClientFactoryBean.java:51)
    at org.apache.cxf.frontend.ClientProxyFactoryBean.create(ClientProxyFactoryBean.java:102)
    at org.apache.cxf.jaxws.JaxWsProxyFactoryBean.create(JaxWsProxyFactoryBean.java:121)
    at org.apache.cxf.jaxws.ServiceImpl.createPort(ServiceImpl.java:458)
    at org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:330)
    at org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:317)
    at javax.xml.ws.Service.getPort(Service.java:130)

此代码在装有 Oracle Java 1.7 的 Linux 服务器上运行良好。它还使用 IBM Java 1.6 在 AIX 上工作。但是在使用 IBM Java 1.7 时会抛出这些异常。 我研究了com.sun.xml.bind.v2.util.CollisionCheckStack.findDuplicate(CollisionCheckStack.java:133) 并找到了一些看起来相似的问题/答案,例如:

http://mydevtoolbox.blogspot.com/2013/07/jaxb-marshaller-no-threadsafe-error.html,建议“根据请求创建一个 Marshaller 和 Unmarshaller”

我没有明确使用 Marshaller/Unmarshaller - 它看起来像 Java 1.7 上的 CXF/JAXB 问题。

非常感谢任何想法、见解和意见。

【问题讨论】:

  • 您是使用内置的 JAXB 还是第三方实现?无论哪种情况,您也可以尝试另一种。
  • 是的,它是一个内置的 JAXB。

标签: jaxb cxf java-7 aix


【解决方案1】:

刚刚遇到这个问题

我使用 Openj9 JDK 并切换到 HotSpot。我使用 IntelliJ JDK 管理器从 OpenJDK 下载 JDK,并让我的环境变量指向下载的文件结构(JAVA_HOME 变量)。

解决了问题

【讨论】:

  • 这是一种可能的现代解决方案。我一直在寻找特定于 AIX OS 环境的解决方案,大约在 6 年前产生了这个问题。
【解决方案2】:

我们在将 JAVA 版本从 1.6 升级到 1.8 后遇到了这个问题,以修复 您需要将 JAXB 版本从 1.x 升级到 2.x。

【讨论】:

    【解决方案3】:

    您能否尝试为 IBM Java 1.7 使用基于 JAXB 2.2.4 的 jar,看看是否能解决问题?

    【讨论】:

      【解决方案4】:

      这不是“真正的”答案,只是一个解决方法建议。

      堆栈跟踪表明您在生成架构时遇到问题。也许您可以通过使用@XmlSchema.location 显式提供XML Schema 来克服这个问题。您必须手动生成并使此架构可用。不是很酷,但如果其他一切都失败了......

      【讨论】:

      • 首先,这是一种非常低级的方式。我正在为所有此类任务使用 CXF 框架。这是业务需求。其次,我不确定这是否可以解决。
      • @YuryNebieridze 正如我所说,只是一种解决方法。对我来说,这看起来像是一个过时的 JAXB 错误,请检查 IBM Java 1.7 中使用的 JAXB 版本。
      • 是的,我了解解决方法。我确切地知道 Java 7 使用 JAXB RI 2.2 而不是基于 JAXB RI 2.1 的 Java 6 - 这是一个图表:jaxb.java.net/guide/…。关键是代码在 linux 上与 Oracle Java 7 一起工作得很好。
      猜你喜欢
      • 1970-01-01
      • 2020-12-02
      • 2018-03-11
      • 2014-10-13
      • 2014-01-26
      • 2020-08-26
      • 1970-01-01
      • 2018-09-17
      • 2013-06-17
      相关资源
      最近更新 更多