2016-08-12 56 views
4

我們正在嘗試使用Apache Camel 2.16.3將某些數據推送到第三方端點HTTP。我們正在使用HTTP4組件。我們將URI,方法和查詢參數設置爲消息中的標題。然而,端點包含下劃線(_)和我們得到這樣一個例外:使用包含帶有Camel HTTP4下劃線的URI

產生的原因:java.lang.IllegalArgumentException異常:無效的URI:https://x_y.something.com/somePath?q_one=XXXX&q_two=YYYYY。如果你轉發/橋接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-camel'製作人。 – hveiga

回答

2

編輯 沒有看到一個代碼示例我不能確定的根本原因是什麼,但如果我理解正確的話,您發送一個HTTP請求到阿卡演員是從駱駝端點消費。我的猜測是,您可能沒有正確填充標題 - 無論原始HTTP4端點是什麼樣子,Exchange.HTTP_URI標頭覆蓋將始終優先。例如,這工作得很好:

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,constant(「https://x_y.something.com:9090 「) .to(」https4:something.com:9090/path?q_one = XXXX&q_two = YYYYY「);' – hveiga