【发布时间】:2014-07-20 02:42:17
【问题描述】:
我在接收 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 工作正常。
【问题讨论】:
-
根据我的经验,当加载了多个 XML 解析器并且使用了错误的解析器时,可能会发生这种情况。要验证这是(不是)这种情况,请打印出独立应用程序中使用的 XmlFactory 的类名。如果不是“com.sun.xml.internal.bind.v2.util.XmlFactory”,那么这可能是异常的原因(要解决它,您必须手动指定正确的 XmlFactory)。
-
我在这个问题中描述了一个类似的问题解决方案:stackoverflow.com/questions/25644023/…