簡體   English   中英

使用包含Camel HTTP4下划線的URI

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM