在web.xml中包含文件

时间:2011-07-06 05:43:35

标签: java java-ee web.xml

我正在为JEE5 Web服务编写单元测试。 Web服务的行为取决于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”声明属性“version”。 [7]
  必须为元素类型“web-app”声明属性“xmlns”。 [7]
  必须为元素类型“web-app”声明属性“xmlns:xsi”。 [7]
  必须为元素类型“web-app”声明属性“xsi:schemaLocation”。 [7]

我觉得在同一个文件中使用网络应用程序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]
  必须声明元素类型“listener”。 [6]
  必须声明元素类型“listener-class”。 [7]
  必须声明元素类型“servlet”。 [9]
  等等,等等。

1 个答案:

答案 0 :(得分:1)

我最终在我的Web服务中添加了一个钩子,用于检查是否存在eproperties文件。如果找到一个,它知道它处于测试模式,而不是使用web.xml中指定的值,它会从属性文件中提取它们。不是很优雅但至少它有效。在WEB-INF方法期间,JUnit测试将属性文件复制到@BeforeClass目录。鉴于这种方法的成功,我一直想知道web.xml是否是存储Web应用程序设置的最佳位置......