Пользовательские теги JSP: отсутствует схема DTD / XML - PullRequest
7 голосов
/ 26 мая 2011

Я написал свой пользовательский тег JSP со следующим TLD:

<?xml version="1.0" encoding="UTF-8"?>
<taglib
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee web-jsptaglibrary_2_1.xsd"
  xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  version="2.1">
  <tlibversion>1.0</tlibversion> 
  <jspversion>2.1</jspversion>
  ...

Теперь Eclipse Helios жалуется, что «для документа не обнаружено никаких грамматических ограничений (DTD или XML-схема)».

Я знаю, как отключить предупреждение, вместо этого мне было интересно, как решить проблему, предоставив информацию DTD или схемы.

Кстати, в приведенном выше фрагменте XML у меня есть:

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee web-jsptaglibrary_2_1.xsd"

но, похоже, это не помогает.

ОБНОВЛЕНИЕ по предложению Питера я пошел, чтобы проверить в моем Окне> Настройки> XML> Каталог XML, и обнаружил следующее, что может подойти:

Entry element:  Public
Location:   dtdsAndSchemas/web-jsptaglibrary_1_2.dtd in jar file 
usr/local/eclipse/plugins/org.eclipse.jst.standard.schemas_1.1.0.v201003031644.jar
URI:       jar:file:/usr/local/eclipse/plugins/org
  .eclipse.jst.standard.schemas_1.1.0.v201003031644.jar!/dtdsAndSchemas
  /web-jsptaglibrary_1_2.dtd
Key type:   Public ID
Key:    -//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN

Поэтому я попытался добавить в свой текст следующее:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" 
"http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_2.dtd">

Теперь у меня есть следующие ошибки:

В этой строке найдено несколько аннотаций:

  • Атрибут "xsi: schemaLocation" должен быть объявлен для типа элемента "taglib".
  • Атрибут "version" должен быть объявлен для типа элемента "taglib".
  • Атрибут "xmlns" со значением "http://java.sun.com/xml/ns/javaee" должен иметь значение" http://java.sun.com/JSP/ TagLibraryDescriptor ".

  • schema_reference.4: не удалось прочитать документ схемы 'web-jsptaglibrary_2_1.xsd', так как

    1) не удалось найти документ; 2) документ не может быть прочитан; 3) корневым элементом документа не является.

  • Содержимое элемента типа "taglib" должно совпадать "(tlib-версия, jsp-версия, короткое имя, uri?, Отображаемое имя?, Small-icon?, Large-icon?, Description? , валидатор?, слушатель *, бирка +)».

  • Атрибут "xmlns: xsi" должен быть объявлен для типа элемента "taglib".

Ответы [ 2 ]

14 голосов
/ 07 августа 2011

Я не удосужился рассмотреть эту проблему больше месяца, потому что в любом случае все работало в Tomcat.Недавно я попробовал GlassFish и JBoss.Хотя GlassFish 3.1.1 не жаловался, JBoss 7.0 отказался запускать приложение из-за проблем с tld.Тем временем я также обновил Eclipse Helios до Indigo.

Я понял, что использую DTD и Schema одновременно, что не может быть хорошим.Я отказался от DTD и сохранил только схему.Мне пришлось переименовать несколько тегов, таких как tlibversion в tlib-version, shortname в short-name, bodycontent в body-content, tagclass в tag-class, удалить информационный тег, который я заменил XML-комментариями.Я предполагаю, что это, вероятно, более новая версия спецификаций, потому что в приведенном мною примере они были названы без дефисов.

После этого все заработало: Eclipse больше не выдавал никаких предупреждений, JBoss отлично запустил приложение.Для справки вот рабочий tld:

<?xml version="1.0" encoding="UTF-8"?>
<taglib
        xsi:schemaLocation="
            http://java.sun.com/xml/ns/javaee 
            http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
        xmlns="http://java.sun.com/xml/ns/javaee" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        version="2.1">
    <tlib-version>1.0</tlib-version> 
    <short-name>StivloTags</short-name>
    <uri>http://www.stefanolocati.it/</uri>

    <!-- Example from http://www.stardeveloper.com/articles/display.html?article=2001081301&amp;page=1 -->
    <tag> 
        <name>firstTag</name> 
        <tag-class>obliquid.tag.FirstTag</tag-class>
        <body-content>empty</body-content> 
        <attribute>
            <name>name</name>
            <required>false</required>
        </attribute>
    </tag> 

    <!-- Truncate text after maxLength or 80 chars, adding "&amp;hellip;" if the the text was longer -->
    <tag>
        <name>ellipsis</name>
        <tag-class>obliquid.tag.Ellipsis</tag-class>
        <body-content>scriptless</body-content>
        <attribute>
             <name>maxLength</name>
             <required>false</required>
        </attribute>
    </tag>

</taglib>
2 голосов
/ 26 мая 2011

Если Eclipse не получает XSD автоматически из библиотеки, вы всегда можете добавить его вручную: Window> Preferences> XML> XML Catalog

В моем случае он уже присутствовал в разделе плагинов.Вероятно, он поставляется с одним из плагинов Eclipse Java EE.

...