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

时间:2014-05-30 10:55:30

标签: java xml

我在接收Xml并尝试解析时遇到此异常。在作为独立应用程序运行时,负责该代码的代码经过了充分测试。但是我现在将它集成到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)

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

所以问题是:

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

更新

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

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:5)

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

答案 2 :(得分:1)

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