在Camel HTTP4中使用包含下划线的URI

hve*_*iga 5 uri http apache-camel apache-httpclient-4.x

我们正在尝试使用Apache Camel2.16.3将一些数据推送到第三方HTTP端点。我们正在使用HTTP4组件。我们将uri,方法和查询参数设置为消息中的标头。但是,端点包含一个下划线(_),并且我们得到了如下异常:

引起原因:java.lang.IllegalArgumentException:无效的uri:https ://x_y.something.com/somePath?q_one = XXXX & q_two =YYYYY。如果要转发/桥接http端点,请在端点上启用bridgeEndpoint选项:端点[https4:// placeholder?throwExceptionOnFailure = false]

我一直在研究,看起来这_是URI中不应该存在的内容。该网站实际上说https://x_y.something.com/somePath无效但https://xy.something.com/somePath有效。

由于我无法更改第三方端点,是否可以以某种方式转义下划线?如果没有,是否还有其他解决方案,或者我们需要放弃Apache Camel吗?

Mil*_*vić 2

编辑 如果没有看到代码示例,我无法确定根本原因是什么,但如果我理解正确的话,您正在向 akka actor 发送一个 HTTP 请求,该 akka actor 从 Camel 端点消费。我的猜测是,您可能没有正确填充标头 - 无论原始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");
Run Code Online (Sandbox Code Playgroud)

所以我的猜测是这不是骆驼问题。