AIX/IBM Java上的cxf、jaxb-冲突检查堆栈问题

AIX/IBM Java上的cxf、jaxb-冲突检查堆栈问题,jaxb,cxf,java-7,aix,Jaxb,Cxf,Java 7,Aix,我最近在代码中遇到了以下问题。环境是: Java(TM)SE运行时环境(构建pap6470sr1-20120330_01(SR1)) IBM J9虚拟机(构建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 ind

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

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

IBM J9虚拟机(构建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服务器上运行良好。它还可以在AIX上使用IBMJava1.6。但是当使用IBMJava1.7时,它抛出了这些异常。 我研究了
com.sun.xml.bind.v2.util.CollisionCheckStack.findDuplicate(CollisionCheckStack.java:133)
并发现一些类似的问题/答案,例如:

,建议“为每个请求创建封送拆收器和解封送拆收器”

我没有显式地使用Marshaller/Unmarshaller——它看起来像是Java1.7上的CXF/JAXB问题

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

这不是“真实”的答案,只是一个变通建议


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

您可以尝试使用基于JAXB 2.2.4的JAR for IBM Java 1.7,看看这是否解决了问题吗?

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

刚刚遇到这个问题

我当时正在使用OpenJ9JDK并切换到HotSpot。我使用intellijjdk管理器从OpenJDK下载JDK,并使我的环境变量指向下载的文件结构(JAVA_HOME变量)


它首先解决了问题,这是一种非常低级的方法。我正在使用CXF框架完成所有此类任务。这是一项业务需求。第二,我不确定这是否是一个解决办法。@YuryNebieridze,正如我所说的,只是一个解决办法。这看起来像是一个过时的JAXB bug,请检查IBMJava1.7中使用的JAXB版本。是的,我了解解决方法。我确切地知道,Java7使用的是JAXBRI2.2,而Java6是基于JAXBRI2.1的——下面是一个图表:。关键是,该代码在linux上与Oracle Java 7配合使用时运行良好。您使用的是内置JAXB还是第三方实现?不管是哪种情况,您也可以尝试另一种。是的,它是内置的JAXB。这是一种可能的现代解决方案。我一直在寻找AIX OS环境特有的解决方案,大约在6年前,AIX OS环境就产生了这个问题。