在 web.xml 中包含文件

发布于 2024-11-18 13:15:47 字数 2870 浏览 1 评论 0原文

我正在为 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>

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]

我感觉在同一个文件中使用 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]
等等,等等,等等

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.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

往日 2024-11-25 13:15:47

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

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文