Y compris les fichiers dans web.xml

Je suis dans le processus de l'écriture de tests unitaires pour une JEE5 service web. Le comportement du service web dépend des attributs définis dans le web.xml fichier. Je suis désireux de donc diviser mon web.xml dans une partie constante et une partie qui est a changé entre les deux séries de tests.

Pour voir si c'est réellement possible, j'ai essayé de voir si je peux diviser le welcome-file-list attribut. À l'aide de certaines instructions que j'ai trouvé j'ai trouvé le suivant:

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>

Cependant, j'obtiens des erreurs de validation sur le web.xml fichier:

Attribut "version" doit être déclaré pour l'élément de type "web-app". [7]
L'attribut "xmlns" doit être déclaré pour l'élément de type "web-app". [7]
L'attribut "xmlns:xsi" doit être déclaré pour l'élément de type "web-app". [7]
L'attribut "xsi:schemaLocation" doit être déclaré pour l'élément de type "web-app". [7]

J'ai le sentiment que l'utilisation d'une web app v2.3 DTD et une web app v2.5 schéma à l'intérieur du même fichier est le problème, mais je ne sais pas comment je vais être capable de se déplacer.

(Toutes les autres approches de la division d'un web.xml fichier en petits morceaux seraient les bienvenus aussi!)

Mise à jour

Si je retire la DTD de référence comme si...

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

...il semble que le processus de validation ignore la web-app_2_5.xsd fichier:

Élément de type "web-app" doit être déclarée. [5]
Type d'élément "auditeur", doivent être déclarés. [6]
Type d'élément "listener-class" doit être déclarée. [7]
Type d'élément "servlet" doit être déclarée. [9]
etc, etc, etc.

NE FAITES PAS ÇA! Vous êtes essentiellement en utilisant un Tomcat de sécurité spécifiques à exploiter qui est résolu dans les plus récentes versions de Tomcat et pas nécessairement présents dans les différents serveurs. En d'autres termes, la webapp avec une telle web.xml est portables. Problème lié rapport: bugzilla.redhat.com/show_bug.cgi?id=1069911

OriginalL'auteur Catchwa | 2011-07-06