XMLStreamException:名称空间URI没有绑定到前缀IBM jre



我的项目在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

最新更新