在web.xml中包含文件

我正在为JEE5 Web服务编写unit testing。 Web服务的行为取决于web.xml文件中设置的属性。 因此,我希望将我的web.xml拆分为一个常量部分,并在测试运行之间进行更改。

为了查看它是否真的可行,我试图看看是否可以拆分welcome-file-list属性。 使用一些说明我发现我得出以下结论:

web.xml中

  <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" [  ]>   com.sun.xml.ws.transport.http.servlet.WSServletContextListener   NewWebService com.sun.xml.ws.transport.http.servlet.WSServlet 1   NewWebService /NewWebService    30   &fragment;  

fragment.xml之

   index.jsp  

但是,我在web.xml文件中收到validation错误:

必须为元素类型“web-app”声明属性“version”。 [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参考…

  <!DOCTYPE web-app[  ]>  etc, etc, etc. 

…似乎validation过程忽略了web-app_2_5.xsd文件:

必须声明元素类型“web-app”。 [5]
必须声明元素类型“listener”。 [6]
必须声明元素类型“listener-class”。 [7]
必须声明元素类型“servlet”。 [9]
等等等

我最终在我的Web服务中添加了一个钩子,用于检查是否存在eproperties文件。 如果找到一个,它知道它处于测试模式,而不是使用web.xml指定的值,它会从属性文件中提取它们。 不是很优雅但至少它有效。 在@BeforeClass方法期间,通过JUnit测试将属性文件复制到WEB-INF目录。 鉴于这种方法的成功,我一直想知道web.xml是否是存储Web应用程序设置的最佳位置……