0

着信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&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>

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であることにも言及する必要があります。

助けてくれてありがとう!

4

1 に答える 1

1

Camel 2.10.4などのリリースが予定されているため、Camelの今後のリリースでこれを修正したと思います。そのスペースの修正に取り組んだことを覚えています。 https://issues.apache.org/jira/browse/CAMEL-5504

Camel 2.8.xはサポートされなくなったため、自分で問題にパッチを適用する必要があります。または、Camel2.10.3を含むServiceMix4.5.0にアップグレードします。

于 2013-02-16T08:13:42.923 に答える