2009-05-26 13 views
1

あらかじめ設定されたリソースインスタンスを使用して、あらかじめ設定されたポート/ urlでJerseyを起動しようとしています。私はそれを正しく行う方法を考え出すことはできません。特定のMessgeBodyReaders/Writersを持つ特定のリソースインスタンスを使用してJerseyを初期化するにはどうすればよいですか?

ここにコードのスニペットがあります。 、私を助けてください、空白を埋める:上記のスニペットで

@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(); 

を、私はhttp://localhost:8080/services/svc URLを介したMyServiceを公開しようとしています。 JSONMessageBodyWriterとXMLMessageBodyWriterがプラグインされている場合、サービスはXMLとJSONに従って動作します。

JettyまたはGrizzlyでこれを行う方法が分かっている場合は、お知らせください。スプリングはここで助けられますか?

答えて

2

Jersey自体は、examplesの全セットを提供します。具体的には、最も単純なhelloworldの例では、ポート上でサーバを起動してJUnitsでテストする方法とテストする方法を示しています。それを見ると、サーバーを設定して起動する方法の例が得られます。

ここで、MessageBodyReaderとMessageBodyWritersをジャージアプリケーションの一部として構成すると、これはJAX-RS仕様そのもの(ジャージーが実装している)によってカバーされています。最初に、読者と作家は@Providerアノテーションが必要です。さらに、読者は@Consumesアノテーションを取得する必要があり、ライターは@Producesアノテーションを取得する必要があります。したがって、消費するMIMEタイプと作成するMIMEタイプをそれぞれ指定できます。

次に、それらをアクティブにしています。上記のhelloworldの例では、カスタムリーダーやライターを使用していないため、その例は表示されません(別の例として、私は見ていないかもしれません)。したがって、リソースを見つけるためにパッケージを提供するのではなく(helloworldの例を見ると私が何を話しているか分かります)、アプリケーションのサブクラスをコーディングして、リソースクラスとリーダー/ライターを指定しますクラス。リーダライタでは、クラス(getClassesから返す)を指定するか、(getSingletonsから返す)既に作成されたインスタンスを独自に指定するオプションがあります。

最後に、アプリケーションサブクラスの名前をinit-parameter "javax.ws.rs.Application"の値として指定します。 init-paramsは、GrizzlyWebContainerFactory.createに渡すことができます(この例では、これを使用します)。

これが役に立ちます。

+0

新しいユーザーは1つのリンクのみを使用できます。そうでなければ、さらに6つのリンクがあります。それについて申し訳ありません! – StevenC

+0

アノテーションとアプリケーションクラスはhttps://jsr311.dev.java.net/nonav/releases/1.0/index.htmlにあります。 – StevenC

関連する問題