2016-07-28 9 views
1

Ich habe mit den Restful Webservices von Jersey in Kombination mit dem Maven Jetty Plugin bei meinem vorherigen Job gearbeitet. Aber jetzt für ein persönliches Projekt fange ich von vorne an und ich kann nicht scheinen, sogar die grundlegende Version zu gehen. Ich habe versucht, ein paar Tutorials zu folgen, aber sie sind entweder alt oder außer Thema.basic Jersey webservice mit maven jetty plugin

Das jüngste Beispiel war ich versucht: jersey 2 + spring 4 + jetty-maven-plugin

So sind die unter configs machen den Stecker in Sicht, aber keine Angelegenheit, die url ich versuche, es mir

Poms 404 gibt:

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <packaging>war</packaging> 
    <groupId>foo</groupId> 
    <artifactId>bar</artifactId> 
    <version>1.0-SNAPSHOT</version> 

    <properties> 
     <jetty.version>9.3.11.v20160721</jetty.version> 
     <jersey.version>2.23.1</jersey.version> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>org.glassfish.jersey.containers</groupId> 
      <artifactId>jersey-container-servlet</artifactId> 
      <version>${jersey.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>org.glassfish.jersey.core</groupId> 
      <artifactId>jersey-server</artifactId> 
      <version>${jersey.version}</version> 
     </dependency> 

    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.eclipse.jetty</groupId> 
       <artifactId>jetty-maven-plugin</artifactId> 
       <version>${jetty.version}</version> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

web.xml

<?xml version="1.0" encoding="ISO-8859-1"?> 
<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_3_0.xsd" id="WebApp_ID" version="3.0"> 
    <display-name>test</display-name> 
    <servlet> 
     <servlet-name>Jersey REST Service</servlet-name> 
     <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
     <init-param> 
      <param-name>javax.ws.rs.Application</param-name> 
      <param-value>com.foo.bar</param-value> 
     </init-param> 
     <!--<load-on-startup>1</load-on-startup>--> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>Jersey REST Service</servlet-name> 
     <url-pattern>/*</url-pattern> 
    </servlet-mapping> 

</web-app> 

resourceConfiguration.java

package com.foo.bar; 

import org.glassfish.jersey.server.ResourceConfig; 

public class ResourceConfiguration extends ResourceConfig { 
    public ResourceConfiguration() { 
     register(entrypoint.class); 
    } 

} 

und meine Dienstklasse

package com.foo.bar; 

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

public class entrypoint { 
    @GET 
    @Path("/test") 
    @Produces(MediaType.TEXT_PLAIN) 
    public String test() { 
     return "it works"; 
    } 

    @GET 
    @Path("/") 
    @Produces(MediaType.TEXT_HTML) 
    public String test2() { 
     return "it works"; 
    } 

} 

Nichts Besonderes Recht i so fühlen sollte aus dem Kasten heraus arbeiten. Der Jetty-Server startet, aber wie ich sagte, bekomme ich 404 Seiten bei jeder URL-Permutation, die ich versuche.

Vielen Dank im Voraus für alle und alle Eingaben.

Antwort

2

Wenige Änderungen müssen vorgenommen werden, damit es funktioniert. Bitte folgen Sie den folgenden Schritten.

Schritt 1: ändern Sie Ihre web.xml wie unten mit der POJO-Zuordnung und der Resourse-Konfigurationsklasse anstelle des Paketnamens.

<servlet> 
     <servlet-name>Jersey REST Service</servlet-name> 
     <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
     <init-param> 
      <param-name>javax.ws.rs.Application</param-name> 
      <param-value>bar.com.ravi.ResourceConfiguration</param-value> 
     </init-param> 
     <init-param> 
      <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name> 
      <param-value>true</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>Jersey REST Service</servlet-name> 
     <url-pattern>/*</url-pattern> 
    </servlet-mapping> 

Schritt 2: Ihre Resource Klasse wie unten mit Paketinformationen ändern.

public class ResourceConfiguration extends ResourceConfig { 
    public ResourceConfiguration() { 
     packages("bar.com.ravi"); 
     register(Entrypoint.class); 
    } 

} 

Schritt 3: Ihre Ändern Entrypoint-Klasse mit Klassenstufe @Path Annotation.

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

    @Path("/hi") 
    public class Entrypoint { 
     @GET 
     @Path("/test") 
     @Produces(MediaType.TEXT_PLAIN) 
     public String test() { 
      return "it works"; 
     } 

     @GET 
     @Path("/") 
     @Produces(MediaType.TEXT_HTML) 
     public String test2() { 
      return "it works"; 
     } 

    } 

Schritt 4: Ihre POM ändern.XML im Build-Tag wie unten.

<build> 
    <finalName>bar</finalName> 
     <plugins> 
      <plugin> 
       <groupId>org.eclipse.jetty</groupId> 
       <artifactId>jetty-maven-plugin</artifactId> 
       <version>9.2.11.v20150529</version> 
       <configuration> 
        <scanIntervalSeconds>10</scanIntervalSeconds> 
        <webApp> 
         <contextPath>/bar</contextPath> 
        </webApp> 
        <httpConnector> 
         <port>8888</port> 
        </httpConnector> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 

Schritt 5: Lauf unter Befehl Ihren Befehl promt.

mvn jetty:run 

Schritt 6: traf den Browser mit folgenden URL

http://localhost:8888/bar/hi/test 
+0

Vielen Dank. Für die Aufzeichnung waren die Änderungen, die es reparierten, wie folgt: Schritt 1: war ein typeo, mein schlechtes Schritt 2: das Paket hinzufügen. Schritt 3: Hinzufügen der Klassenstufe @Path Schritt 4: Hinzufügen des Kontextpfads. Alle anderen beeinflussten das Ergebnis nicht, aber nichts davon ließ das Ganze bröckeln. Lustiger Teil ist, dass ich alle diese an einem Punkt oder anderem gerade nicht alle zusammen versucht habe. * Bearbeiten Sie die Enter-Taste ist eine lustige Sache – Rhed

0

Die offensichtliche Sache, die auf Ihre Konfiguration falsch ist, ist

<init-param> 
     <param-name>javax.ws.rs.Application</param-name> 
     <param-value>com.foo.bar</param-value> 
    </init-param> 

Ich glaube, das

<init-param> 
     <param-name>javax.ws.rs.Application</param-name> 
     <param-value>com.foo.bar.ResourceConfiguration</param-value> 
    </init-param> 

dann das Paket hinzufügen sein müssen, wo Ihre Ressourcenklassen zur Zeit sitzen.

<init-param> 
     <param-name>com.sun.jersey.config.property.packages</param-name> 
     <param-value>com.foo.bar</param-value> 
    </init-param> 
+0

Platz @Path Anmerkung zu Ihrer Entry Klasse. z.B. @Path ("bar") dann triff localhost: 8080/bar/test –

+0

Danke das war auch ein teil des was falsch war, checke meinen kommentar bei der angenommenen antwort. – Rhed

+0

Cool! Ich bin froh zu wissen, dass es jetzt funktioniert. –

0

Try this:

 <plugin> 
      <groupId>org.eclipse.jetty</groupId> 
      <artifactId>jetty-maven-plugin</artifactId> 
      <version>${jetty.version}</version> 
      <configuration> 
       <webApp> 
        <contextPath>/bar</contextPath> 
       </webApp> 
      </configuration> 
     </plugin> 

und Ihren Browser http://localhost:8080/bar/test zum Beispiel lenken.

+0

Dies war Teil der Lösung, siehe meinen Kommentar zur angenommenen Antwort. Danke für die Hilfe – Rhed

Verwandte Themen