Including files in web.xml

会有一股神秘感。 提交于 2019-12-31 02:11:08

问题


I'm in the process of writing unit tests for a JEE5 web service. The behaviour of the web service depends on the attributes set in the web.xml file. I'm wanting to therefore split my web.xml into a constant part and a part that is changed around inbetween test runs.

To see if it's actually possible, I've tried to see if I can split out the welcome-file-list attribute. Using some instructions I found I've come up the following:

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>

However, I'm getting validation errors on the web.xml file:

Attribute "version" must be declared for element type "web-app". [7]
Attribute "xmlns" must be declared for element type "web-app". [7]
Attribute "xmlns:xsi" must be declared for element type "web-app". [7]
Attribute "xsi:schemaLocation" must be declared for element type "web-app". [7]

I get the feeling that using a web app v2.3 DTD and a web app v2.5 schema inside the same file is the problem, but I don't know how I'm going to be able to get around it.

(Any other approaches in splitting a web.xml file into smaller chunks would be welcome too!)

Update

If I remove the DTD reference like so...

<?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.

...it appears as though the validation process ignores the web-app_2_5.xsd file:

Element type "web-app" must be declared. [5]
Element type "listener" must be declared. [6]
Element type "listener-class" must be declared. [7]
Element type "servlet" must be declared. [9]
etc, etc, etc.


回答1:


I ended up adding a hook into my web service that checks for the presence of an eproperties file. If it finds one, it knows that it is in testing mode and instead of using the values specified in web.xml, it pulls them from the properties file. Not very elegant but at least it works. The properties file is copied to the WEB-INF directory by the JUnit test during the @BeforeClass method. Given the success of this method I've been wondering whether web.xml is the best place to store web application settings anyway...



来源:https://stackoverflow.com/questions/6592035/including-files-in-web-xml

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!