2011-02-14 5 views
4

は、私はこのような何かをしたい:クラスメンバ変数に注入するJAX-RS @PathParam?

@Stateless 
@Path("/sensors/{sensorid}/version") 
@Consumes({MediaType.APPLICATION_XML, MediaType.TEXT_XML}) 
@Produces({MediaType.APPLICATION_XML, MediaType.TEXT_XML}) 
public class SensorVersionRestView extends VersionRestView{ 

    @PathParam("sensorid") 
    private String sensorid; 

    @GET 
    @Path("count") 
    // so the complete path is i.e. 
    // domain.com/rs/sensors/111211/version/count 
    public void getCount() { 

     // do something with the sensorId.... 

    } 
} 

しかし、私が得る唯一のことは、ランタイム(私はジャージーでのGlassFish v3のを使用)にnullです。コンパイラとeclipseは、メンバークラス変数の@PathParamに関する問題を決して言及しません。

私の構成に何が問題なのですか?

主な問題は、このクラスの各メソッドでパス全体を使用したくないということです。センサーレイヤーでいくつかの残りの操作を処理する別のクラスが存在します(deomain.com/rs/sensors/私はあなたがこれにそれを変更する必要があると考えている)すなわち

答えて

6

を数える:

@Stateless 
@Path("/sensors/{sensorid}/version") 
public class SensorVersionRestView extends VersionRestView { 

@GET 
@Path("count") 
@Consumes({MediaType.APPLICATION_XML, MediaType.TEXT_XML}) 
@Produces({MediaType.APPLICATION_XML, MediaType.TEXT_XML}) 
// domain.com/rs/sensors/111211/version/count 
public void getCount(@PathParam("sensorid") String sensorid) { 
    // do something with the sensorId.... 
} 
} 
+0

ええ、これは... THXマイク! – gerry

+0

また、@Statelessは不要だと思います。 –

6

注入は、オブジェクト 作成時に発生するので、リソースクラスのフィールドと豆 性質上、この注釈 の使用のみですサポートされる デフォルトの要求ごとのリソースクラス ライフサイクル。 他のライフサイクルを使用するリソースクラスは、リソースメソッド のパラメータにこの 注釈のみを使用する必要があります。 - JSR-311 Javadocs

あなたがいる限り、リソースクラスのライフサイクルごとの要求であるとして@PathParamでフィールドに注釈を付けることができるはずです。デフォルトでは、ルートリソースクラスのライフサイクルはリクエストごとです。

編集:EJBを使用してこれを達成できるとは思いません。 @Stateless注釈を削除すると、それが機能するはずです。

+1

サーバー環境でEJBを使用しないでこの機能を使用するのはなぜですか?これは仕様のもう一つの奇妙なことです! – gerry

関連する問題