脱机时使用外部XSD文件解析tomcat web.xml

时间:2019-04-03 03:15:01

标签: xml tomcat xsd

当我尝试在没有Internet连接的情况下启动tomcat时,解析位于CATALINA_HOME / conf / web.xml中的web.xml时会引发错误。 (在我的环境中,CATALINA_HOME是/usr/share/tomcat8.5)

org.apache.tomcat.util.digester.Digester.error Parse Error at line 20 column 193: Schema error: no attribute named "lang" was defined in schema : http://www.w3.org/XML/1998/namespace.
 org.xml.sax.SAXParseException; systemId: file:/usr/share/tomcat8.5/conf/web.xml; lineNumber: 20; columnNumber: 193; Schema error: no attribute named "lang" was defined in schema : http://www.w3.org/XML/1998/namespace.

我已确定问题是它正试图获取位于http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd的xsd文件,但是由于它处于脱机状态,因此它不能而且web.xml命名空间不完整。

我尝试下载web-app_3_1.xsd并将其放置在/usr/share/tomcat8.5/conf/web-app_3_1.xsd中,然后通过将前几行更改为web.xml来引用它

<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 web-app_3_1.xsd" 
version="3.1">

,但仍然会引发相同的错误。我也尝试过指向文件 像file:///usr/share/tomcat8.5/conf/web-app_3_1.xsd一样,但是即使该文件存在并属于tomcat用户,它也抛出了FileNotFoundException,仍然无法正常工作。

任何帮助您解决此问题的方法或解决方法,以便在没有Internet连接的情况下进行部署!

1 个答案:

答案 0 :(得分:0)

我们找到了一个解决方案,将STRICT_SERVLET_COMPLIANCE中的truefalse更改为tomcat/conf/catalina.properties。这样可以阻止它对照其架构文件检查xml,并且由于它不再尝试获取架构文件,因此它可以脱机工作。