Java-8中Xml Unmarshalling错误的任何替代解决方案? :“安全处理org.xml.sax.SAXNotRecognizedException”

时间:2016-02-29 03:49:33

标签: java xml-parsing jaxb java-8 jaxb2

注意:此错误已经讨论here,并且还建议使用各种解决方案来摆脱与java-8默认实现冲突的jar。

我的问题是该问题的延伸。

为了完整起见,这里是我也面临的堆栈跟踪,当我用java-8运行代码时:

Feb 29, 2016 12:06:41 PM com.sun.xml.internal.bind.v2.util.XmlFactory createParserFactory
SEVERE: null
org.xml.sax.SAXNotRecognizedException: http://javax.xml.XMLConstants/feature/secure-processing
    at org.apache.xerces.parsers.AbstractSAXParser.setFeature(AbstractSAXParser.java:1487)
    at org.apache.xerces.jaxp.SAXParserImpl.setFeatures(SAXParserImpl.java:145)
    at org.apache.xerces.jaxp.SAXParserImpl.<init>(SAXParserImpl.java:128)
    at org.apache.xerces.jaxp.SAXParserFactoryImpl.newSAXParserImpl(SAXParserFactoryImpl.java:112)
    at org.apache.xerces.jaxp.SAXParserFactoryImpl.setFeature(SAXParserFactoryImpl.java:140)
    at com.sun.xml.internal.bind.v2.util.XmlFactory.createParserFactory(XmlFactory.java:121)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.getXMLReader(UnmarshallerImpl.java:139)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:276)

为了证明冲突的jar确实是问题(如之前共享的链接中所述),我确实将相关代码拉出到另一个项目中并使用java-8成功运行代码(即没有任何错误) )最低数量的罐子。到目前为止一切都很好。

现在查询:

在我的情况下,我的遗留项目使用了大约2-3个已知的冲突罐,这些罐由于各种原因而被使用。但是,有一个新模块使用注释驱动的jaxb进行oxm处理。

问题是:我无法摆脱那些旧的和冲突的jar,因为这几乎使得10%的代码库无法编译。但是,与此同时,我也不希望在新模块中摆脱jaxb / oxm实现。

有没有办法我能以某种方式告诉JVM忽略旧jar并且只要代码执行通过这个新模块就使用java-8附带的默认实现?

2 个答案:

答案 0 :(得分:7)

另一种方法是使用StAX解析器将XML作为XMLStreamReader获取,然后让JAXB解组。

XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();
XMLStreamReader xmlStreamReader = xmlInputFactory.createXMLStreamReader(reader);
unmarshaller.unmarshal(xmlStreamReader);

答案 1 :(得分:0)

有完全相同的问题!解决方案也对我有用。 读者请注意,我使用 FileReader 读取了一个解组良好的 xml 文件。

相关问题