Wie man Versand-servlet-requests Jersey-Ressource-Methoden
Frage ich mich, ob es möglich ist, Sie zu Versand eine Anfrage von einem servlet auf ein Jersey (JAX-RS-Implementierung) resource-Klasse. Ich bin versucht, es zu tun, aber es scheint nicht zu funktionieren und nach meiner Anmeldung, die jersey Ressource wird nie erreicht.
Code-Beispiele weiter unten. Ist das, was ich versuche zu tun, unmöglich für einige Grund?
Bitte beachten Sie, das Trikot Ressource funktioniert einwandfrei, wenn ich direkt in einem web-browser über die Adressleiste.
Bitte beachten Sie auch, dass 'RequestDispatcher.forward()' funktioniert wie erwartet. Es ist nur 'include' nicht.
Das servlet
//The Jersey dispatcher url-filter is set to '/api/*'
String servletID = "/api/items";
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(servletID);
dispatcher.include(request, response);
Das Trikot Ressource
@GET @Path("/items")
@Produces ({MediaType.TEXT_XML})
public JAXBElement<Items> getItems(@PathParam("project") String project) throws IOException, JAXBException {
log.debug("reached getItems");
//Omitted code that returns 'Items' object wrapped in JAXBElement
}
Relevanten Teile von web.xml
<servlet>
<servlet-name>jerseyDispatcher</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>uk.co.web.api.resource</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>jerseyDispatcher</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
- Bitte geben Sie den code, erstellt die
dispatcher
. - Ich habe bearbeitet die Frage dieses jetzt
- Hast du zu einem Abschluss kommen, wie Sie zu erreichen ist mit Jersey?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist möglich, dass Sie die Anfrage weiterleitet.
Jedoch beachten, wenn Sie eine GET-Anforderung, und versuchen, uns auf eine POST-Ressource,
Sie wirft einen 405 Fehler.
Edit:
Lass mich verstehen, was Sie versuchen zu erreichen, wenn Sie benötigen, schreiben Inhalte-response-output-stream, die Sie nutzen könnten jersey-Ressource-Filter.
Ich es geschafft habe, irgendwie (Jersey 2.13) durch die Konfiguration von Jersey als eine Art filter, und nicht um ein servlet, in web.xml. Dann können Sie sagen, die container, um den filter anwenden zu enthalten-Anfragen zu:
RequestDispatcher.zählen dann die Arbeit für die Anfrage behandelt, von Jersey, zu. Es gibt eine Einschränkung, aber. Jersey fordert Antwort.getOutputStream, so alle ausgegeben werden muss, erfolgt durch Sprach-Ausgabe-stream - diese Regeln aus JSP-Seiten, die Antwort.getWriter statt. So, es sei denn, Sie herausfinden, wie das problem zu umgehen, zu vergessen, einschließlich Jersey-Ressource in eine JSP-Seite oder, Umgekehrt, einschließlich das Ergebnis der Auswertung einer JSP als Teil einer REST-Antwort.
<dispatcher>
- tags? Ich kann nicht damit es funktioniert, wenn es inweb.xml
, eclipse sagtInvalid content...
<dispatcher>
wurde Hinzugefügt, Servlet 2.4, stellen Sie sicher, dass das deklarieren der richtigen web.xml Prolog.