10.17. HTTP ゲートウェイの設定


HTTP ゲートウェイは JBoss Enterprise SOA Platform の Application Server の HTTP コンテナーを使用して HTTP エンドポイントを公開するため、多くの設定はコンテナーレベルで管理されます。これらはバインド/ポートアドレス、SSL などです。
以下のコードは、サービスに <http-gateway> を設定する最も簡単な方法を示しています(プロバイダー設定は必要ありません)。
<service category="Vehicles" name="Cars" description="" invmScope="GLOBAL">
    <listeners>
        <http-gateway name="Http" />
    </listeners>
    <actions mep="RequestResponse">
        <!-- Service Actions.... -->
    </actions>
</service>
Copy to Clipboard Toggle word wrap
上記の設定では、デフォルト の HTTP バスプロバイダーを使用します。これは、busrefid 属性を定義しないためです。サービスカテゴリーと名前を使用して、次の形式の HTTP エンドポイントアドレスを構築します。
        http://<host>:<port>/<.esbname>/http/Vehicles/Cars
Copy to Clipboard Toggle word wrap
<.esbname> トークンは、.esb 拡張のない .esb デプロイメントの名前です。アドレスの http トークンにも注意してください。これは、すべての <http-gateway> エンドポイントに使用されるハードコーディングされた名前空間の接頭辞です。
<http-gateway> は urlPattern もサポートしています。
<service category="Vehicles" name="Cars" description="" invmScope="GLOBAL">
    <listeners>
        <http-gateway name="Http" urlPattern="esb-cars/*" />
    </listeners>
    <actions mep="RequestResponse">
        <!-- Service Aactions.... -->
    </actions>
</service>
Copy to Clipboard Toggle word wrap
これにより、サービスの HTTP エンドポイントが公開され、以下のアドレスにあるすべての HTTP 要求が取得されます。
        http://<host>:<port>/<.esbname>/http/esb-cars/*
Copy to Clipboard Toggle word wrap
allowedPorts プロパティーを使用して、特定のサービスを 1 つ以上の HTTP ポートに制限できます。これを行うには、以下のように問題のポートのコンマ区切りリストを作成します。
<http-gateway name="Http" urlPattern="esb-cars/*">
    <property name="allowedPorts" value="8080,8081">
</http-gateway>
Copy to Clipboard Toggle word wrap
これにより、サービスの HTTP エンドポイントが公開され、以下のポート下のすべての HTTP 要求のみがキャプチャーされます(他のすべてのポートは HTTP ステータスコード 404 - Not Found を受け取ります)。
  • http://<host>:8080/*
  • http://<host>:8081/*
