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

现在允许在web.xml中将空格用作角色名,因此Google告诉我使用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
JBoss工具3.3.0
JBossAS工具2.3.0


提前致谢。

最佳答案

所以。深入研究Java EE的各种模式文件后,我发现<role-name>的类型确实是xsd:token。这意味着即使使用CDATA节,也不能在其中使用空格。

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

因此,我强烈建议您通过用下划线或下划线替换空格来解决此问题,而不仅仅是关闭Eclipse。因为另一台服务器甚至是新版本的服务器可能不再接受您的web.xml。

(但是,当然有阻止Eclipse验证文件的方法,如果需要,我可以在此处发布其中的一些方法。)



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


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


您会看到,它说角色名称必须符合令牌规则,这意味着不允许使用空格。

10-07 19:28
查看更多