Решение для безопасной обработки org.xml.sax.SAXNotRecognizedException, вызывающее java.lang.IllegalStateException, работающее внутри Tomcat
Я сталкиваюсь с этим исключением, когда получаю 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)
Покопавшись, я нашел это, так что, возможно, решение состоит в том, чтобы изменить параметры, которые устанавливает Tomcat.
Итак, вопрос:
- В чем корень проблемы?
- Лучший способ решить это?
- Является ли хороший подход для изменения параметров Tomcat? как это сделать?
Обновить
Это происходит при запуске с Java 8, возврат к Java 7 работает нормально.
3 ответа
Я сталкивался с подобной проблемой, эта проблема возникает, когда существует большая разница в версиях xerces jar и xercesImpl jar. Чтобы решить эту проблему, я использовал xerces-2.9.0 и xercesImpl-2.9.1, и проблема исчезла.
Я знаю, что это старый вопрос. Но просто обновите его, если это поможет другим. У нас недавно была похожая проблема при обновлении до java 8 с JBOSS 3.2.6. Причиной проблемы был старый xercesImpl.jar. Мы обновились до xercesImol-2.9.1.jar, и проблема была решена.
Ну, это сработало для меня: добавлено ниже к моим аргументам конфигурации tomcat:-Djavax.xml.parsers.SAXParserFactory = "com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl"