注意:这个错误已经被讨论过了,并且已经提出了各种解决方案来消除与java-8的默认实现相冲突的jars。
我的问题是对这个问题的扩展.
为了完整起见,下面是我在使用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 (即没有任何错误)以最少的jar数运行代码。到目前一切尚好。
,现在是查询:
在我的例子中,我的遗留项目使用了大约2-3个已知的冲突罐子,这些罐子由于各种原因而使用。然而,有一个新的模块,它使用注释驱动的jaxb进行oxm处理。
的问题是:我无法摆脱那些旧的、相互冲突的罐子,因为这使得10%的代码库无法编译。但是,同时,我也不希望摆脱新模块中的jaxb/oxm实现。
是否有一种方法可以让忽略旧jars,并在代码执行通过这个新模块时使用java-8附带的默认实现?
发布于 2016-02-29 20:44:16
另一种方法可以是使用StAX解析器将XMLStreamReader作为XMLStreamReader,然后让JAXB对其进行解密。
XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance();
XMLStreamReader xmlStreamReader = xmlInputFactory.createXMLStreamReader(reader);
unmarshaller.unmarshal(xmlStreamReader);发布于 2021-04-23 13:21:37
同样的问题!解决方案对我也有效。注意:对于读者来说,我使用FileReader来读取一个已解组好的xml文件。
https://stackoverflow.com/questions/35691668
复制相似问题