次の使用例があります: Web サービス プロキシとして Camel を使用し、A から要求を取得し、SOAP ヘッダーを強化して B に転送します。B の応答が A に返されます (実際の製品名を A & B に置き換えました)。 )
私のルートは次のようになります。
<route id="orderLimitRoute">
<from uri="cxf:bean:aOrderLimit?dataFormat=CXF_MESSAGE" />
<to uri="bean:soapHeadersEnricher"/>
<to uri="cxf:bean:bOrderLimit?dataFormat=CXF_MESSAGE" />
</route>
このようなルートは機能しますが、それは問題ではありません。
エンリッチャーはアクセスキーをどこかから取得し、SOAP ヘッダーに挿入します。B は、有効なアクセスキーを持つリクエストのみを受け入れます。アクセスキーの取得は高価な操作であるため、これにはプールを使用します。また、B はアクセスキーがいつ無効になるかを実際には定義しません。したがって、これがあります(キャメル以外のシナリオの場合):
public Object execute(Call call) throws AbstractBWebServiceException {
Object result = null;
AccessKey accessKey = null;
int tries = maxTries > 0 ? maxTries : accessKeyPool.getMaxActive() + 1;
for (int i = 0; i < tries && accessKey == null; i++) {
try {
accessKey = borrowAccessKey();
result = call.execute(accessKey);
} catch (BWebServiceLoginException loginException) {
invalidate(accessKey);
accessKey = null;
} finally {
if (accessKey != null) {
returnAccessKey(accessKey);
}
}
}
if (accessKey == null) {
throw new BWebServiceAccessKeyException("Couldn't get a valid accesskey");
}
return result;
}
call.execute(accessKey) は B への呼び出しを行います。次に、Camel ルートでその Java コードを使用したいと思います。直接、または Camel ロジックに変換します。しかし、これを行う方法がわかりません.Camelのドキュメントを何度も見ましたが、関連するものが見つかりません.