2008-11-26 15 views
34

Wierzchołek mojego pliku web.xml wygląda następująco:Ostrzeżenie dla środowiska Bogus Eclipse dla web.xml: "Brak ograniczeń gramatycznych (DTD lub schemat XML) dla dokumentu."

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

Ale wciąż dostać ostrzeżenie od Eclipse (Ganymede), który nie zostanie wykryty żaden schemat XML i łamanie schematów nie są ostrzegani o. Inne pliki XML w moim projekcie (na przykład pliki konfiguracyjne Spring Framework) nie mają ostrzeżenia i dają prawidłowe ostrzeżenia o naruszeniach schematu.

Jak mogę sprawdzić działanie schematu i, mam nadzieję, ostrzeżenie, aby odszedł? Serwer działa poprawnie. Wydaje się, że to problem z IDE.

+0

żadne z tych rozwiązań pracował dla mnie :( – cmcginty

Odpowiedz

26

Może spróbuj:

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

Zamiast:

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

Również <!DOCTYPE ...> brakuje:

<?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> 
+1

trzeba także zmienić xmlns od: - http://java.sun.com/xml/ ns/j2ee na: - http://java.sun.com/xml/ns/javaee –

+4

i dlaczego akceptujesz odpowiedź, jeśli to nie rozwiąże problemu? –

+1

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

-5

Dodaj <!DOCTYPE ...> do pliku xml. Należy umieścić go pod <?xml ...>:

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

??? = Twój element główny, teraz jeśli nazwa sub-element jest za pomocą HTML zastrzeżone słowo może być zaraźliwy masę błędów, wszystko co musisz zrobić, to zmienić je na coś innego niż -rezerwowane słowo.

Na przykład:
Jeśli bieżący sub-element jest <img>, zmień go na <pic> ...

+1

Plik jest plikiem web.xml, a nie plikiem xhtml. –

+0

To nie działało f albo ja. – cmcginty

46

Nienawidzę tego ostrzeżenia zbyt. Specjalnie dlatego, że pojawia się w plikach XML, które nie zostały napisane, ale pojawiają się w twoim projekcie z jakiegokolwiek powodu (jeśli używasz MAVEN to piekło).

Dzięki Eclipse 3.5+ możesz z łatwością usunąć tę regułę sprawdzania poprawności. Przejdź do Preferencje -> XML -> Pliki XML -> Sprawdzanie poprawności i Wybierz "ignoruj".

Może być również konieczne wykonanie projektu -> Wyczyść, aby ostrzeżenia dotyczące walidacji zniknęły.

alt text

+0

Używam Mavena szeroko i nie dostaję tego błędu na plikach Mavena, chyba że znajdują się one w katalogu docelowym. W takim przypadku lepiej jest dodać regułę, aby wyłączyć sprawdzanie poprawności w katalogu docelowym, niż zignorować błąd. – HDave

+5

To nie rozwiązuje problemu, po prostu ukryj objaw. –

+3

NIE zrobiłbym tego ** Preferencje | XML | Pliki XML | Sprawdzanie poprawności ** w środowisku Eclipse jako jedynej masce/ukryj błąd, nie rozwiązuje problemu. Jeśli używasz Eclipse tylko do budowania aplikacji dla systemu Android, to "rozwiązanie" jest dopuszczalne. Ale jeśli użyjesz Eclipse do zbudowania innych projektów Java - JSF itd. - złamie te projekty, jeśli sprawdzanie poprawności XML zostanie "wyłączone". Więc uważaj. Prawdziwym rozwiązaniem jest aktualizacja oprogramowania przez Oracle, Google i IBM za pomocą zaktualizowanych DTD i schematów. – ChuongPham

8

Wyczyść pamięć podręczną dla przechowywanych plików walidacji.

Okno> Preferencje> Ogólne> Połączenia sieciowe> Pamięć podręczna, a następnie usuń wszystkie. Teraz przejdź do sprawdzania poprawności pliku i zobacz, czy to wszystko wyczyści.

To, że się przydarzyłem i wyczyszczenie pamięci podręcznej do sprawdzania poprawności było jedynym sposobem na poprawne działanie. Porada dotycząca czyszczenia brudnej pamięci podręcznej została znaleziona here.

+0

To zadziałało dla mnie. Wygląda na to, że w pewnym momencie moje Eclipse zapisało w pamięci podręcznej fałszywą kopię http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd, która powodowała, że ​​wszystkie moje pliki web.xml nie sprawdzały poprawności. –

+0

To działało również dla mnie, gdy moje pliki Spring bean zaczęły zgłaszać ten błąd. – HDave

2

Jeśli masz ten sam komunikat o błędzie, ponieważ Twój edytor XML nie znalazł pliku XSD, możesz dodać wpis do katalogu.

Wybierasz URL podany na schemacie, na deklaracji jak

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

adres URL pliku schematu (http://java.sun.com/xml/ns/j2ee/web-app_2_5 .xsd) jest określona dla przestrzeni nazw http://java.sun.com/xml/ns/j2ee. Teraz można przekierować lokalizację pliku z katalogu obszaru roboczego w Eclipse:

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

użytkowania

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

a następnie można użyć wyboru pliku, aby wybrać faktycznie plik XSD na system plików albo przestrzeń robocza.

0

Problem jest dwojaki:

  1. Eclipse statki z cache wielu znanych XSD tych. Podany obszar nazw i/lub lokalizacja nie pasuje do żadnego z nich.
  2. Tak więc Eclipse próbuje znaleźć XSD w Internecie na podanym identyfikatorze URI (może po prostu działać). Niestety wygląda na to, że po tym, jak Oracle poprawił java.sun.com, ten mechanizm działał tylko w Eclipse (najwyraźniej serwer przekierowuje na stronę główną zamiast po prostu mówić "nie istnieje, przepraszam").

Po poprawieniu poprawnych wartości Java EE 5, pozycja w pamięci podręcznej zostanie odnaleziona, a Eclipse będzie szczęśliwy.