Jersey2 Client werfen javax.ws.rs.NotFoundException
Ich geschrieben habe, ein Beispiel REST-service mit Jersey2.
Hier ist meine web.xml:
<web-app>
<display-name>jerseysample</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.adaequare.rest.config.JerseyResourceInitializer</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>
Hier ist mein Beispiel-Klasse:
package com.adaequare.resource;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("/hello")
public class Hello {
@GET
@Produces(MediaType.TEXT_HTML)
public String sayHtmlHello(){
return "<html><title>Hello Jersey</title><body><h1>Hello Jersey</h1></body></html>";
}
@GET
@Produces(MediaType.TEXT_PLAIN)
public String sayPlainTextHello() {
return "Hello Jersey";
}
//This method is called if XML is request
@GET
@Produces(MediaType.TEXT_XML)
public String sayXMLHello() {
return "<?xml version=\"1.0\"?>" + "<hello> Hello Jersey" + "</hello>";
}
}
Habe ich bereitgestellt, um Tomcat und bin in der Lage, den Zugriff auf die folgende URL:
http://localhost:8080/jerseysample/rest/hello
Ich habe versucht, das schreiben eines unit-test so:
package com.adaequare.client;
public class MyResourceTest {
public static final URI BASE_URI = UriBuilder.fromUri("http://localhost").port(8080).build();
private HttpServer server;
private WebTarget target;
@Before
public void setUp() throws Exception {
ResourceConfig rc = new ResourceConfig(Hello.class);
server = GrizzlyHttpServerFactory.createHttpServer(BASE_URI, rc);
server.start();
Client c = ClientBuilder.newClient();
target = c.target(BASE_URI);
}
@After
public void tearDown() throws Exception {
server.shutdownNow();
}
@Test
public void testGetIt() {
String responseMsg = target.path("jerseysample").path("rest").path("hello").request().get(String.class);
System.out.println("I am here");
assertEquals("Got it!", responseMsg);
}
}
Dieser Klasse auch wirft die Ausnahme.
Auf die Ausführung dieser Klasse, ich bin immer folgende exception:
Exception in thread "main" javax.ws.rs.NotFoundException: HTTP 404 Not Found
at org.glassfish.jersey.client.JerseyInvocation.convertToException(JerseyInvocation.java:917)
at org.glassfish.jersey.client.JerseyInvocation.translate(JerseyInvocation.java:770)
at org.glassfish.jersey.client.JerseyInvocation.access$500(JerseyInvocation.java:90)
at org.glassfish.jersey.client.JerseyInvocation$2.call(JerseyInvocation.java:671)
at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
at org.glassfish.jersey.internal.Errors.process(Errors.java:228)
at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:423)
at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:667)
at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:396)
at org.glassfish.jersey.client.JerseyInvocation$Builder.get(JerseyInvocation.java:296)
at com.adaequare.client.TestClient.main(TestClient.java:14)
Ich bin sicher, ich bin fehlen einige Konfigurations-Zeug. Ich habe durchgestöbert um zu sehen, die Ursache des Problems, aber ohne Erfolg. Kann jemand bitte lassen Sie mich wissen, wenn ich bin fehlt etwas?
InformationsquelleAutor Prasanth | 2014-03-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihren Dienst zugeordnet ist (und du sagst Sie darauf zugreifen können):
http://localhost:8080/jerseysample/rest/hello
aber mit Ihren Kunden, die Sie anrufenhttp://localhost:8080/restserver/rest/hello
die andere URL. Was ist die überraschung?Versuchen
Als für den zweiten test, versuchen Sie den Aufruf getUri() auf Ihrem WebTarget um zu sehen, welche URL, die Sie eigentlich aufrufen, es sollte Ihnen helfen, zu sehen, wo ist das problem.
Nach dem update:
Sowie erste Sache ist, die Sie noch nicht angegeben, (in Bezug auf die content-negotiation), welche Inhalte Ihre Kunden akzeptiert (Sie Tat dies in Ihrer vorherigen Beispiel, die Sie gelöscht haben). Aber das sollte kein problem sein, da in diesem Fall der server sollte senden Sie keine der durchgeführten bleiben, da nicht durch die Angabe erklären Sie sich, unterstützen Sie alle Art von Antworten. Aber das problem ist wahrscheinlich putting
String.class
inget()
Methode. Sollte es gehen, eine Entität, die Sie wollen Jersey-Transformation der Antwort in. Wenn Sie möchten, bekommen String würde ich etwas wie das hier tun:Aber man kann nicht sicher sagen welche der drei Methode genannt wird, da es auf dem gleichen WEG sind, so sollten Sie auch den Inhalt angeben, indem Sie es zu
request
Methode.Geändert die Frage entsprechend
Und ich antwortete.
Ich versuchte den Gegner.Pfad("jerseysample").Pfad("rest").path("hello").request().get() und es ist immer noch das gleiche. Auch habe ich versucht den Gegner.Pfad("jerseysample").Pfad("rest").path("hello").request(MediaType.TEXT_HTML).get(). In beiden Fällen, hier ist, was ich habe, wenn ich gedruckt die Antwort: 'InboundJaxrsResponse{ClientResponse{method=GET uri=localhost:8080/jerseysample/rest/hello, status=404, Grund=Nicht Gefunden}}'
Aber eine änderung ist bisher, wenn ich Tat, Anfrage().get(String.class), junit versagt. Jetzt, nach dem entfernen, junit ist nicht zu Versagen. Aber immer noch aus dem response-element, ich kann sehen, es ist ein 404
InformationsquelleAutor TondaCZE
Hoffe, dies hilft jemand, wer vor dem gleichen problem. In meinem Fall, habe ich meinen RESTful web-service-Projekt mit der Netbeans-Assistent. Aus irgendeinem Grund, ich wusste nicht warum, er verpasste das ApplicationConfig.java Klasse, die enthält die annotation @javax.ws.rs.ApplicationPath("webresources"). Ich weiß nicht, warum, wenn ich generiert die client-es zeigte mir den richtigen Weg, den ich erwartet hatte.
So, die Lösung für mich war die Kopie einer anderen ApplicationConfig.java aus anderen Projekt, und fügen Sie meine Fassade zu den Ressourcen.
InformationsquelleAutor jmoran
wenn du nicht config web.xml nachschlagen die restlichen Klassen, die Sie verwenden müssen
@ApplicationPath
zu zeigen die Klassen, die halten den Rest Ressourcen.InformationsquelleAutor Alisson Gomes
Es ist ein Fehler in web.xml
versuchen Sie bitte unten
InformationsquelleAutor kiran