[英]Using URI that contains underscore with Camel HTTP4
我們正在嘗試使用Apache Camel
2.16.3將一些數據推送到第三方HTTP
端點。 我們正在使用HTTP4
組件。 我們將uri,方法和查詢參數設置為消息中的標題。 但是,端點包含下划線( _
),我們得到如下的異常:
引起:java.lang.IllegalArgumentException:無效的uri: https ://x_y.something.com/somePath?q_one = XXXX & q_two = YYYYY 。 如果要轉發/橋接http端點,則在端點上啟用bridgeEndpoint選項:端點[https4://占位符?throwExceptionOnFailure = false]
我一直在研究,看起來_
是不應該在URI中存在的東西。 該網站實際上說https://x_y.something.com/somePath
無效,但https://xy.something.com/somePath
有效。
由於我無法更改第三方端點,是否有可能以某種方式逃避下划線? 如果沒有,是否還有其他解決方案,或者我們需要放棄Apache Camel
?
編輯在沒有看到代碼示例的情況下,我無法確定根本原因是什么,但如果我理解正確,那么您正在向一個從Camel端點消耗的akka actor發送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");
所以我的猜測是,這不是駱駝問題。
有點晚了,但我會留下這個來幫助未來的用戶。
之前遇到過這個問題,我可以告訴你,下划線可能是罪魁禍首。 您可能會發現,如果刪除下划線,而您的服務(顯然)無法聯系端點,它應該正確解釋URI。 但是,如果錯誤仍然存在,您可能還必須添加bridgeEndpoint選項。
不幸的是,在使用Camel時,我從來沒有找到一種方便的方法來解決這個限制。 我玩弄的一個想法是創建一個自定義Camel處理器來處理URI連接。
最終,我的工作解決方案是站起來第二個基礎設施; 網關代理,我們可以控制其主機名並確保符合標准。 我們在網關上設置了一個代表壞端點的端點。 然后,我們將服務配置為聯系網關的端點,確定它有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.