着信Httpリクエストを処理し、リソースパスに基づいて他のHttpコンシューマーにルーティングする単純なCamelルートがあります。すべて正常に動作しますが、java.net.URISyntaxException:パスにスペースを使用すると、パスに不正な文字が表示されます。他の特殊文字は正常に機能しているようです。
私はRESTfulAPIを構築しており、現在ブラウザーを使用してAPIをテストしています。
これが私のルートのSpringDSLです:
<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&throwExceptionOnFailure=false"/>
</when>
<when>
<simple>${in.header.CamelHttpPath} contains 'blah2'</simple>
<to uri="http://localhost:10002/api?bridgeEndpoint=true&throwExceptionOnFailure=false"/>
</when>
</choice>
</route>
Camel Contextでトレースを有効にしたところ、CamelHttpPathがエスケープ文字「%20」をスペースに置き換えていることがわかりました。また、特殊文字を逃れなかったCamelHttpUriがあることもわかりました。
Spring DSLのハックとして、choice要素の前に次を追加しました。
<setHeader headerName="CamelHttpPath">
<simple>${in.header.CamelHttpUri}</simple>
</setHeader>
これで私の問題は解決しましたが、これを行うためのより良い方法があると確信しています。一部のプロパティの設定を見逃しましたか、それともルートDSLが正確ではありませんか?
また、CamelHttpPathとCamelHttpUriの違いは何ですか?
また、Apache ServiceMix 4.4.2でCamelコンテキストを使用しており、使用されているCamelバージョンは2.8.5であることにも言及する必要があります。
助けてくれてありがとう!