2

LDAP からユーザー ロール名を取得していますが、それらの間にスペースが入っているものがあります。

で空白をロール名としてweb.xml使用できるようになったため、Google から を使用するように言われましたCDATA

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

サーバーでは問題なく動作しますが、Eclipse はweb.xmlファイルを .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 のさまざまなスキーマ ファイルを調べたところ、 の型<role-name>が確かに xsd:token であることがわかりました。これは、CDATA セクションを使用したとしても、そこにスペースを使用できないことを意味します。

<CDATA セクションは、やなど、通常は XML タグ内で許可されない文字をエスケープするだけ"です。しかし、最終的には、あなたのスペースはスペースのままであり、そこには許可されません。サーバーはこれについて不平を言うことはなく、すべてが機能する可能性がありますが、仕様 (XML スキーマ) によると、ファイルは有効ではありません。

したがって、スペースをアンダースコアなどに置き換えることでこの問題を解決し、Eclipse をシャットダウンしないことを強くお勧めします。別のサーバーまたは新しいバージョンでさえ、web.xml を受け入れなくなる可能性があるためです。

(ただし、もちろん、Eclipse がファイルを検証するのを止める方法はあります。必要に応じて、その一部をここに投稿できます。)


編集: web.xml スキーマ ファイルから含まれているスキーマ ファイルの関連部分は次のとおりです。これが、この問題について見つけられるすべての「ドキュメント」だと思います。

  <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 に答える