Org.xml.sax.SAXParseException: Документ недействителен: грамматика не найдена.

Я получаю ошибки в своем приложении Struts на моей машине разработки, говоря, что, по-видимому, у моих конфигурационных файлов есть ошибки (которые я уже проверил и выглядел нормально):

org.apache.commons.digester.Digester error
    SEVERE: Parse Error at line 3 column 15: Document is invalid: no grammar found.
    org.xml.sax.SAXParseException: Document is invalid: no grammar found.


org.apache.commons.digester.Digester error
    SEVERE: Parse Error at line 3 column 15: Document root element "struts-config", must match DOCTYPE root "null".
    org.xml.sax.SAXParseException: Document root element "struts-config", must match DOCTYPE root "null".

По-видимому, на машине разработки приложение удается запустить. Однако на сервере развертывания я получаю следующие ошибки, которые я не знаю, могут ли быть связаны:

    org.apache.struts.action.ActionServlet handleConfigException 
SEVERE: Parsing error processing resource path /WEB-INF/struts-config.xml java.net.ConnectException: Connection refused at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351) at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)

Мой файл struts-config.xml: http://pastebin.com/i0XanZZt Мой файл web.xml: http://pastebin.com/jMPAdSUm

Что здесь может быть неправильно? Некоторая личность отсутствует? Неверные версии lib (с использованием последней версии Struts 1)?

Спасибо заранее!

Ответ 1

Просто прошел через битву чего-то очень похожего. Также получал org.xml.sax.SAXParseException: Документ недействителен: грамматика не найдена. Первоначальный разработчик имел setValidation (true) для Digester, а затем пытался проверить его с помощью схемы. Когда для validation установлено значение true, он ожидает DTD в объявлении DOCTYPE XML. Поэтому, когда один не найден, происходит Исключение.

Решение: НЕ устанавливайте валидацию на true в Digester при проверке с использованием схемы.

Ниже приведена хорошая ссылка, которая показывает, как настроить Digester, где он определяет схему для Digester. Конечно, если схема определена в xml, тогда нет необходимости определять схему для Digester, и проверка будет происходить автоматически.

http://alvinalexander.com/java/jwarehouse/commons-digester/src/test/java/org/apache/commons/digester/XMLSchemaTestCase.java.shtml

Надеюсь, что это поможет...

Ответ 2

Просто проверьте struts.xml, исправьте и запустите программу.

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">

Ответ 3

Для тех, кто делает JPOS, добавьте эти две строки в файл xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE isopackager SYSTEM "genericpackager.dtd">

Ответ 4

Попытался выполнить проверку XSD с помощью SAX:

Caused by: org.xml.sax.SAXParseException; lineNumber: 2; columnNumber: 30; Document is invalid: no grammar found.
    at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)

Fix, похоже, добавил следующее:

 saxParser.setProperty(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);

ref: https://docs.oracle.com/javase/tutorial/jaxp/sax/validation.html