【问题标题】:Any Alternate Solution to Xml Unmarshalling Error in Java-8? : “secure-processing org.xml.sax.SAXNotRecognizedException"Java-8 中 Xml 解组错误的任何替代解决方案? :“安全处理 org.xml.sax.SAXNotRecognizedException”
【发布时间】:2023-03-22 17:51:01
【问题描述】:

注意:此错误已在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(s) 确实是问题所在(如前面共享的链接中所述),我确实将相关代码提取到不同的项目中,并使用 java-8 成功运行了代码(即没有任何错误) 使用最少数量的罐子。到目前为止一切顺利。

现在是查询:

就我而言,我的遗留项目使用了大约 2-3 个已知的冲突 jar,用于各种原因。但是,有这个新模块使用注释驱动的 jaxb 进行 oxm 处理。

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 感谢您的贡献,但最好将其添加为答案的评论而不是新答案。
    【解决方案2】:

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

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

    【讨论】:

    • 确实解决了问题!万分感谢。 :) 出于好奇,我还有一个疑问。是否不可能告诉 JVM(可能通过某些系统属性或其他方式)使用类路径上所有可用的 SAX 解析器的兼容/正确变体(假设这确实是导致问题的原因!)?
    猜你喜欢
    • 2014-10-27
    • 2014-07-20
    • 2014-08-31
    • 1970-01-01
    • 1970-01-01
    • 2018-06-18
    • 1970-01-01
    • 1970-01-01
    • 2022-12-11
    相关资源
    最近更新 更多