27.10. REST リクエストの使用 - デフォルトのバインディングスタイル
CXF JAXRS フロントエンド は、JAX-RS (JSR-311) API を実装しているため、リソースクラスを REST サービスとしてエクスポートできます。CXF Invoker API を活用して、REST リクエストを通常の Java オブジェクトメソッド呼び出しに変換します。エンドポイント内で URI テンプレートを指定する必要はありません。CXF は、JSR-311 仕様に従って、REST リクエスト URI からリソースクラスメソッドへのマッピングを処理します。Camel で行う必要があるのは、このメソッドリクエストを適切なプロセッサーまたはエンドポイントに委任することだけです。
CXFRS ルートの例
private static final String CXF_RS_ENDPOINT_URI =
"cxfrs://http://localhost:" + CXT + "/rest?resourceClasses=org.apache.camel.component.cxf.jaxrs.testbean.CustomerServiceResource";
private static final String CXF_RS_ENDPOINT_URI2 =
"cxfrs://http://localhost:" + CXT + "/rest2?resourceClasses=org.apache.camel.component.cxf.jaxrs.testbean.CustomerService";
private static final String CXF_RS_ENDPOINT_URI3 =
"cxfrs://http://localhost:" + CXT + "/rest3?"
+ "resourceClasses=org.apache.camel.component.cxf.jaxrs.testbean.CustomerServiceNoAnnotations&"
+ "modelRef=classpath:/org/apache/camel/component/cxf/jaxrs/CustomerServiceModel.xml";
private static final String CXF_RS_ENDPOINT_URI4 =
"cxfrs://http://localhost:" + CXT + "/rest4?"
+ "modelRef=classpath:/org/apache/camel/component/cxf/jaxrs/CustomerServiceDefaultHandlerModel.xml";
private static final String CXF_RS_ENDPOINT_URI5 =
"cxfrs://http://localhost:" + CXT + "/rest5?"
+ "propagateContexts=true&"
+ "modelRef=classpath:/org/apache/camel/component/cxf/jaxrs/CustomerServiceDefaultHandlerModel.xml";
protected RouteBuilder createRouteBuilder() throws Exception {
final Processor testProcessor = new TestProcessor();
final Processor testProcessor2 = new TestProcessor2();
final Processor testProcessor3 = new TestProcessor3();
return new RouteBuilder() {
public void configure() {
errorHandler(new NoErrorHandlerBuilder());
from(CXF_RS_ENDPOINT_URI).process(testProcessor);
from(CXF_RS_ENDPOINT_URI2).process(testProcessor);
from(CXF_RS_ENDPOINT_URI3).process(testProcessor);
from(CXF_RS_ENDPOINT_URI4).process(testProcessor2);
from(CXF_RS_ENDPOINT_URI5).process(testProcessor3);
}
};
}
そして、エンドポイントの設定に使用される対応するリソースクラス…
- 注記
- デフォルトでは、JAX-RS リソースクラスは JAX-RS プロパティーを設定するために のみ 使用されます。エンドポイントへのメッセージのルーティング中はメソッドは実行 されません。代わりに、すべての処理を行うのはルートの責任です。
デフォルトモードでは、何も実行しないサービス実装クラスではなく、インターフェイスのみを提供すれば十分です。
performInvocation オプションが有効になっている場合、サービス実装が最初に呼び出され、レスポンスが Camel エクスチェンジに設定され、ルートの実行が通常どおり続行されます。これは、既存の JAX-RS 実装を Camel ルートに統合する場合や、カスタムプロセッサーで JAX-RS レスポンスを後処理する場合に役立ちます。
@Path("/customerservice/")
public interface CustomerServiceResource {
@GET
@Path("/customers/{id}/")
Customer getCustomer(@PathParam("id") String id);
@PUT
@Path("/customers/")
Response updateCustomer(Customer customer);
@Path("/{id}")
@PUT()
@Consumes({ "application/xml", "text/plain",
"application/json" })
@Produces({ "application/xml", "text/plain",
"application/json" })
Object invoke(@PathParam("id") String id,
String payload);
}