繁体   English   中英

包括 web.xml 中的文件

[英]Including files in web.xml

我正在为 JEE5 web 服务编写单元测试。 web 服务的行为取决于web.xml文件中设置的属性。 因此,我想将我的web.xml拆分为恒定部分和在测试运行之间更改的部分。

为了看看它是否真的可行,我试着看看我是否可以拆分出welcome-file-list属性。 使用一些说明,我发现我想出了以下内容:

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>

片段.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]

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM