REST Webservices, XML Ausgabe und Objektübertragung

Cyborg

Aktives Mitglied
Hi Leutz,

seit kurzem beschäftige ich mich etwas mit dem Thema REST Webservices.

Da ich Christians Seite sehr gut erklärt finde, benutze ich gleich die JAX-RS Referenzimplementierung, Jersey.

Nach etwas rumgespiele stoße ich jetzt auf folgendes Problem:

Ich möchte aus einer bereits vorhandenen, instanziierten Klasse das Objekt benutzen um mit JAXB eine XML Ausgabe von seinen Eigenschaften zu erzeugen.

Folgenden Code habe ich bereits:
Java:
import filmdatenbank.Gui;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;

@Path( "movies" )

public class FilmRessource {
    
    Gui fGui  = null;
    
    public FilmRessource(Gui fGui){
        this.fGui = fGui;
    }

    @GET

    @Path( "/" )

    @Produces( MediaType.TEXT_XML )

    public Filme filminfo() {

        Filme filme = fGui.getFilmObjekt();
        return filme;
    }
}

In der Film-Klasse wurden entsprechende Annotationen für die XML Ausgabe vorgenommen (@XmlRootElement)

Mein Problem ist jetzt der Konstruktor der Klasse: FilmRessource.
Wenn ich in der GUI versuche, das Film-Objekt an die FilmRessource dem Konstruktor mitzugeben, dann erhalte ich beim Serverstart folgenden Fehler:

Code:
SEVERE: Missing dependency for constructor public rest.FilmRessource(filmdatenbank.Gui) at parameter index 0

Wenn ich nach diesem Fehler mit Google suche, erhalte ich den Hinweis "@Inject" vor den Konstruktor zu setzen.
Dies für mich dann aber zu dem nächsten Fehler.

Code:
annotation type not applicable to this kind of declaration

Irgendwie dreh ich mich damit im Kreis.

Habt ihr eventuell einen Tipp für mich ?
 
1. Sobald du eine REST Schnittstelle hast, handelt es sich um eine WebApplication. Du du brauchst einen Server etc und Erzeugst die Instanzen i.d.R. nicht selbst. Wenn du das trotzdem tun willst, musst du eine Klasse "MyApplication" schreiben und dort die Methode getSingletons() überschreiben.

Chapter 2. Overview of JAX-RS 1.1
Application (jsr311-api 1.1 API)

In der web.xml musst du dann die Application bekanntgeben.

1 <web-app>
2 <servlet>
3 <servlet-name>org.foo.rest.MyApplication</servlet-name>
4 </servlet>
5 ...
6 <servlet-mapping>
7 <servlet-name>Jersey Web Application</servlet-name>
8 <url-pattern>/resources</url-pattern>
9 </servlet-mapping>
10 ...
11 </web-app>

2. Du willst aus einer GUI einen REST WebService starten?!?!?!?!?!?!?
 
Alternativ zum Servlet Mapping kann man afaik auch die @ApplicationPath Annotation an seine eigene Application Klasse packen.
 

Neue Themen


Zurück
Oben