2009-05-26 10 views
1

Ich versuche, Jersey auf einem vorkonfigurierten Port/URL mit einer vorkonfigurierten Ressourceninstanz zu starten. Ich kann nicht richtig herausfinden, wie ich es richtig mache.Wie initialisiert Jersey mit einer bestimmten Ressource Instanz mit bestimmten MessgeBodyReaders/Writers?

Hier ist ein Code-Schnipsel. Helfen Sie mir, bitte, füllen Sie die Felder:

@Component 
@PerRequest 
@Path("/svc") 
@Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) 
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) 
public class MyService 
{ 
    // This piece is known 
} 

public class JSONMessageBodyWriter implements MessageBodyWriter<Object> 
{ 
    // This piece is known 
} 

public class XMLMessageBodyWriter implements MessageBodyWriter<Object> 
{ 
    // This piece is known 
} 

// This is where I need help 
MyService service = new MyService(); 
... 
HttpHandler handler = ??? 
... 
HttpServer server = ??? 
server.createContext("/services", handler); 
... 
server.start(); 

Im Snippet oben, ich versuche, die MyService über die http://localhost:8080/services/svc URL zu belichten. Wenn der JSONMessageBodyWriter und der XMLMessageBodyWriter eingesteckt werden, funktioniert der Dienst vis XML und JSON entsprechend.

Wenn Sie wissen, wie dies auf Jetty oder Grizzly zu tun, lassen Sie es mich auch wissen. Kann der Frühling hier helfen?

Antwort

2

Jersey selbst bietet eine ganze Reihe von examples, und zwar das einfachste Hello World Beispiel zeigt, wie ein Server auf einem Port starten, entweder nur ihn oder Test gegen in JUnits laufen. Wenn Sie sich das ansehen, erhalten Sie ein Beispiel dafür, wie Sie einen Server einrichten und starten.

Nun, wenn Sie MessageBodyReaders und MessageBodyWriters als Teil einer Trikot-Anwendung konfigurieren, werden Sie feststellen, dass dies von der JAX-RS-Spezifikation selbst abgedeckt ist (welche Trikot-Implementierungen). Zunächst einmal benötigen Leser und Verfasser die Annotation @Provider. Darüber hinaus sollte der Leser die @ Consumes-Annotation abrufen, und der Writer sollte die @Produces-Annotation abrufen, damit Sie angeben können, welche MIME-Typen sie verwenden bzw. produzieren.

Als nächstes werden sie aktiviert. Das helloworld-Beispiel oben zeigt das nicht, weil es keine benutzerdefinierten Leser oder Schreiber verwendet (ein anderes Beispiel könnte ich nicht gesehen haben). Anstatt also das Paket nach Ressourcen zu suchen (wie sie es tun; Sie werden wissen, wovon ich spreche, wenn Sie das Beispiel helloworld sehen), codieren Sie eine Unterklasse von Application, in der Sie Ihre Ressourcenklasse und den Reader/Writer angeben Klassen. Mit dem Reader und Writer haben Sie die Möglichkeit, entweder eine Klasse anzugeben (die Sie von getClasses zurückgeben) oder eine bereits erstellte Instanz selbst anzugeben (die Sie von getSingletons zurückgeben).

Schließlich geben Sie den Namen Ihrer Anwendungsunterklasse als Wert für den Initialisierungsparameter "javax.ws.rs.Application" an. Die init-params können beim Start des Servers an GrizzlyWebContainerFactory.create übergeben werden (auch hier wird das im Beispiel verwendet).

Hoffe, das hilft.

+0

Offenbar neue Benutzer können nur einen Link verwenden, sonst hätte ich noch etwa 6 weitere Links. Das tut mir leid! – StevenC

+0

Die Anmerkungen und die Application-Klasse finden Sie unter https://jsr311.dev.java.net/nonav/releases/1.0/index.html – StevenC