Решение для безопасной обработки 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"

Другие вопросы по тегам