2011-07-06 100 views
3

我正在编写针对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]
等,等,等

+0

不要这样做!你基本上利用了一个Tomcat特定的安全漏洞,它在较新的Tomcat版本中得到了修复,而不一定存在于不同的服务器中。换句话说,具有这样的web.xml的webapp是不可移植的。相关问题报告:https://bugzilla.redhat.com/show_bug.cgi?id = 1069911 – BalusC

回答

1

我结束了加入勾成我的web服务来检查一个eproperties文件的存在。如果它找到一个,它就知道它处于测试模式,而不是使用web.xml中指定的值,它将它从属性文件中拉出。不是很优雅,但至少可以工作。在@BeforeClass方法中,通过JUnit测试将属性文件复制到WEB-INF目录。鉴于此方法的成功,我一直在想,web.xml是否是存储Web应用程序设置的最佳地点......