2016-08-03 14 views
0

Ich aktualisiere meine App auf JBoss 7.1.1 und verwende jetzt RestEasy. Ich habe Probleme, dass RestEasy funktioniert. Ich erhalte den Fehler HTTP Status 404 - Ressource für relative nicht gefunden. Ich glaube, das bedeutet, dass es den richtigen Endpunkt nicht finden kann. Mein Verdacht ist, dass es ein Problem beim Scannen und Registrieren der Dienste gibt. Ich könnte mich allerdings irren. Hinweis: Ich verwende Maven nichtJBoss 7 RestEasy ... Dienste werden nicht registriert?

Hier ist der Teil meiner web.xml, die mit Resteasy betrifft:

<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-name> 
    <servlet-class> 
     org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher 
    </servlet-class> 
</servlet> 

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

Hier wird eine Probe Ressource ich verwende:

import javax.ws.rs.POST; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 

@Path("/hello") 
public class HelloResource { 

@POST 
@Produces("text/plain") 
public String helloResource() { 
    return "Hello!"; 
} 
} 

Die url Ich habe versucht ist: http://localhost:8080/[project-name]/rest/hello

Ich denke, das ist alles, was ich für den Anruf verwende. Wenn zusätzliche Informationen benötigt werden, um meine Frage zu beantworten, zögern Sie nicht zu fragen. Vielen Dank im Voraus für Ihre Hilfe!

P.S. - Wie müssen die Dateien im WAR strukturiert sein?

[Updated web.xml]

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

    <context-param> 
    <param-name>resteasy.resources</param-name> 
    <param-value>com.elderscan.test.RestEasyExample</param-value> 
</context-param> 

<servlet> 
    <servlet-name>resteasy-servlet</servlet-name> 
    <servlet-class> 
     org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher 
    </servlet-class> 
    <init-param> 
     <param-name>javax.ws.rs.Application</param-name> 
     <param-value>com.elderscan.test.MyApplication</param-value> 
    </init-param> 
</servlet> 


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

So ermöglicht diese mir erfolgreich, um einen Anruf zu RestEasyExample zu machen, aber ich kann nicht Anrufe an eine andere andere Rest Dienstleistungen machen, die ich natürlich tun müssen. Außerdem ist diese Lösung, alle meine Dienste zu xml hinzuzufügen, nicht ideal, daher wäre ein anderer Weg bevorzugt.

Antwort

1

diese Ended up zu lösen. Der Schlüssel war, aufzunehmen, dies zu, was ich schon hatte, wo jeder Singleton ein Rest-Service ist:

public class MyApplication extends Application { 
private Set<Object> singletons = new HashSet<Object>(); 

public MyApplication() { 
    singletons.add(new RestEasyExample()); 
    singletons.add(new RestEasyExample2()); 
} 

@Override 
public Set<Class<?>> getClasses() { 
    // TODO Auto-generated method stub 
    return null; 
} 
@Override 
public Set<Object> getSingletons() { 
    return singletons; 
} 
} 
0

Ich glaube, Sie über Ihren Verdacht richtig sind .. Versuchen Sie, diese zu Ihrem web.xml

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

Ich werde einige Updates zu meinem ursprünglichen Beitrag hinzufügen, da ich einige Änderungen an web.xml gemacht habe, aber Ich hatte zuvor das Snippet, das Sie dort zur Verfügung gestellt haben, und ich würde eine Warnung erhalten, dass der resteasy.scan ignoriert wurde (ich denke, dass es in JBoss 7 voreingestellt ist). Es schlägt dann bei der Bereitstellung fehl. [Später hinzugefügt] - Wenn ich dies auf meiner neuen web.xml versuche, stelle ich es einfach in Ordnung, aber ich bekomme einen http-Status von 500, und es gibt mir den Fehler java.lang.RuntimeException: Es konnte kein öffentlicher Konstruktor für die Klasse gefunden werden org.jboss.restasy.core.AsynchronousDispatche, für das die Bereitstellung fehlgeschlagen ist. –

Verwandte Themen