2013-07-17 31 views
25

Tôi đã đọc qua một số bài đăng, nhưng dường như không thể giải quyết được vấn đề của tôi. Bạn cũng sẽ thấy hàng tấn bài đăng rất giống với bài đăng này, thậm chí cả cùng một hướng dẫn. Ngay cả sau họ, tôi dường như không thể nhận được câu trả lời.Dịch vụ Web REST REST, Tomcat, Eclipse và 404 của

Về cơ bản, tôi đang cố gắng để làm theo các hướng dẫn đơn giản tại địa chỉ: http://www.vogella.com/articles/REST/

Tôi đã thực hiện một vài thay đổi để làm cho nó tương thích với Jersey 2.x

Tôi đang sử dụng: Eclipse Tomcat 6 (Triển khai/Run as trong Eclipse) jaxrs-ri-2.0 tôi đã kích hoạt JAX-RS Facet trong Eclipse

Tất cả mọi thứ được xây dựng tốt Tomcat khởi động tốt trong Eclipse Tôi có thể lấy đến một nội dung trang tĩnh thông qua:

http://localhost:8080/RestTEST2/index.html

Tuy nhiên, khi tôi cố gắng truy cập vào dịch vụ của tôi qua:

http://localhost:8080/RestTEST2/jaxrs/hello

tôi nhận được một 404 với "Thông điệp không tìm thấy" và "Tài nguyên được yêu cầu (Không tìm thấy) không khả dụng".

Đây là web.xml của tôi mà nằm ở /WebContent/WEB-INF/web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> 
<display-name>TestREST2</display-name> 
<welcome-file-list> 
    <welcome-file>index.html</welcome-file> 
</welcome-file-list> 
<servlet> 
    <description>JAX-RS Tools Generated - Do not modify</description> 
    <servlet-name>JAX-RS Servlet</servlet-name> 
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
    <init-param> 
     <param-name>com.sun.jersey.config.property.packages</param-name> 
     <param-value>TestREST</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>JAX-RS Servlet</servlet-name> 
     <url-pattern>/jaxrs/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

Dưới đây là lớp Java của tôi:

package TestREST; 

import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.MediaType; 

// Plain old Java Object it does not extend as class or implements 
// an interface 

// The class registers its methods for the HTTP GET request using the @GET annotation. 
// Using the @Produces annotation, it defines that it can deliver several MIME types, 
// text, XML and HTML. 

// The browser requests per default the HTML MIME type. 

//Sets the path to base URL + /hello 
@Path("/hello") 
public class Hello { 

    // This method is called if TEXT_PLAIN is request 
    @GET 
    @Produces(MediaType.TEXT_PLAIN) 
    public String sayPlainTextHello() { 
    return "Hello Jersey"; 
    } 

    // This method is called if XML is request 
    @GET 
    @Produces(MediaType.TEXT_XML) 
    public String sayXMLHello() { 
    return "<?xml version=\"1.0\"?>" + "<hello> Hello Jersey" + "</hello>"; 
    } 

    // This method is called if HTML is request 
    @GET 
    @Produces(MediaType.TEXT_HTML) 
    public String sayHtmlHello() { 
    return "<html> " + "<title>" + "Hello Jersey" + "</title>" 
     + "<body><h1>" + "Hello Jersey" + "</body></h1>" + "</html> "; 
    } 
} 

Tôi cũng có một JAX- Thư viện người dùng RS được định cấu hình và tham chiếu bao gồm tất cả các lọ JAX-RS.

Suy nghĩ về điều gì sẽ khiến dịch vụ web không được tìm thấy?

Trả lời

25

Jersey 2.0 không nhận dạng init-param với tên com.sun.jersey.config.property.packages (web.xml). Hãy thử đổi thành jersey.config.server.provider.packages như được mô tả trong ServerProperties.PROVIDER_PACKAGES.

+2

ảnh vui nhộn. Tôi đã chiến đấu này hàng giờ liền. Đây là giải pháp cho vấn đề của tôi. Tôi cũng đã có tên gói của tôi mistyped trong xml như testREST, khi nó cần phải có TestREST, nhưng đây là gốc của vấn đề. Cảm ơn một tấn. –

+0

Từ bình luận của bạn, tôi đã học cách thay đổi pkg của nhà cung cấp thành pkg của riêng tôi. Cảm ơn –

+0

Tôi đang cố gắng triển khai cùng một dự án ..... nhưng lỗi tương tự vẫn còn .. Tôi đã thử tất cả các giải pháp được cung cấp ở đây cộng với cố gắng thay đổi vị trí của máy chủ tomcat cũng ... – spt025

4

Cảm ơn rất nhiều .. tôi cũng đã chiến đấu vì điều đó.

Sự kết hợp này làm việc cho tôi: Tomcat 7.0.55 Eclipse Luna Java 1.6 Jersey 1,7

web.xml:

<servlet> 
    <servlet-name>Jersey REST Service</servlet-name> 
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 
    <init-param> 
     <param-name>jersey.config.server.provider.packages</param-name> 
     <param-value>com.trgr.cobalt.cmdb.jersey.resource;com.trgr.cobalt.cmdb.jersey.beans;com.trgr.cobalt.cmdb.elasticity</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>Jersey REST Service</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
    </servlet-mapping> 
+0

Có vẻ như đây không phải là nhận xét, không phải là câu trả lời. Vui lòng đợi cho đến khi bạn có đủ đại diện để nhận xét thay vì nhận xét trong phần trả lời. – Chris

0

Đơn giản chỉ cần bằng cách thay đổi cấu hình của Apache Tomcat v7.0 trong khi tạo Dynamic Web Project, để bao gồm REST, tôi đã giải quyết được vấn đề của mình. Nó không được kích hoạt theo mặc định.

+2

Bạn nên chỉnh sửa và thêm mã đã giải quyết được sự cố của mình – Med

3

Tôi muốn thêm một câu trả lời vào bài đăng này.Tôi đã gặp khó khăn với cùng một vấn đề trong hai ngày và không thể tìm thấy giải pháp. Tôi đã thử tất cả các giải pháp có thể được cung cấp ở đây nhưng sau đó tôi nhận ra rằng máy chủ đã đưa ra lỗi của

org.glassfish.jersey.servlet.ServletContainer ClassNotFoundException 

Liên kết này câu trả lời cho các giải pháp nếu ai đó đang mắc kẹt như tôi .. org.glassfish.jersey.servlet.ServletContainer ClassNotFoundException

Thực tế câu trả lời đầu tiên được đưa ra trong bài đăng này đề xuất giải pháp cho gói áo 2.x và nếu bạn đang sử dụng áo 1.x thì nó sẽ tiếp tục đưa ra lỗi.

Vui lòng tham khảo liên kết được đưa ra trong câu trả lời để tham khảo thêm

0

Gần đây tôi thấy mình bị kẹt trong vấn đề này. Tôi đã có nó được giải quyết bằng cách làm theo hai điểm này là giải pháp:

  1. Bằng cách làm cho src/main/java như thư mục nguồn, và giữ cấu trúc dự án như hình dưới đây:

enter image description here

  1. Thay đổi com.sun.jersey.config.property.packages-jersey.config.server.provider.packages trong web.xml
Các vấn đề liên quan