2013-02-16 101 views
0

我有一個簡單的駱駝路由處理傳入的Http請求,然後根據資源路徑路由到其他Http使用者。一切工作正常,但我擊中了java.net.URISyntaxException:在路徑中使用空間時路徑中的非法字符。 其他特殊字符似乎工作正常。阿帕奇駱駝URL與空間轉義

我正在構建一個RESTful API並且正在使用瀏覽器來測試我的API。

這裏是我的路線的春DSL:

<route id="API"> 
    <from uri="jetty:http://0.0.0.0/api?matchOnUriPrefix=true"/> 
    <bean ref="basicAuthBean"/> 
    <choice> 
    <when> 
     <simple>${in.header.CamelHttpPath} contains 'blah1'</simple> 
     <to uri="http://localhost:10001/api?bridgeEndpoint=true&amp;throwExceptionOnFailure=false"/> 
    </when> 
     <when> 
     <simple>${in.header.CamelHttpPath} contains 'blah2'</simple> 
     <to uri="http://localhost:10002/api?bridgeEndpoint=true&amp;throwExceptionOnFailure=false"/> 
    </when> 
    </choice> 
</route> 

我啓用了駱駝語境跟蹤,發現CamelHttpPath已經替換爲空轉義字符「%20」。我也看到有沒有逃過特殊角色的駱駝。

正如我在春天DSL一劈我添加選擇元素之前如下:

<setHeader headerName="CamelHttpPath"> 
    <simple>${in.header.CamelHttpUri}</simple> 
</setHeader> 

這解決了我的問題,但我敢肯定有一個更好的方式來做到這一點。我錯過設置一些屬性還是我的路由DSL不準確?

此外,CamelHttpPath和CamelHttpUri有什麼區別?

我還應該提到,我在Apache ServiceMix 4.4.2中使用Camel上下文,使用的Camel版本是2.8.5。

在此先感謝您的幫助!

回答

1

我想我們已經解決了這個問題,因爲像駱駝2.10.4等發佈後期駱駝版本。我記得在那個空間修復工作。 https://issues.apache.org/jira/browse/CAMEL-5504

由於不再支持Camel 2.8.x,您需要自行修補問題。 或升級到包含Camel 2.10.3的ServiceMix 4.5.0。

+0

感謝您的回覆。我認爲Service 4.5尚未公開發布。直到那時,我將與我的解決方法一起生活。 – bsam 2013-02-17 01:10:06