Java EE EAR 部署描述符 eclipse DTD 验证器

Java EE EAR deployment descriptor eclipse DTD validator

我正在尝试解决一个关于我正在处理的项目的部署描述符的小问题。出于某种原因,Eclipse 没有根据 DTD 验证 XML 文件,但我不明白为什么。

这是 xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:application="http://java.sun.com/xml/ns/javaee/application_5.xsd" xmlns:javaee="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/application_1_4.xsd" id="Application_ID" version="1.4">
  <display-name>projectName-ear</display-name>
  <module id="WebModule_1266621716287">
    <web>
      <web-uri>projectName-war.war</web-uri>
      <context-root>projectName-war</context-root>
    </web>
  </module>
  <library-directory>lib</library-directory>
</application>

这是我从 eclipse 验证程序中得到的错误:

cvc-complex-type.2.4.a: Invalid content was found starting with element 'library-directory'. One of '{"http://java.sun.com/xml/ns/j2ee":module, "http://java.sun.com/xml/ns/j2ee":security-role}' is expected.

<library-directory> 是在 Java EE 5 中引入的。但是,您将 application.xml 声明为 J2EE 1.4 应用程序而不是 Java EE 5 应用程序。

<application ... version="1.4">

因此它将 运行 以 J2EE 1.4 向后兼容模式完全不支持 <library-directory>

对于 Java EE 5 应用程序(GlassFish 2、JBoss AS 4/5、WebSphere 6 等),使用以下作为根声明:

<application 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/application_5.xsd"
             version="5">

或者如果您实际上是针对 Java EE 6 容器(GlassFish 3、JBoss AS 6/7、WebSphere 7、TomEE 1 等),那么最好使用以下内容根声明:

<application 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/application_6.xsd"
             version="6">

或者如果您实际上是针对 Java EE 7 容器(GlassFish 4、WildFly 8、WebSphere 8、TomEE 2 等),那么最好使用以下内容作为根声明(注意新的 XML 命名空间域):

<application xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/application_7.xsd"
             version="7">

请注意,这同样适用于其他 DD XML 文件,例如 Servlet 的 web.xml、JSF 的 faces-config.xml、CDI 的 beans.xml 等。根 XML 元素声明及其 version 非常重要!