4
這是使用駱駝2.5.0如何使用Apache Camel實現傳遞JAX-RS代理?
這條路線很簡單。起點是jetty://.../web/service/path,路由的結尾是http://real-webservice-host/web/service/path。我遇到的問題是遠程Web服務被調用時,它不會被正確調用。
具體來說,當我在http組件上使用bridgeEndpoint = true選項時,Content-Type頭不會被設置。這會導致我的遠程JAX-RS服務報告錯誤415不支持的介質類型。如果我沒有在http組件上設置bridgeEndpoint選項,那麼我必須設置主機頭來指向我已經在http端點URI中聲明的主機。
我想什麼能夠做的是:
from("jetty://host/path?matchOnUriPrefix=true").to("http://jaxrs-host/path")
而且有HTTP方法,標題和正文代理到遠程端點。
我對這個使用CXFRS豆來代理請求解決方法:
@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>
,在該路由:
from("jetty://http://0.0.0.0:8080/api/address?matchOnUriPrefix=true")
.to("cxfbean:addressServiceProxy")
這種方法可行,但需要我複製我正在代理的JAX-RS端點。這是最好的方式去做,還是有更好的方法?
您使用的是什麼版本的駱駝? – 2011-01-27 05:34:53
應該包括 - 2.5.0 – 2011-01-27 14:48:30