2013-04-26 16 views
7

Podążam za tutorialem dotyczącym usługi, aby utworzyć usługę REst za pomocą usługi Jersey.Próba utworzenia pierwszej usługi za pomocą usługi Jersey

Czasami nie w pełni zrozumieć, co autor samouczka razie, ale to są kroki, które śledzę tej pory:

1)stworzył dynamiczny projekt WWW i nazwał ją: de.vogella.jersey.first

2)zainstalowane zależności Maven Eclipse

3)Stary mojego projektu do projektu Maven (czyli utworzony plik pom.xml)

4)Dodany niezbędne zależności w pom.xml tak, że mogę używać koszulkę bez konieczności ręcznego dodaj pliki jar. Dodałem następujące xml:

<dependencies> 
    <dependency> 
     <groupId>com.sun.jersey</groupId> 
     <artifactId>jersey-server</artifactId> 
     <version>1.17.1</version> 
    </dependency> 
</dependencies> 

5)Autor proponuje utworzenie klasy Java i daje pewien kod. Mogę tylko założyć, że chce, abyśmy utworzyli nowy pakiet w folderze src, nazwijmy go de.vogella.jersey.first, a następnie utwórz klasę java i nadaj jej nazwę Hello i umieść tam kod. To jest to co zrobiłem.

6)Potem sugeruje, aby otworzyć plik web.xml. Nie jest to jednak taki plik w projekcie. Więc idę do przodu i stwórz taki plik na ścieżce WebContent/WEB-INF/lib. Umieszczam kod, który sugeruje.

7)Następny krok, którego nie rozumiem najbardziej. Opowiada o web.xml że po prostu dodaje a dokładniej stwierdza:

„Parametr«com.sun.jersey.config.property.package»określa, w którym pakiet będzie wyglądać koszulka dla klas usług internetowych. ta właściwość musi być skierowany do klas zasobów. "

8)Ostatnim krokiem jest otwarty URL http://localhost:8080/de.vogella.jersey.first/rest/hello w przeglądarce. Jednak ja dostać HTTP Status 404 - /de.vogella.jersey.first/rest/hello


z tym, co będę zastąpić dokładnie com.sun.jersey.config.property.package?

Czy kroki, które podążyłem do teraz, są poprawne, czy źle zinterpretowałem coś?

+1

plik web.xml idzie w 'WebContent \ WEB-INF' * nie * w 'lib'. – Qwerky

Odpowiedz

11

Właściwość wystarczy ustawić jako pakiet zawierający klasy usług WWW. W samouczku jest to de.vogella.jersey.first i widać, że klasa Hello jest zadeklarowana w tym pakiecie.

Innymi słowy, po wdrożeniu aplikacji, Jersey będzie szukał klas usług internetowych w pakiecie de.vogella.jersey.first, aw tym przypadku znajdzie klasa Hello zadeklarowane z javax.ws.rs.Path adnotacji i stworzyć serwis internetowy końcowego słuchania pod adresem URL, który został zadeklarowany pod numerem @Path.

Jednak nigdy nie ustawiłem czegoś takiego dla projektów w Jersey. Właśnie umieściłem moje klasy usług internetowych w folderze src, a Jersey rozpoznaje je bez względu na to, w którym opakowaniu umieściłem je w środku. Jest to minimalna konfiguracja, że ​​mam z projektów Jersey w web.xml:

<servlet> 
    <description>JAX-RS Tools Generated - Do not modify</description> 
    <servlet-name>JAX-RS Servlet</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>com.your.webservice.classes</param-value> 
    </init-param> 
    --> 

    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>JAX-RS Servlet</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 

Także jeśli nie lubisz projektów Maven, po prostu stworzyć prosty Dynamiczny Project Web i skopiuj Jersey JARs do WebContent/WEB-INF/lib.

Ponadto, jak Qwerky zasugerował, web.xml musi być powinien zostać skopiowany do WebContent/WEB-INF/libWebContent/WEB-INF/ i .jar plików.

Poza tym opisana procedura wygląda dobrze!

+0

Cóż, zrobiłem ręcznie pliki Jersey Jar i nie korzystałem z zależności Mavena. Właściwie to musiałem również dołączyć plik jersey-servlet.jar, który można znaleźć tutaj: http://search.maven.org/#search|ga|1|fc%3a%22com.sun.jersey.spi.container.servlet.ServletContainer% 22. Wymieniłem również com.sun.jersey.config.property.package z moim pakietem, w którym znajdują się moje klasy java. proszę zaktualizować swoją odpowiedź tymi informacjami, a ja to zaakceptuję. Również podany przez Ciebie xml zawiera błędy? Sądzę, że znaczniki mapowania serwletów powinny znajdować się wewnątrz znaczników serwletów? –

+0

@DonP Myślę, że dostarczone 'web.xml' jest w porządku. Spójrz na samouczek, rozdział "5.3. Zdefiniuj serwerowy serwer wysyłający serwlety: '' jest zdefiniowane po ''! –

9

Aby uzyskać więcej informacji, jeśli używasz Jersey 2 klasa ta została zastąpiona jersey.config.server.provider.packages więc konfiguracja zasobów byłoby jak:

<init-param> 
    <param-name>jersey.config.server.provider.packages</param-name> 
    <param-value>de.vogella.jersey.todo.resources</param-value> 
</init-param> 
+1

Byłem zdezorientowany, ponieważ w podanym web.xml autor użył właściwości 'jersey.config.server.provider.packages', podczas gdy w opisie mówi o' com.sun.jersey.config.property.packages'. Twoja odpowiedź wyjaśniła to .. –

+0

serdecznie zapraszamy! –

Powiązane problemy