安全处理org.xml.sax.SAXNotRecognizedException的解决方案导致在Tomcat中运行java.lang.IllegalStateException

我在接收Xml并尝试解析时遇到此exception。 在作为独立应用程序运行时,负责该代码的代码经过了充分测试。 但是我现在正在将它集成到Tomcat中。

堆栈跟踪是:

java.lang.IllegalStateException: org.xml.sax.SAXNotRecognizedException: http://javax.xml.XMLConstants/feature/secure-processing 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 javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:157) at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:204) 

挖掘我发现了这一点 ,所以解决方案可能是更改Tomcat设置的选项。

所以问题是:

  • 问题的根源是哪个?
  • 解决它的最佳方法是什么?
  • 改变Tomcat选项是一个好方法吗? 怎么做的?

更新

当使用Java 8运行它时会发生这种情况,恢复到Java 7可以正常工作。

我遇到过类似的问题,当xerces jar和xercesImpl jar的版本存在很大差异时会出现这个问题。 为了解决这个问题,我使用了xerces-2.9.0和xercesImpl-2.9.1,问题就消失了。

我知道这是一个老问题。 但只是更新它,如果它对其他人有任何帮助..我们最近有一个类似的问题,同时使用JBOSS 3.2.6升级到Java 8。 问题的原因是旧的xercesImpl.jar。 我们升级到xercesImol-2.9.1.jar并解决了问题。

嗯,这对我有用 :下面添加到我的tomcat配置参数: -Djavax.xml.parsers.SAXParserFactory =“com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl”