无法解析Java中的web.xml文件

时间:2018-07-26 14:43:39

标签: java xml tomcat xml-parsing

我正在尝试使用org.apache.tomcat.util.descriptor.web.WebXmlParser解析Java中的web.xml文件,但没有得到。

程序真的很简单:

public WebXml read() {
    WebXml webXml = new WebXml();

    WebXmlParser parser = new WebXmlParser(false, true, true);

    try (InputStream is = Reader.class.getResourceAsStream("/web.xml")) {
        boolean success = parser.parseWebXml(new InputSource(is), webXml, false);
        if (!success) {
            throw new IllegalStateException("Error parsing");
        }
    } catch (IOException e) {
        throw new IllegalStateException("Error reading", e);
    }

    return webXml;
}

web.xml位于项目的根目录中,并且定义了一个servlet:

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    <servlet>
        <servlet-name>demoServlet</servlet-name>
        <servlet-class>com.demo.DemoServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>demoServlet</servlet-name>
        <url-pattern>/demo</url-pattern>
    </servlet-mapping>

</web-app>

当我尝试使用上述代码片段解析web.xml时,出现以下错误:

SEVERE: Parse Error at line 4 column 24: cvc-elt.1: Cannot find the declaration of element 'web-app'.
org.xml.sax.SAXParseException; lineNumber: 4; columnNumber: 24; cvc-elt.1: Cannot find the declaration of element 'web-app'.

我不明白该错误,因为恕我直言,web.xml的编写正确。

我已经准备了一个示例项目来显示错误:https://github.com/itelleria/webxml-parser

对于此错误的任何帮助,我们将不胜感激。

先谢谢了。

2 个答案:

答案 0 :(得分:2)

对我来说,它与禁用验证一起使用

chrome.devtools.network.getHAR()

答案 1 :(得分:0)

如果要计算servlet或任何标签的数量,可以使用以下方法:

public static void main(String[] args) throws SAXException, IOException, ParserConfigurationException {
    DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
    Document doc = null;
    DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
    doc = docBuilder.parse("D:\\ECLIPSE-WORKSPACE\\demo-xml-parser\\src\\main\\resources\\web.xml");  // path of your testNgXml
    NodeList parameterNodes = doc.getElementsByTagName("servlet");
    System.out.println(parameterNodes.getLength());
}

我有您的项目,正在尝试调试问题,与此同时,您可以使用上述方法。 请不要介意它是否不是您想要的。
这只是一个建议。