You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache Camel 3.18.3中HTTP_PATH头在toD组件中失效求助

问题描述

我尝试使用Camel toD EIP文档中的示例代码:

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。

调试后发现问题出在org.apache.camel.http.base.HttpSendDynamicAware类的createPreProcessor方法第96行,该方法解析toD的URL时路径为空,未检查Exchange.HTTP_PATH是否已设置。

我是从Camel 3.11.x升级而来,旧版本无该类且功能正常,请问有没有无需修改代码的解决办法?

无需修改代码的解决办法
  • 直接在toD的URL中拼接路径:把Exchange.HTTP_PATH的内容直接整合到toD的目标地址里,修改后的代码如下:
from("direct:login")
  .setHeader(Exchange.HTTP_QUERY, simple("userid=${header.userName}"))
  .toD("http:myloginserver:8080${header.HTTP_PATH}")
  .removeHeader(Exchange.HTTP_PATH)
  .removeHeader(Exchange.HTTP_QUERY);

这种方式绕开了HttpSendDynamicAware对路径头的忽略问题,直接通过动态表达式把路径拼接到基础URL上,和旧版本的行为一致。

  • 禁用HttpSendDynamicAware组件:在Camel配置中添加以下配置,禁用这个动态感知类,让HTTP组件回到旧版本的处理逻辑:
    • 配置文件方式(properties格式):
    camel.component.http.send-dynamic-aware-enabled=false
    
    • Java代码配置方式:
    HttpComponent httpComponent = context.getComponent("http", HttpComponent.class);
    httpComponent.setSendDynamicAwareEnabled(false);
    
    该配置会关闭HttpSendDynamicAware的作用,恢复3.11.x版本中对Exchange.HTTP_PATH头的处理逻辑。

内容的提问来源于stack exchange,提问作者landal79

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 12:25:24