我正在編寫針對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