我的项目在tomcat服务器上工作得很好,现在我正试图在WebSphere自由配置文件(WLP)上运行项目,但它给了我以下错误的堆栈实现
javax.xml.stream.XMLStreamException: The namespace URI "http://www.example.com/ns1" has not bound to a prefix.
at com.ibm.xml.xlxp.api.stax.msg.StAXMessageProvider.throwXMLStreamException(StAXMessageProvider.java:59)
at com.ibm.xml.xlxp.api.stax.XMLStreamWriterBase.writeAttribute(XMLStreamWriterBase.java:464)
at com.ibm.xml.xlxp.api.stax.XMLOutputFactoryImpl$XMLStreamWriterProxy.writeAttribute(XMLOutputFactoryImpl.java:157)
at org.apache.olingo.odata2.core.ep.producer.XmlMetadataProducer.writeAnnotationAttributes(XmlMetadataProducer.java:599)
at org.apache.olingo.odata2.core.ep.producer.XmlMetadataProducer.writeMetadata(XmlMetadataProducer.java:134)
我已经在WLP中设置了类加载器策略为父-last。如何在IBM jre
IBM JRE确实包含STAX,它是Java SE的一部分。
writeAttribute的Javadoc表明,如果您正在编写具有尚未绑定到前缀的名称空间的属性,则预计会出现此异常。如果没有关于你要写的文件的更多信息,我无法确认情况是否如此。
如果是这种情况,您需要修复您正在编写的文档,以便在使用名称空间之前为名称空间设置前缀,或者在创建XMLStreamWriter之前将输出工厂的javax.xml.stream.isRepairingNamespaces
属性设置为true
。
Javadoc中的示例如下:
xmlOutputFactory.setProperty(XMLOutputFactory.IS_REPAIRING_NAMESPACES, new Boolean(true));
我不知道为什么这可以在tomcat上工作,而不能在liberty上工作。有关IBM STAX实现的更多信息,请参见知识中心。
问题已解决,感谢您的回复。这里是解决方案:我已经将stax2-api和woodstox-core-asl jar添加到我的项目中,并在我的项目system.properties
中设置以下属性javax.xml.stream.XMLOutputFactory=com.ctc.wstx.stax.WstxOutputFactory
javax.xml.stream.XMLInputFactory=com.ctc.wstx.stax.WstxInputFactory