Can';t在Java中解析web.xml文件

Can';t在Java中解析web.xml文件,java,xml,tomcat,xml-parsing,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.ge

我试图使用
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是如何正确编写的

我准备了一个示例项目来显示错误:

如果您能帮我纠正这个错误,我将不胜感激


提前谢谢

如果要计算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());
}
我有你的项目,并试图调试的问题,在同一时间你可以使用上述方法。 如果不是您想要的,请不要介意。

这只是一个建议。

如果您想计算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());
}
我有你的项目,并试图调试的问题,在同一时间你可以使用上述方法。 如果不是您想要的,请不要介意。

这只是一个建议。

对我来说,它与禁用的验证一起工作

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

对我来说,它与禁用的验证一起工作

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

您是否检查了
web.xml
是否包含在存档中?是的,包含
web.xml
文件是否检查了
web.xml
是否包含在存档中?是的,包含
web.xml
文件谢谢您的建议,但我想解析整个
web.xml
文件。我曾考虑使用
DocumentBuilderFactory
开发一个解析器,但在此之前,我想再次尝试Tomcat的
WebXmlParser
。感谢您的建议,但我想解析整个
web.xml
文件。我曾考虑过使用
DocumentBuilderFactory
开发解析器,但在此之前,我想再次尝试Tomcat的
WebXmlParser
。感谢您的更新。我也对问题所在感到困惑。很好的解决方案,谢谢。我试过你的改变,正如你所说,它是有效的。问题是我的github项目是一个隔离问题的演示。实际上,在我的实际项目中,我试图读取web-INF中的web.xml,尽管禁用了验证,但它还是失败了,并出现了另一个错误。正在将web.xml移到类路径根目录下,它可以正常工作。。。我想知道为什么我不能阅读web-INF中的web.xml。我接受你的回答,因为你已经解决了我原来的问题。谢谢谢谢你的更新。我也对问题所在感到困惑。很好的解决方案,谢谢。我试过你的改变,正如你所说,它是有效的。问题是我的github项目是一个隔离问题的演示。实际上,在我的实际项目中,我试图读取web-INF中的web.xml,尽管禁用了验证,但它还是失败了,并出现了另一个错误。正在将web.xml移到类路径根目录下,它可以正常工作。。。我想知道为什么我不能阅读web-INF中的web.xml。我接受你的回答,因为你已经解决了我原来的问题。谢谢