2014-03-19 6 views
6

Zunächst einmal bin ich neu in dieser Umgebung. Ich habe Java vorher entwickelt, aber nicht für einen Anwendungsserver. Ich habe noch nie zuvor mit JBoss oder WildFly gearbeitet.Einfache REST API mit WildFly 8

Ich konnte den WildFly-Server einrichten und ausführen und unter 127.0.0.1:9990 darauf zugreifen. Wenn ich meine .war-Datei bereitstellen, reagiert der Server nicht und ich kann nicht auf die URLs zugreifen.

Der WildFly-Server gibt an, dass meine Bereitstellung erfolgreich war und aktiv ist, dann versuche ich auf 127.0.0.1:8080/RECAPP-API/rest/message/test zuzugreifen, und ich bekomme 404 (Seite nicht gefunden Fehler).

ich Maven bin mit, so zuerst, mein pom.xml:

<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> 
    <groupId>com.test.recapp.rest</groupId> 
    <artifactId>RECAPP-API</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>war</packaging> 

    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>3.1</version> 
     <configuration> 
      <source>1.7</source> 
      <target>1.7</target> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
    <dependencies> 
    <dependency> 
     <groupId>org.jboss.resteasy</groupId> 
     <artifactId>resteasy-jaxrs</artifactId> 
     <version>3.0.6.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.jboss.resteasy</groupId> 
     <artifactId>resteasy-jackson-provider</artifactId> 
     <version>3.0.6.Final</version> 
    </dependency> 
    </dependencies> 
</project> 

Mein JSONService.java:

import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.PathParam; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.Response; 

@Path("/message") 
public class JSONService { 

    @GET 
    @Path("/{param}") 
    @Produces("application/json") 
    public Response printMessage(@PathParam("param") String msg) { 
     String result = "Restful example: " + msg; 
     return Response.status(200).entity(result).build(); 
    } 

} 

Und schließlich meine 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_3_0.xsd" 
    id="WebApp_ID" version="3.0"> 
    <display-name>RECAPP-API</display-name> 

    <context-param> 
    <param-name>resteasy.scan</param-name> 
    <param-value>true</param-value> 
    </context-param> 

    <context-param> 
    <param-name>resteasy.servlet.mapping.prefix</param-name> 
    <param-value>/rest</param-value> 
    </context-param> 

    <listener> 
    <listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class> 
    </listener> 

    <servlet> 
    <servlet-name>resteasy-servlet</servlet-name> 
    <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class> 
    </servlet> 

    <servlet-mapping> 
    <servlet-name>resteasy-servlet</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
    </servlet-mapping> 


</web-app> 

Vielen Dank für Ihre Hilfe .

+2

Die erste Rest-Anwendung könnte ein wenig verwirrend am Anfang sein. Es scheint, dass Sie den JaxRsActivator vermissen. Sie benötigen dies, um einen gültigen Kontext für die Anwendung zu erstellen. '@ApplicationPath ("/rest ") öffentliche Klasse JaxRsActivator erweitert Anwendung { /* Klassenbereich absichtlich leer gelassen */ } Auch das TicketMonster-Lernprogramm können Sie sich ansehen: http://www.jboss.org/ jdf/examples/ticket-monster/tutorial/Einführung/ – Goot

+0

Schade, dass das Tutorial nicht eine einzige Erwähnung gibt, was Sie versuchen zu erklären, obwohl; Es hängt von der Code-Generierung ab und erklärt nicht wirklich viel über die Grundlagen. – Gimby

+0

@Goot - warum macht WildFly das? Ich kenne ältere Versionen von JBoss, Sie müssen nur web.xml konfigurieren. Auf meiner Maschine hat das nicht funktioniert, also ging ich mit dem, was Sie gesagt haben, zu tun und es hat funktioniert. –

Antwort

1

Ihr Beispiel sieht korrekt aus.

Es hilft Ihnen, Ihren jboss-Server neu zu starten und Ihre WAR neu zu implementieren, um potentielles Caching auszuschließen.

Auch Ihre web.xml könnte verkürzt werden, um javax.ws.rs.core.Application zu verwenden, wie unten gezeigt.

<?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_3_0.xsd" 
     id="WebApp_ID" version="3.0"> 
    <display-name>RECAPP-API</display-name> 

    <servlet-mapping> 
     <servlet-name>javax.ws.rs.core.Application</servlet-name> 
     <url-pattern>/rest/*</url-pattern> 
    </servlet-mapping> 
</web-app> 
3

In einem Wildfly Quickstart scheinen sie mit einem JaxRsActivator Klasse zu bevorzugen: Fügen Sie diese Ihren REST-Service zu konfigurieren.

Wie die Kommentare angeben, handelt es sich hierbei um einen Nicht-XML-Ansatz.

5

Der beste Weg zum schnellen Start ist diese Abhängigkeit zu verwenden.

<dependency> 
    <groupId>javax</groupId> 
    <artifactId>javaee-api</artifactId> 
    <version>7.0</version> 
    <scope>provided</scope> 
</dependency> 

Und eine Klasse hinzufügen, die Anwendungsklasse

@ApplicationPath("rest") 
public class ConfigApp extends Application { 
    public ConfigApp(){ 
    } 
} 

Das ist es erweitert. Keine web.xml ändert sich (web.xml ist nicht nur erforderlich).

und Zugriff auf Ihre Ruhe Endpunkt mit host:port/<warname>/rest/<endpoint path>