2011-01-26 72 views
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端點。這是最好的方式去做,還是有更好的方法?

+0

您使用的是什麼版本的駱駝? – 2011-01-27 05:34:53

+0

應該包括 - 2.5.0 – 2011-01-27 14:48:30

回答

1

這是camel-http的一個bug,我剛剛爲它創建了一個JIRA,並且會爲它做一個快速修復。