Camel を使用し、ServiceMix サーバーで実行しているプロジェクトがありますが、外部 Web サービスにアクセスできないようです。プロキシ認証を適切に設定できないことが原因であると思われます。
Exchange exchange = producerTemplate.request(url, new Processor() {
public void process(Exchange exchange) throws Exception {
exchange.getIn().setHeader(Exchange.HTTP_METHOD, "POST");
exchange.getIn().setHeader(Exchange.CONTENT_TYPE, "application/json");
}
});
response = exchange.getOut().getBody(String.class);
最後の行にブレークポイントを配置すると、交換オブジェクトに ConnectionTimedOutException が表示され、応答が null になります。
さまざまな方法でプロキシを設定しようとしました。
1) CamelContextAwareを実装するクラスでプロキシ設定を設定しようとしました:
camelContext.getProperties().put("http.proxyHost", "...");
camelContext.getProperties().put("http.proxyPort", "8080");
camelContext.getProperties().put("http.proxyUser", "...");
camelContext.getProperties().put("http.proxyPassword", "...");
camelContext.getProperties().put("http.proxySet", "true");
これはスタンドアロン モードで機能しますが、コードを ServiceMix にデプロイすると、camelContext オブジェクトが null になります。
2) ServiceMix のetc/system.propertiesファイルにプロキシ設定を設定してみました。
3) http-conf:conduit をcamel-context.xmlで次のように使用してみました:
<http-conf:conduit name="*.http-conduit">
<http-conf:client ProxyServer="..." ProxyServerPort="8080" />
<http-conf:proxyAuthorization>
<conf-sec:UserName>...</conf-sec:UserName>
<conf-sec:Password>...</conf-sec:Password>
</http-conf:proxyAuthorization>
</http-conf:conduit>
ただし、cxf クライアントを使用した場合にのみ機能すると思います。
何も機能しませんでした。ServiceMix にデプロイされている間に機能する必要があります。どんな助けでも大歓迎です。
ありがとう。