AIX / IBM Java上的cxf,jaxb

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

Java(TM)SE运行时环境(build 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问题。

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


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

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


您可以尝试使用IBM Java 1.7的基于JAXB 2.2.4的jar包来查看是否解决了这个问题?

链接地址: http://www.djcxy.com/p/85051.html

上一篇: cxf, jaxb on AIX/IBM Java

下一篇: GSP rendering is very slow