2

我从 LDAP 获取用户角色名,其中一些之间有空格。

现在允许空格作为角色名web.xml,所以谷歌告诉我使用CDATA.

<security-role>
  <role-name><![CDATA[GESMA Dispositivos Externos]]></role-name>
</security-role>

它在服务器中工作正常,但 Eclipse 一直将web.xml文件标记为error. 错误是Value is not a valid NMToken

虽然只是一种烦恼,但我发现这个标记非常分散注意力。我怎样才能摆脱它?

更新:显示错误的最小 web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="3.0"
  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_3_0.xsd">
  <security-role>
    <role-name>GESMA</role-name>
  </security-role>
  <security-role>
    <role-name><![CDATA[GESMA Dispositivos Externos]]></role-name> <!-- Error HERE -->
  </security-role>
  <security-role>
    <role-name><![CDATA[GESMA Hospital General]]></role-name> <!-- Error HERE -->
  </security-role>
  <security-role>
    <role-name><![CDATA[GESMA Hospital Joan March]]></role-name> <!-- Error HERE -->
  </security-role>
  <security-role>
    <role-name><![CDATA[GESMA Hospital Psiquiatric]]></role-name> <!-- Error HERE -->
  </security-role>
  <security-role>
    <role-name>GESMAN_Manager</role-name>
  </security-role>
  <security-role>
    <role-name>GESMAN_Admin</role-name>
  </security-role>
</web-app>

我的配置是:

  • 适用于 Java EE 的 Eclipse Indigo SR2
  • JBossTools 3.3.0
  • JBossAS 工具 2.3.0

提前致谢。

4

1 回答 1

2

所以。翻遍了Java EE的各种schema文件,发现类型<role-name>确实是xsd:token。这意味着您不能在其中使用空格,即使您使用 CDATA 部分。

CDATA 部分只是转义通常不允许在 XML 标记中使用的字符,例如<or "。但最终,您的空间仍然是一个空间,并且不允许在那里。服务器可能不会对此抱怨,一切都可以正常工作,但根据规范(XML 模式),您的文件无效。

所以我强烈建议你通过用下划线或其他东西替换空格来解决这个问题,不要只是关闭 Eclipse。因为另一台服务器甚至只是一个较新的版本可能不再接受您的 web.xml。

(但当然有一些方法可以阻止 Eclipse 验证文件,如果你愿意,我可以在这里发布其中的一些。)


编辑:以下是web.xml Schema 文件中包含的Schema 文件的相关部分。我认为这是您可以找到的所有“文档”。

  <xsd:complexType name="role-nameType">
    <xsd:annotation>
      <xsd:documentation>
        The role-nameType designates the name of a security role.
        The name must conform to the lexical rules for a token.
      </xsd:documentation>
    </xsd:annotation>
    <xsd:simpleContent>
      <xsd:restriction base="javaee:string"/>
    </xsd:simpleContent>
  </xsd:complexType>

你看,它说角色名称必须符合令牌的规则,这意味着不允许有空格。

于 2012-09-13T17:47:21.940 回答