4.7. HTTP 非同期トランスポート


Apache HttpComponents HttpClient 5 を使用して非同期 SOAP クライアントを実装します。

4.7.1. Maven コーディネート

code.quarkus.redhat.com で quarkus-cxf-rt-transports-http-hc5 を使用し新規プロジェクト を作成するか、既存のプロジェクトに次の座標を追加します。

<dependency>
    <groupId>io.quarkiverse.cxf</groupId>
    <artifactId>quarkus-cxf-rt-transports-http-hc5</artifactId>
</dependency>

4.7.2. 使用方法

quarkus-cxf-rt-transports-http-hc5 依存関係がクラスパスで使用可能になると、CXF は非同期呼び出しに HttpAsyncClient を使用し、同期呼び出しには引き続き HttpURLConnection を使用します。

4.7.2.1. 非同期メソッドの生成

非同期クライアント呼び出しには、サービスエンドポイントインターフェイスにいくつかの追加メソッドが必要です。そのコードはデフォルトでは生成されません。

これを有効にするには、enableAsyncMappingtrue に設定した JAX-WS バインディングファイルを作成する必要があります。

ヒント

このセクションで使用されているサンプルコードスニペットは、Quarkus CXF のソースツリーにある HC5 integration test からの抜粋です。

src/main/resources/wsdl/async-binding.xml

<?xml version="1.0"?>
<bindings
        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
        xmlns="https://jakarta.ee/xml/ns/jaxws"
        wsdlLocation="CalculatorService.wsdl">
    <bindings node="wsdl:definitions">
        <enableAsyncMapping>true</enableAsyncMapping>
    </bindings>
</bindings>

その後、additional-params プロパティーを介してこのファイルを wsdl2java に渡す必要があります。

application.properties

quarkus.cxf.codegen.wsdl2java.includes = wsdl/*.wsdl
quarkus.cxf.codegen.wsdl2java.additional-params = -b,src/main/resources/wsdl/async-binding.xml

4.7.2.2. 非同期クライアントと Mutiny

非同期スタブが利用可能になると、次のように io.smallrye.mutiny.Uni でクライアント呼び出しをラップできるようになります。

package io.quarkiverse.cxf.hc5.it;

import java.util.concurrent.Future;

import jakarta.inject.Inject;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.QueryParam;
import jakarta.ws.rs.core.MediaType;

import org.apache.cxf.endpoint.Client;
import org.apache.cxf.frontend.ClientProxy;
import org.jboss.eap.quickstarts.wscalculator.calculator.AddResponse;
import org.jboss.eap.quickstarts.wscalculator.calculator.CalculatorService;

import io.quarkiverse.cxf.annotation.CXFClient;
import io.smallrye.mutiny.Uni;

@Path("/hc5")
public class Hc5Resource {

    @Inject
    @CXFClient("myCalculator") // name used in application.properties
    CalculatorService myCalculator;

    @SuppressWarnings("unchecked")
    @Path("/add-async")
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public Uni<Integer> addAsync(@QueryParam("a") int a, @QueryParam("b") int b) {
        return Uni.createFrom()
                .future(
                        (Future<AddResponse>) myCalculator
                                .addAsync(a, b, res -> {
                                }))
                .map(addResponse -> addResponse.getReturn());
    }

}

4.7.2.3. スレッドプール

このエクステンションによって配信される非同期クライアントは、Quarkus が提供するスレッドプールを備えた ManagedExecutor を活用します。スレッドプールは、オプションquarkus.thread-pool.* ファミリーを使用して設定できます。その場合、org.apache.cxf.transports.http.configuration.HTTPClientPolicy のエグゼキューターおよびスレッドプール関連の属性は、Quarkus 上の非同期クライアントで考慮されません。

ヒント

CXF 非同期クライアントの詳細と、その調整方法は、CXF ドキュメント を参照してください。

Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2026 Red Hat
トップに戻る