<http-gateway> は通常、要求 MIME タイプに基づいて HTTP 要求のペイロードをデコードできます。jbossesb-properties.xml ファイルの core:org.jboss.soa.esb.mime.text.types 設定プロパティーを使用して、ペイロードを文字列としてデコードするか、またはアクションでデコードするサービスを使用するかどうかを決定します。
"core:org.jboss.soa.esb.mime.text.types" 設定プロパティーは、"text" (文字)MIME タイプのセミコロンで区切られたリストであり、デフォルトセットは次のように設定されます(ワイルドカードのサポートに注意)。
  • text/*
  • application/xml
  • application/*-xml
<http-gateway> は、テキストペイロードをデコードする際に要求の文字エンコーディングを使用します。
<http-gateway> は payloadAs 属性もサポートします。これは、上記のデフォルトの MIME タイプベースの動作の上書きとして使用できます。この属性を使用すると、ペイロードを BYTES または string として処理するようにゲートウェイを明示的に指示できます。
HTTP 要求には、サービスが必要とする可能性のあるデータペイロードに加えて、他の多くの情報が含まれています。  この情報は、ゲートウェイによりメッセージの HttpRequest オブジェクトインスタンスに保存されます。  アクション内でこのコードを使用して、その情報にアクセスします。
HttpRequest requestInfo = HttpRequest.getRequest(message);
Copy to Clipboard Toggle word wrap
HttpRequest は、(ゲッターメソッドを介して)以下のプロパティーセットを公開します。
Expand
表10.12 プロパティー
プロパティー Description
queryParams クエリーパラメーターが含まれる java.util.Map<String, String[]>。  値は String[] であるため、多値パラメーターをサポートすることに注意してください。
ヘッダー リクエストヘッダーが含まれる java.util.List<HttpHeader>。
authType エンドポイントを保護するために使用される認証スキームの名前。認証されていない場合は null です。CGI 変数 AUTH_TYPE の値と同じです。
characterEncoding この要求の本文で使用される文字エンコーディングの名前。要求が文字エンコーディングを指定しない場合は null。
contentType 要求の本文のコンテンツタイプ(MIME タイプ)、またはタイプが不明な場合は null。  CGI 変数 CONTENT_TYPE の値と同じです。
contextPath 要求のコンテキストを示す要求 URI の部分。  コンテキストパスは常にリクエスト URI で最初に行われます。  パスは / 文字で始まりますが、/ 文字で終わりません。  デフォルトの(root)コンテキストのエンドポイントの場合、これは "" を返します。  コンテナーはこの文字列をデコードしません。  (Servlet Spec を参照してください。)
pathInfo この要求時にクライアントが送信する URL に関連付けられた追加のパス情報。追加のパス情報はエンドポイントパスに従いますが、クエリー文字列の前には / 文字で始まります。追加パス情報がない場合は、このメソッドは null を返します。CGI 変数 PATH_INFO の値と同じです。(Servlet Spec を参照してください。)
pathInfoToken pathInfo のトークンが含まれる List<String>。
queryString クエリー文字列(サーブレット仕様を参照)
requestURI プロトコル名からクエリー文字列までのこの要求 URL の一部。Web コンテナーはこの文字列をデコードしません。(サーブレット仕様 を参照してください)
requestPath エンドポイントを呼び出すこのリクエスト URL の一部。追加のパス情報やクエリー文字列は含まれません。CGI 変数 SCRIPT_NAME の値と同じです。urlPattern が/*であった場合、このメソッドは http のみを返します。(サーブレット仕様 を参照してください)
localAddr 要求が受信したインターフェイスの IP アドレス。
localName 要求が受信した IP インターフェイスのホスト名。
メソッド HTTP メソッド
protocol HTTP プロトコルの名前とバージョン
remoteAddr 要求を送信したクライアントまたは最後のプロキシーの IP アドレス。CGI 変数 REMOTE_ADDR の値と同じです。
remoteHost 要求を送信したクライアントまたは最後のプロキシーの完全修飾名。エンジンが(パフォーマンスを向上させるために)ホスト名を解決できないか、または選択しない場合、これは IP アドレスのドット付き文字列の形式になります。CGI 変数 REMOTE_HOST の値と同じです。
remoteuser この要求を行うユーザーのログイン(ユーザーが認証されている場合)、またはユーザーが認証されていない場合は null。ユーザー名が後続の各要求と共に送信されるかどうかは、クライアントと認証のタイプによって異なります。CGI 変数 REMOTE_USER の値と同じです。
contentLength リクエストボディーと入力ストリームで利用可能になった長さ(バイト単位)。長さが不明な場合は -1。HTTP サーブレットの場合、CGI 変数 CONTENT_LENGTH の値と同じです。
requestSessionId クライアントによって指定されたセッション ID。指定されていない場合は null。
scheme 使用されているスキーム(http または https のいずれか)。
serverName 要求が送信されたサーバーのホスト名。Host ヘッダー値の ":" より前の部分(存在する場合)、または解決されたサーバー名、またはサーバー IP アドレスになります。
デフォルトでは、このゲートウェイは関連するサービスを同期的に呼び出し、サービス応答ペイロードを HTTP 応答として返します。
HTTP ゲートウェイは常に同期 HTTP クライアントに同期応答を返すため、単語の絶対意味では非同期ではありません。  デフォルトでは、ゲートウェイはアクションパイプラインを同期的に呼び出し、同期サービスの応答をゲートウェイからの HTTP 応答として返します。
このゲートウェイの観点からの非同期応答動作は、アクションパイプラインの非同期呼び出し後にゲートウェイが同期 HTTP 応答を返すことを意味します(つまり、同期サービス呼び出しではありません)。  サービスを非同期的に呼び出すため、同期 HTTP 応答の一部としてサービス応答を返すことはできません。  したがって、非同期応答を行う方法を示すゲートウェイを設定する必要があります。
非同期動作を設定するには、<asyncHttpResponse> 要素を <http-gateway> に追加します。
<listeners>
    <http-gateway name="Http" urlPattern="esb-cars/*">
        <asyncResponse />
    </http-gateway>
</listeners>
Copy to Clipboard Toggle word wrap
上記のように設定されている場合、ゲートウェイは HTTP ステータス 200 (OK)でゼロ長 HTTP 応答ペイロードを返します。
非同期応答 HTTP ステータスコードは、<asyncResponse> 要素に statusCode 属性を設定することで、(デフォルトの 200 から)設定できます。
<listeners>
    <http-gateway name="Http" urlPattern="esb-cars/*">
        <asyncResponse statusCode="202" />
    </http-gateway>
</listeners>
Copy to Clipboard Toggle word wrap
上記のように、非同期応答のゼロ長ペイロードは(デフォルトでは)を返します。  これは、<asyncResponse> 要素に <payload> 要素を指定して上書きできます。
<listeners>
    <http-gateway name="Http" urlPattern="esb-cars/*">
        <asyncResponse statusCode="202">
            <payload classpathResource="/202-static-response.xml"
                     content-type="text/xml"
                     characterEncoding="UTF-8" />
        <asyncResponse>
    </http-gateway>
</listeners>
Copy to Clipboard Toggle word wrap
Expand
表10.13
プロパティー Description 必須
classpathResource
応答ペイロードが含まれるクラスパス上のファイルへのパスを指定します。
必須
contentType
classpathResource 属性で指定されたペイロードデータのコンテンツ/mime タイプを指定します。
必須
characterEncoding
classpathResource 属性で指定されたデータの文字エンコーディング。
オプション
ゲートウェイが関連サービスの HttpRequest オブジェクトインスタンスを作成する方法と一貫性があり、関連するサービスは、同期 HTTP ゲートウェイ呼び出しでゲートウェイの HttpResponse オブジェクトを作成できます。
サービスのアクションでこのコードを使用して、応答メッセージに HttpResponse インスタンスを作成および設定します。
HttpResponse responseInfo = new HttpResponse(HttpServletResponse.SC_OK);
 
responseInfo.setContentType("text/xml");
// Set other response info ...
 
// Set the HttpResponse instance on the ESB response Message instance
responseInfo.setResponse(responseMessage);
Copy to Clipboard Toggle word wrap
HttpResponse オブジェクトには、発信 HTTP ゲートウェイの応答にマップされる以下のプロパティーを含めることができます。
Expand
表10.14
プロパティー Description
responseCode
ゲートウェイ応答に設定する HTTP 応答/ステータスコード()。http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
contentType
レスポンスペイロード MIME タイプ。
encoding
応答ペイロードのコンテンツエンコーディング。
長さ
応答ペイロードのコンテンツの長さ。
ヘッダー
リクエストヘッダーが含まれる java.util.List<HttpHeader>。
注記
このクラスは HttpRouter などの内部アクションでも使用されるため、HttpResponse クラスの使用は効率的であるため、このゲートウェイを使用してプロキシー操作を簡単に実行できます。
注記
応答ペイロードコンテンツエンコーディングは、HttpResponse インスタンスを介して HTTP 応答ステータスコード(ulink url="http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html" />)として設定することもできます。
デフォルトでは、このゲートウェイは同期サービス呼び出しが完了するまで 30,000 ミリ秒(30 秒)待機してから ResponseTimeoutException を発生させます。  デフォルトのタイムアウトを上書きするには、synchronousTimeout プロパティーを設定します。
<listeners>
    <http-gateway name="Http" urlPattern="esb-cars/*">
        <property name="synchronousTimeout" value="120000"/>
    </http-gateway>
</listeners>
Copy to Clipboard Toggle word wrap
動作パイプラインの例外を、Madoop 設定を介して特定の HTTP 応答コードにマップできます。マッピングはトップレベル <http-provider> で指定でき、<http-gateway> で直接指定することもできます。これにより、<http-provider> でグローバルに定義された例外マッピングのリスナーごとのオーバーライドが可能になります。  以下は、<http-gateway> 設定に直接行われた例外マッピングの例です。
<http-gateway name="http-gateway">
    <exception>
        <mapping class="com.acme.AcmeException" status="503" />
    </exception>
</http-gateway>
Copy to Clipboard Toggle word wrap
<http-provider> レベルでの例外マッピングの設定はまったく同じです。
また、"{exception-class}={http-status-code}" マッピングを含む単純な .properties 形式のファイルであるマッピングファイルを設定することもできます。  ファイルはクラスパスで検索され、.ESB デプロイメント内にバンドルされる必要があります。  これは以下のように設定されます(<http-provider>)が設定されます。
<http-provider name="http">

    <!-- Global exception mappings file... -->
    <exception mappingsFile="/http-exception-mappings.properties" />
</http-provider>
Copy to Clipboard Toggle word wrap

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2025 Red Hat