2016-08-12 12 views
4

Apache Camel 2.16.3を使用して、一部のデータをサードパーティのHTTPエンドポイントにプッシュしようとしています。我々はHTTP4コンポーネントを使用しています。 uri、メソッド、およびクエリパラメータをメッセージのヘッダとして設定しています。しかし、エンドポイントは、アンダースコア(_)が含まれており、我々はこのような例外を取得している:java.lang.IllegalArgumentExceptionが:無効なURI:https://x_y.something.com/somePath?q_one=XXXX&q_two=YYYYYによって引き起こさCamel HTTP4でアンダースコアを含むURIを使用

。あなたは、HTTPエンドポイントをブリッジング/転送している場合は、エンドポイント上bridgeEndpointオプションを有効にします。エンドポイント[?https4://プレースホルダthrowExceptionOnFailure =偽]を、私は少し研究していると、その_は何かがあるように見えます

そのURIには存在すべきではありません。このwebsiteは実際にはhttps://x_y.something.com/somePathは無効ですが、https://xy.something.com/somePathが有効であると言います。

サードパーティのエンドポイントを変更できないため、アンダースコアをエスケープすることは可能ですか?そうでない場合は、他に解決策がありますか、またはこれについてはApache Camelを放棄する必要がありますか?

+0

あなたが作成したラクダのルートを共有できますか? '&bridgeEndpoint = true'を追加すると、作業が始まるはずです –

+0

' Exchange.HTTP_URI'でヘッダーに 'URI'を設定しているので動作しません。エンドポイントに有効な 'URI'がありません。また、私は 'ルート 'を持っていない、私は' akka - ラクダ 'プロデューサーを使用しています。 – hveiga

答えて

2

EDIT のコード例を見ないと私は、根本的な原因が何であるかを確認することはできませんが、私が正しく理解していれば、あなたはキャメルのエンドポイントから消費しているアッカのアクターにHTTPリクエストを送信しています。私の推測では、元のHTTP4エンドポイントがどのようなものかに関わらず、ヘッダーの上書きが常に優先されている可能性があります。たとえば、これは完全に正常に動作します:

from("jetty:http://localhost:9090/path") 
    .routeId("jetty_server") 
    .log("${body}"); 

from("timer:sender?delay=3000&period=5000") 
    .setBody().constant("Ping!") 
    .setHeader(Exchange.HTTP_URI, constant("http://localhost:9090/path")) 
    .to("http4:x_y.something.com:9090/path?q_one=XXXX&q_two=YYYYY"); 

は、だから私の推測では、それはキャメルの問題ではないということです。

+0

私は試みましたが、それは問題を解決しませんでした。それは何よりも標準的な問題だと思われます... https://en.wikipedia.org/wiki/Hostname#Restrictions_on_valid_host_names – hveiga

+0

アクターがどのように開始し、どのエンドポイントURIを使用しているか?あなたがURIを設定する人なら、適切なURIを使わないのはなぜですか?俳優はどこにホストされていますか? –

+0

ルートがこのような場合に動作することを確認できますか? ( "timer:sender?delay = 3000&period = 5000") .setBody()。constant( "Ping!") .setHeader(Exchange.HTTP_URI、定数( "https://x_y.something.com:9090 – hveiga

関連する問題