我从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>
我的配置是:
提前致谢。
答案 0 :(得分:2)
因此。在深入了解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>
你知道,它说角色名称必须符合令牌的规则,这意味着不允许使用空格。