Menu Close

5.5. JAX-WS

WebService サポートは、Apache CXF も使用する JBoss EAP WebServices サブシステムと統合される CXF コンポーネントを介して提供されます。

5.5.1. JAX-WS CXF プロデューサー

以下のコード例では CXF を使用して、WildFly web services サブシステムによってデプロイされた web サービスを使用します。

5.5.1.1. JAX-WS Web サービス

以下の簡単な Web サービスには、2 つの文字列引数を連結して返す、単純な「greet」メソッドがあります。

JBoss EAP の web サービスサブシステムが JAX-WS アノテーションが含まれるクラスを検出すると、CXF エンドポイントをブートストラップします。以下の例では、サービスのエンドポイントは http://hostname:port/context-root/greeting にあります。

// Service interface
@WebService(name = "greeting")
public interface GreetingService {
    @WebMethod(operationName = "greet", action = "urn:greet")
    String greet(@WebParam(name = "message") String message, @WebParam(name = "name") String name);
}

// Service implementation
public class GreetingServiceImpl implements GreetingService{
    public String greet(String message, String name) {
        return message + " " + name ;
    }
}

5.5.1.2. Camel ルート設定

この RouteBuilder は、上記で定義された 'greeting' Web サービスを消費する CXF プロデューサーエンドポイントを設定します。CDI を camel-cdi コンポーネントと組み合わせて使用して、RouteBuilder と CamelContext をブートストラップします。

@Startup
@ApplicationScoped
@ContextName("cxf-camel-context")
public class CxfRouteBuilder extends RouteBuilder {

    @Override
    public void configure() throws Exception {
        from("direct:start")
        .to("cxf://http://localhost:8080/example-camel-cxf/greeting?serviceClass=" + GreetingService.class.getName());
    }
}

greeting web サービスの「挨拶」には 2 つのパラメーターが必要です。これらは、ProducerTemplate の方法で上記のルートに提供できます。Web サービスメソッドの引数の値は、エクスチェンジボディーとして渡されるオブジェクト配列を構築することで設定されます。

String message = "Hello"
String name = "Kermit"

ProducerTemplate producer = camelContext.createProducerTemplate();
Object[] serviceParams = new Object[] {message, name};
String result = producer.requestBody("direct:start", serviceParams, String.class);