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