我正在编写针对JEE5 Web服务的单元测试。 Web服务的行为取决于web.xml
文件中设置的属性。因此我想将web.xml
分成不变的部分和在测试运行之间改变的部分。在web.xml中包含文件
要查看它是否实际可行,我试着看看我是否可以拆分出welcome-file-list
属性。使用some instructions I found我想出如下:
的web.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" [
<!ENTITY fragment SYSTEM "fragment.xml">
]>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<listener>
<listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
</listener>
<servlet>
<servlet-name>NewWebService</servlet-name>
<servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>NewWebService</servlet-name>
<url-pattern>/NewWebService</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
&fragment;
</web-app>
fragment.xml之
<?xml version="1.0" encoding="UTF-8"?>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
但是,我得到验证错误的web.xml
文件:
必须为元素类型“web-app”声明属性“版本”。 [7]
必须为元素类型“web-app”声明属性“xmlns”。 [7]
必须为元素类型“web-app”声明属性“xmlns:xsi”。 [7]
必须为元素类型“web-app”声明属性“xsi:schemaLocation”。 [7]
我感觉在同一个文件中使用web应用程序v2.3 DTD和web应用程序v2.5架构是问题,但我不知道我将如何能够解决它。
(在拆分web.xml文件成小块任何其他方法将受到欢迎呢!)
更新
如果我删除DTD引用是这样的...
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app[
<!ENTITY fragment SYSTEM "fragment.xml">
]>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
etc, etc, etc.
...它看起来好像验证过程忽略了web-app_2_5.xsd
文件:
必须声明元素类型“web-app”。 [5]
元素类型“侦听器”必须声明。 [6]
元素类型“侦听器类”必须声明。 [7]
必须声明元素类型“servlet”。 [9]
等,等,等
不要这样做!你基本上利用了一个Tomcat特定的安全漏洞,它在较新的Tomcat版本中得到了修复,而不一定存在于不同的服务器中。换句话说,具有这样的web.xml的webapp是不可移植的。相关问题报告:https://bugzilla.redhat.com/show_bug.cgi?id = 1069911 – BalusC