2014-11-03 75 views
2

我的代码中最近出现了以下问题。环境是:AIX/IBM上的cxf,jaxb Java - CollisionCheckStack问题

的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) 

此代码工作正常Linux服务器上使用Oracle的Java 1.7。它还使用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,其中建议“创建编组器和每个请求的Unmarshaller”

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

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

回答

0

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

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

+0

首先,这是一个很低层次的方式。我为所有这些任务使用CXF框架。这是一项业务需求。其次,我不确定这可以成为解决方案。 – 2014-11-04 13:41:55

+0

@YuryNebieridze正如我所说,只是一种解决方法。这对我来说看起来像一个古怪的JAXB错误,请检查IBM Java 1.7中使用的JAXB版本。 – lexicore 2014-11-04 13:53:03

+0

是的,我了解解决方法。我确切地知道Java 7使用JAXB RI 2.2而不是基于JAXB RI 2.1的Java 6--下面是一个图表:https://jaxb.java.net/guide/Which_JAXB_RI_is_included_in_which_JDK_.html。关键是,该代码可以在Linux上使用Oracle Java 7。 – 2014-11-04 14:33:09

0

你可以尝试使用基于JAXB 2.2.4的IBM Java 1.7的jar包,看看是否能解决这个问题?