在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应用程序设置的最佳位置……