2011-07-06 101 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應用程序設置的最佳地點......