HttpComponent的选项'getWithBody'在Apache Camel中无法运作

yquaqz18  于 2022-11-07  发布在  Apache
关注(0)|答案(2)|浏览(173)

Apache Camel的版本为2.18.1
在2.x的文档中,提供了https://camel.apache.org/components/2.x/http4-component.htmlgetWithBodydeleteWithBody选项作为查询参数。

  • 删除正文(生成器):HTTP DELETE是否应包含消息正文。默认情况下,HTTP DELETE不包含任何HTTP正文。但是,在极少数情况下,用户可能需要包含消息正文。默认值:假的
  • getWithBody(生成器):HTTP GET是否应包括消息正文。默认情况下,HTTP GET不包括任何HTTP正文。但是,在极少数情况下,用户可能需要包括消息正文。默认值为false

但是,当我在端点URI的末尾连接这两个参数中的一个时,它不会被识别为选项,而是作为普通查询参数传递给端点,而其他查询参数选项则被视为组件选项,不会转发给端点。
当我检查源代码时,我发现选项是通过与HttpEndpoint*(org.apache.camel.component.http4)* 和HttpCommonEndpoint*(org.apache.camel.http.common)* 类的字段和方法进行匹配来识别的。getWithBodydeleteWithBody字段在这些类中不存在,而其他选项可以在这些类的字段中找到。
我能不能假设文档是错误的?如果是这样的话,当http方法是GET或DELETE时,我如何实现用Camel的HttpComponent(Http4Component)发送body?

js4nwp54

js4nwp541#

选项deleteWithBody是在Apache Camel 2.19.0中引入的。请参阅CAMEL-10916
选项getWithBody是在Apache Camel 3.0.0中引入的,并向后移植到2.25.0。请参阅CAMEL-14118
对于github上存档的此类旧版本使用文档,未在网站-https://github.com/apache/camel/blob/camel-2.18.x/components/camel-http4/src/main/docs/http4-component.adoc上发布
您需要更新到较新版本或实现自定义组件,以覆盖HTTP 4组件中某些方法在2.18.1中没有启用此OOTB选项

zzwlnbp8

zzwlnbp82#

我同意@Bedla给出的答案。
这就是我们所做的。
我们检查了代码并进行了调试-这使我们意识到,在Camel交互时,如果GET调用有一个1,它将丢弃主体。它将作为正常的GET请求发送,因为Camel版本3.x.x仅支持它。
我们尝试了不同的方法来强制添加主体。这也是失败的,因为我们所添加的任何内容都会被camel丢弃。
我们当时使用的是camel v2.22.1。升级到更高版本(如camel 3.x.x)将是一个巨大的飞跃,因为将包含多个更改,所以幸运的是,camel团队将此功能向后移植,将GET请求和正文(从这里开始,getWithBody)发送到camel v2.25.0
编码级别更改:将getWithBody=true附加到请求URL

更新的camel模块

camel-core-2.25.0.jar
camel-cxf-transport-2.25.0.jar
camel-cxf-2.25.0.jar
camel-core-xml-2.25.0.jar
camel-http-common-2.25.0.jar
camel-jaxb-2.25.0.jar
camel-spring-2.25.0.jar
camel-soap-2.25.0.jar
camel-cdi-2.25.0.jar
camel-jdbc-2.25.0.jar
camel-http4-2.25.0.jar

特别说明请注意,在每个文件夹位置下,都有一个modules.xml文件。您需要打开该文件,并将jar文件版本号更改为您要使用的版本号。在本例中为2.25.0

就是这样,快乐编码!

相关问题