我正在尝试使用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
对于此错误的任何帮助,我们将不胜感激。
先谢谢了。
答案 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());
}
我有您的项目,正在尝试调试问题,与此同时,您可以使用上述方法。
请不要介意它是否不是您想要的。
这只是一个建议。