2008-11-26 17 views
34

Đỉnh của tập tin web.xml của tôi trông như thế này:Cảnh báo Eclipse không hợp lệ cho web.xml: "Không phát hiện thấy ràng buộc ngữ pháp (DTD hoặc lược đồ XML) cho tài liệu."

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

Nhưng tôi vẫn nhận được cảnh báo từ Eclipse (Ganymede) mà không có lược đồ XML được phát hiện, và vi phạm schema không được cảnh báo về. Các tệp XML khác trong dự án của tôi (ví dụ: Spring Framework tệp cấu hình) không có cảnh báo và đưa ra cảnh báo chính xác về vi phạm lược đồ.

Làm cách nào để kiểm tra lược đồ hoạt động và hy vọng cảnh báo sẽ biến mất? Máy chủ chạy đúng cách. Nó dường như là một vấn đề IDE.

+0

không ai trong số các giải pháp này làm việc cho tôi :( – cmcginty

Trả lời

26

Có lẽ thử:

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

Thay vì:

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

Ngoài ra, <!DOCTYPE ...> là mất tích:

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

Bạn cũng cần phải thay đổi xmlns từ: - http://java.sun.com/xml/ ns/j2ee tới: - http://java.sun.com/xml/ns/javaee –

+4

và tại sao chấp nhận câu trả lời nếu nó không khắc phục được sự cố của bạn? –

+1

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

-5

Thêm <!DOCTYPE ...> này đến file xml của bạn. Hãy đặt nó dưới <?xml ...>:

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

??? = phần tử gốc của bạn, bây giờ nếu tên tiểu yếu tố bạn đang sử dụng một html reserved từ mà bạn có thể bắt một số lỗi, tất cả các bạn phải làm là thay đổi chúng để một tổ chức phi từ được bảo tồn.

Ví dụ:
Nếu tiểu yếu tố hiện tại của bạn là <img>, thay đổi nó để <pic> ...

+1

Tệp là tệp web.xml chứ không phải tệp xhtml. –

+0

Điều này không hoạt động hoặc tôi. – cmcginty

46

Tôi ghét điều đó cảnh báo quá. Đặc biệt vì nó xuất hiện trong các tệp XML mà bạn chưa viết nhưng xuất hiện trong dự án của bạn vì bất kỳ lý do gì (nếu bạn sử dụng MAVEN đó là địa ngục).

Với Eclipse 3.5+, bạn có thể dễ dàng xóa quy tắc xác thực này. Đi đến Preferences -> XML -> XML FILES -> Validation và chọn "ignore".

Bạn cũng có thể phải thực hiện Dự án -> Làm sạch để cảnh báo xác thực biến mất.

alt text

+0

Tôi sử dụng Maven rộng rãi và không nhận được lỗi này trên các tệp Maven trừ khi chúng được đặt trong thư mục đích. Trong trường hợp đó, tốt hơn là thêm quy tắc để vô hiệu xác thực trong thư mục đích hơn là bỏ qua lỗi. – HDave

+5

Điều này không khắc phục được sự cố, chỉ cần ẩn dấu hiệu. –

+3

Tôi sẽ KHÔNG làm điều này ** Tùy chọn | XML | Tệp XML | Xác thực ** trong Eclipse vì điều này chỉ che giấu/giấu lỗi, nó không _solve_ lỗi. Nếu bạn chỉ sử dụng Eclipse để xây dựng các ứng dụng Android, thì "giải pháp" này là chấp nhận được. Nhưng nếu bạn sử dụng Eclipse để xây dựng các dự án Java khác - JSF, vv - nó sẽ phá vỡ các dự án này nếu việc xác thực XML bị "tắt". Vì vậy hãy cẩn thận. Giải pháp thực sự là dành cho Oracle, Google và IBM để cập nhật phần mềm của họ với các DTD và lược đồ được cập nhật. – ChuongPham

8

Xóa cache cho các tập tin xác nhận lưu trữ.

Cửa sổ> Tùy chọn> Chung> Kết nối mạng> Bộ nhớ cache sau đó xóa tất cả. Bây giờ hãy xác thực tệp và xem có xóa mọi thứ không.

Điều này đã khiến tôi hài lòng và xóa bộ nhớ cache để xác thực là cách duy nhất để làm cho nó hoạt động bình thường trở lại. Lời khuyên cho việc xóa bộ nhớ cache bẩn đã được tìm thấy here.

+0

Điều này làm việc cho tôi. Có vẻ như tại một số thời điểm, Eclipse của tôi đã lưu trữ một bản sao không có thật của http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd đã khiến tất cả các tệp web.xml của tôi không thể xác thực. –

+0

Điều này cũng làm việc với tôi khi tệp Spring bean của tôi bắt đầu ném lỗi này. – HDave

2

Nếu bạn có thông báo lỗi giống nhau (bỏ lỡ) vì Trình soạn thảo XML của bạn không tìm thấy tệp XSD, bạn có thể thêm mục nhập danh mục.

Bạn chọn URL được chỉ định cho các lược đồ, cho một tuyên bố như

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

URL của file schema (http://java.sun.com/xml/ns/j2ee/web-app_2_5 .xsd) được chỉ định cho không gian tên http://java.sun.com/xml/ns/j2ee. Bây giờ bạn có thể chuyển hướng vị trí của tập tin với các cửa hàng không gian làm việc trong Eclipse:

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

Sử dụng

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

Và sau đó bạn có thể sử dụng file chooser chọn thực sự là một tập tin XSD trên hệ thống tập tin hoặc không gian làm việc.

0

Vấn đề là hai lần:

  1. tàu với một bộ nhớ cache của rất nhiều nổi tiếng của XSD Eclipse. Không gian tên và/hoặc vị trí bạn cung cấp không khớp với bất kỳ tên nào trong số này.
  2. Vì vậy, Eclipse cố gắng tìm kiếm XSD trên internet trên URI được cung cấp (có thể chỉ hoạt động). Thật không may nó xuất hiện sau khi Oracle sửa đổi java.sun.com cơ chế này chỉ lần trong Eclipse (dường như máy chủ chuyển hướng đến trang chủ thay vì chỉ đơn giản nói "không tồn tại, xin lỗi").

Khi bạn sửa lại các giá trị chính xác cho Java EE 5, mục nhập trong bộ nhớ cache sẽ được tìm thấy và Eclipse sẽ vui vẻ.

0

bạn cũng có thể xem câu trả lời của tôi for similar question on.

Về cơ bản, chỉ cần viết xml của bạn cho phù hợp với quy tắc cần

Các vấn đề liên quan