Джерси Учебники от основ - PullRequest
3 голосов
/ 26 августа 2011

Я использую Джерси 1.8, и учебники, о которых я говорю, довольно старые.Ничего не работаетЯ имею в виду учебник, данный здесь

И получаю исключение класса не найден.В соответствии с руководством я создал свой класс Java, а также настроил свой web.xml.Это показывает мне исключение, и я не могу исправить это.Я хотел бы иметь полное руководство по внедрению в Джерси.И если что-то лучше, чем Джерси для реализации REST, пожалуйста, предложите.Я недавно начал с веб-сервисов на основе REST и был бы признателен, если бы вы могли подсказать мне, с чего начать (меня интересует только REST).Ниже приведен код, который я написал и скомпилировал с использованием eclipse.

Hello.java

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("/hello")
public class Hello {

    //This method prints the Plain Text
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String sayPlainTextHello()
    {
        return "Hello Jersey";
    }

    //This is the XML request output

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

    //This result is produced if HTML is requested

    @GET
    @Produces(MediaType.TEXT_HTML)
    public String sayHTMLHello()
    {
        return "<html> " + "<title>" + "Hello Jersey" + "</title>"
        + "<body><h1>" + "Hello Jersey" + "</body></h1>" + "</html> ";
    }

}

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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 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>RESTFullApp</display-name>
  <servlet>
  <servlet-name>JerseyRESTService</servlet-name>
  <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer;</servlet-class>
  <init-param>
  <param-name>com.sun.jersey.config.property.packages</param-name>
  <param-value>RESTFullApp</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
  <servlet-name>JerseyRESTService</servlet-name>
  <url-pattern>/rest/*</url-pattern>
  </servlet-mapping>
<!--  <welcome-file-list>-->
<!--    <welcome-file>index.html</welcome-file>-->
<!--    <welcome-file>index.htm</welcome-file>-->
<!--    <welcome-file>index.jsp</welcome-file>-->
<!--    <welcome-file>default.html</welcome-file>-->
<!--    <welcome-file>default.htm</welcome-file>-->
<!--    <welcome-file>default.jsp</welcome-file>-->
<!--  </welcome-file-list>-->
</web-app>

Нет, ошибка, которую я получаюпока я пытаюсь запустить это

exception 

javax.servlet.ServletException: Servlet.init() for servlet JerseyRESTService threw exception
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
    org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
    org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
    org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    java.lang.Thread.run(Unknown Source)


root cause 

com.sun.jersey.api.container.ContainerException: The ResourceConfig instance does not contain any root resource classes.
    com.sun.jersey.server.impl.application.RootResourceUriRules.<init>(RootResourceUriRules.java:99)
    com.sun.jersey.server.impl.application.WebApplicationImpl._initiate(WebApplicationImpl.java:1298)
    com.sun.jersey.server.impl.application.WebApplicationImpl.access$700(WebApplicationImpl.java:169)
    com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:775)
    com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:771)
    com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:193)
    com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:771)
    com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:766)
    com.sun.jersey.spi.container.servlet.ServletContainer.initiate(ServletContainer.java:488)
    com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.initiate(ServletContainer.java:318)
    com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:609)
    com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:210)
    com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:373)
    com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:556)
    javax.servlet.GenericServlet.init(GenericServlet.java:212)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
    org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
    org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
    org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    java.lang.Thread.run(Unknown Source)

Ответы [ 2 ]

11 голосов
/ 26 августа 2011

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

com.sun.jersey.api.container.ContainerException: экземпляр ResourceConfig не содержит никаких корневых классов ресурсов.

следующий параметр init неверен

<init-param>
   <param-name>com.sun.jersey.config.property.packages</param-name>
   <param-value>RESTFullApp</param-value>
</init-param>

Это должно относиться к пакету, содержащему услуги. Поместите ваш сервис в пакет и укажите это в значении параметра init. Джерси или нет, использование пакета по умолчанию - плохая практика.

Что касается учебников, почему бы вам просто не прочитать собственную документацию Джерси? Jersey Wiki и Руководство пользователя Jersey .

5 голосов
/ 26 августа 2011

Попробуйте Руководство пользователя Джерси . В нем всегда будет самый актуальный учебник. Что касается ошибки, ваш web.xml объявляет, что ваши классы ресурсов будут находиться в пакете с именем «RESTFullApp». 1) Это своеобразное имя пакета, и 2) я не вижу объявления пакета в вашем классе.

Редактировать: В качестве рабочего примера вы можете проверить мой пример проекта на github . Если у вас есть git и maven, вы можете клонировать его и запустить с помощью

git clone git://github.com/zzantozz/testbed.git tmp
cd tmp
mvn jetty:run -pl basic-jersey

Тогда посетите http://localhost:8080/basic-jersey/rest/test

...