現在、Apache Camel(camel-springを使用)でRESTアプリケーションを開発していて、混乱しています。私はREST DSLで定義された一連のエンドポイントを持っていますが、いくつかは単に別のサーバーへのプロキシ要求であり、他のものはデータ集約のために定義したルートに渡されます。次のようにDSLに見える:Apache Camel REST DSL 405メソッドが許可されていません
<rest>
<!-- Specific DSL requests -->
<get uri="/v1/aggregate/data" consumes="application/json" produces="application/json">
<to uri="direct:dataEnrichment" />
</get>
<get uri="/v1/customer/{custId}/devices" consumes="application/json" produces="application/json">
<to uri="direct:getCustomerDevices" />
</get>
<get uri="/v1/login/{custId}" consumes="application/json" produces="application/json">
<to uri="direct:getCustomer" />
</get>
<get uri="/v1/status" consumes="application/json" produces="application/json">
<to uri="direct:statusInfo" />
</get>
<!-- Proxy requests -->
<post uri="/v1?matchOnUriPrefix=true&chunked=false">
<to uri="direct:proxyOut" />
</post>
<get uri="/v1?matchOnUriPrefix=true&chunked=false">
<to uri="direct:proxyOut" />
</get>
<put uri="/v1?matchOnUriPrefix=true&chunked=false">
<to uri="direct:proxyOut" />
</put>
<delete uri="/v1?matchOnUriPrefix=true&chunked=false">
<to uri="direct:proxyOut" />
</delete>
</rest>
アイデアはありません完全一致URIを持つすべての要求は(Apacheのキャメルではない)別のシステムに介してプロキシを受けるということです。これにより、他のシステム上のすべてのREST APIの定義を書く必要がなくなります(多くあります)。
URIに{custId}の2つのリクエストを追加するまで、すべてうまくいっていました。これらのリクエストはうまくいきますが、プロキシを取得するURIを試行するたびに、405 Method Not Allowedが取得されます。
EDIT: 私は、JettyをRESTコンポーネントとして使用しているとも言及しておきます。 Camelはorg.apache.camel.spring.Mainを使用してスタンドアロンで実行しています。私はこの段階でPostmanと呼んでいますが、405の応答はJetty/Camelから来ているようです。
は、RESTの構成は(セキュリティハンドラは、桟橋BasicAuthenticatorはを使用している)次のようになります。
<route id="proxyOutbound">
<description>A simple outbound route to proxy REST requests.</description>
<from uri="direct:proxyOut" />
<removeHeaders pattern="Authorization" />
<to
uri="http://{{remoteAddress}}/data/json?bridgeEndpoint=true&throwExceptionOnFailure=false" />
</route>
:次のようになりますproxyOutルート、:
<restConfiguration contextPath="/mobilegateway/api" scheme="http"
host="0.0.0.0" bindingMode="off"
enableCORS="true"
component="jetty" port="8079">
<endpointProperty key="handlers" value="securityHandler" />
<endpointProperty key="sessionSupport" value="true" />
<endpointProperty key="httpClient.idleTimeout" value="30000" />
</restConfiguration>
プロキシはすべて、ダイレクトに送信要求します
URIの/ v1の後のすべてがプロキシされた要求に渡されることを意図しています。私はWiresharkを使って確認しましたが、リクエストはプロキシされていません。パス内の{custId}でルートを削除すると、すべて正常に動作します。
私は何か間違っているのですか、これはラクダ/ラクダスプリングのバグですか?
誰もが私も言及している必要があります –
を助けることができる前に、あなたの質問に詳細を追加します。私は残りのコンポーネントとしてJettyを使用しています。 Camelはorg.apache.camel.spring.Mainを使用してスタンドアロンで実行しています。 –
他の情報がありますか?ありがとう。 –