Apache camel 3.18.3 http组件HTTP_PATH标头无法与toD一起使用

1mrurvl1  于 2022-12-04  发布在  Apache
关注(0)|答案(1)|浏览(177)

我试着在camel toDeip文档页面中使用这个例子

from("direct:login")
  .setHeader(Exchange.HTTP_PATH, simple("/login"))
  .setHeader(Exchange.HTTP_QUERY, simple("userid=${header.userName}"))
  .toD("http:myloginserver:8080")
  .removeHeader(Exchange.HTTP_PATH)
  .removeHeader(Exchange.HTTP_QUERY);

但是没有使用报头Exchange.HTTP_PATH,因此作为结果,调用下面的URL:http://myloginserver:8080?userid=xxx而不是http://myloginserver:8080/login?userid=xxx
我调试了代码,发现问题可能出在第96行的createPreProcessor方法中的org.apache.camel.http.base.HttpSendDynamicAware类中。
在这个方法中,toD中的url被解析,路径是一个空字符串“",并且不检查是否设置了Exchange.HTTP_PATH
我是从camel 3.11.x升级的,它以前可以工作,但是在那个版本中没有HttpSendDynamicAware类。
有没有办法在不改变代码的情况下让它工作?
谢谢

jtoj6r0c

jtoj6r0c1#

我在Apache Camel JIRA https://issues.apache.org/jira/browse/CAMEL-18782中创建了问题
多亏了易卜生
这是一个错误,将在下一个版本中修复。
解决方法如下:

from("direct:login")
.setHeader(Exchange.HTTP_PATH, simple("/login"))
.setHeader(Exchange.HTTP_QUERY, simple("userid=${header.userName}"))
.toD().allowOptimisedComponents(false).uri("http:myloginserver:8080")
.removeHeader(Exchange.HTTP_PATH)
.removeHeader(Exchange.HTTP_QUERY);

相关问题