Предупреждение Bogus Eclipse для web.xml: "Никаких ограничений грамматики (DTD или XML-схемы), обнаруженных для документа".

Верхняя часть моего файла web.xml выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd"
    version="2.5">

Но я все еще получаю предупреждение от Eclipse (Ganymede) о том, что XML-схема не обнаружена, а нарушения схемы не предупреждаются. Другие файлы XML в моем проекте (Spring файлы конфигурации с конфигурацией, например) не имеют предупреждения и дают правильные предупреждения о нарушениях схемы.

Как мне заставить проверку схемы работать и, надеюсь, предупреждение уйти? Сервер работает правильно. Это просто проблема IDE.

Ответ 1

Возможно, попробуйте:

http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd

Вместо:

http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd

Кроме того, отсутствует <!DOCTYPE ...>:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
<web-app
  xmlns="http://java.sun.com/xml/ns/j2ee" 
  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_2_5.xsd"
  version="2.5">
  <!-- ... -->
</web-app>

Ответ 2

Я тоже ненавижу это предупреждение. Специально потому, что он появляется в файлах XML, которые вы не написали, но появляются в вашем проекте по какой-либо причине (если вы используете MAVEN, это ад).

С Eclipse 3.5+ вы можете легко удалить это правило проверки. Перейдите в раздел "Настройки" → XML → XML FILES → Проверка и выберите "игнорировать".

Вам также может потребоваться выполнить проект → Очистить, чтобы предупреждения о валидации исчезли.

alt text

Ответ 3

Очистите кеш для сохраненных файлов проверки.

Окно > Настройки > Общие > Сетевые подключения > Кэш, затем удалите все. Теперь попробуйте проверить файл и посмотреть, очищает ли он это.

Это случилось со мной, и очистка кеша для проверки была единственным способом вернуть его снова. Совет по очистке грязного кеша был найден здесь.

Ответ 4

Если у вас есть одно и то же сообщение (ошибка), потому что ваш XML-редактор не нашел файл XSD, вы можете добавить запись в каталог.

Вы выбираете URL-адрес, указанный для схемы, для объявления типа

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

URL-адрес файла схемы (http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd) указан для пространства имен http://java.sun.com/xml/ns/j2ee. Теперь вы можете перенаправить расположение файла в каталог рабочей области в Eclipse:

Preferences -> XML -> XML Catalog -> Add..

Используйте

Key Type = Schema Location
Key = http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd

И затем вы можете использовать выбор файла для выбора файла XSD в файловой системе или рабочей области.

Ответ 5

Проблема двояка:

  • Eclipse поставляется с кешем большого количества известных XSD. Пространство имен и/или местоположение, которое вы предоставляете, не соответствуют ни одному из них.
  • Итак, Eclipse пытается искать XSD в Интернете по предоставленному URI (может просто работать). К сожалению, похоже, что после того, как Oracle переработал java.sun.com, этот механизм просто отключился в Eclipse (видимо, сервер перенаправляет на главную страницу вместо простого слова "не существует, извините" ).

Когда вы переходите к правильным значениям для Java EE 5, запись в кеше будет найдена, а Eclipse будет счастлив.

Ответ 6

вы также можете увидеть мой ответ для аналогичного вопроса.

В принципе, просто напишите свой xml, чтобы он соответствовал требуемому правилу

Ответ 7

Добавьте этот <!DOCTYPE ...> в свой XML файл. Пожалуйста, поставьте его под <?xml ...>:

<!DOCTYPE ??? PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

???= Ваш корневой элемент, теперь, если ваше подэлементное имя использует зарезервированное слово html, вы можете поймать некоторые ошибки, все, что вам нужно сделать, это изменить их на незарезервированное слово.

Например:
Если ваш текущий подэлемент <img>, измените его на <pic>...