gpt4 book ai didi

java - 如何使用 Apache Camel 实现直通 JAX-RS 代理?

转载 作者:搜寻专家 更新时间:2023-11-01 03:44:40 26 4
gpt4 key购买 nike

这是使用 Camel 2.5.0

路线很简单。起点是 jetty://.../web/service/path 路线的终点是 http://real-webservice-host/web/service/path .我遇到的问题是,在调用远程 Web 服务时,它没有被正确调用。

具体来说,当我在 http 组件上使用 bridgeEndpoint=true 选项时,不会设置 Content-Type header 。这导致我的远程 JAX-RS 服务报告错误 415 Unsupported Media Type。如果我没有在 http 组件上设置 bridgeEndpoint 选项,那么我必须去设置主机 header 以指向我已经在 http 端点 URI 中声明的主机。

我希望能够做的是:

from("jetty://host/path?matchOnUriPrefix=true").to("http://jaxrs-host/path")

并将 HTTP 方法、 header 和正文代理到远程端点。

我有一个解决方法,使用代理请求的 CXFRS bean:

@Path("/api/address")
class AddressServiceProxy {

@BeanProperty
var targetUrl : String = _

@POST
@Consumes(Array("application/xml"))
@Produces(Array("application/xml"))
@Path("/validation")
def validate(in: InputStream) = {
WebClient.create(targetUrl).post(in, classOf[String])
}

}

在 spring 配置中:

<bean id="addressServiceProxy" class="beans.AddressServiceProxy">
<property name="targetUrl"
value="http://localhost:9000/api/address/validation"/>
</bean>

在 route :

from("jetty://http://0.0.0.0:8080/api/address?matchOnUriPrefix=true")
.to("cxfbean:addressServiceProxy")

这种方法有效,但需要我复制我正在代理的 JAX-RS 端点。这是解决问题的最佳方法,还是有更好的方法?

最佳答案

这是 camel-http 的一个错误,我刚刚创建了一个 JIRA并将为其提交快速修复。

关于java - 如何使用 Apache Camel 实现直通 JAX-RS 代理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4810050/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com