石鹸と休息の間を単純にプロキシする簡単な方法はありません。REST サービスは、すべてリソースと CRUD (作成/読み取り/更新/削除) に関するものです。ペイロードは何でもかまいませんが、多くの場合は JSON ですが、XML、プレーン テキスト、またはその他の形式が有効です。SOAP は、独自に定義されたメソッドを持つ XML のみです。
Camel でこれに関連するすべてのコンポーネントについての混乱を理解しています。
アプローチを選択する際には、いくつかの点に留意する必要があります。
本当に必要な SOAP スタックの量は? ほとんどの場合、単純な SOAP エンベロープを受信し、WS-addressing、ws-security などを使用せずにペイロードを抽出するなど、基本的な機能のみが必要です。
コントラクトファーストまたはコードファーストのアプローチはありますか? つまり、SOAP サービスはすでに Java クラス/インターフェースによって定義されていますか、それとも WSDL がありますか?
Tomcat、Jetty、JavaEE アプリ サーバーなどのサーブレット コンテナー (非常に一般的) 内にキャメル インスタンスをデプロイしていますか? 何らかの理由でリクエストを処理するために、そのサーブレット コンテナを使用する必要がある場合があります (Web サーバーの仮想ホスト、ファイアウォールなどの何らかの理由で、同じポート/サーバー/ドメイン名からすべてのリクエストを取得するため)。その場合、CXF は少しトリッキーになるかもしれません。それ以外の場合、キャメルは組み込みの jetty コアを使用してリスナーを配置できます。
つまり、最初に契約し、serverletcontainer 内でラクダを実行します。開始するのが非常に簡単なので、私は spring-ws を好みます。 spring-ws コンポーネント. 春に最初のワイヤリングを行うだけで、WSDL から何かを生成する必要さえありません。メッセージを取得するための soap-action、uri、または rootq の名前を指定するだけです。
from("spring-ws:soapaction:http://example.com/GetFoo?endpointMapping=#endpointMapping")
次に、XML を取得します。
camel から Web サービスをホストする必要がある場合、ペイロード モードの CXF は非常に適切であり、ほとんど同じように動作します。
from("cxf:somename:http://localhost:8765?wsdl=somewsdlfile.wsdl&dataFormat=PAYLOAD")
すでに Java でサービスを定義している場合は、Jetty コンポーネントでSOAP データ形式を使用して、非常に軽量なソリューションを実現できます。
SoapJaxbDataFormat soap = new SoapJaxbDataFormat("com.example.customerservice", new ServiceInterfaceStrategy(CustomerService.class));
from("jetty:http://localhost:9832/soapsrv")
.marshal(soap) // and other transforms here
.to("http://somerestservicehost/srv");
または。CXF または CXF-bean を使用した完全な CXF ソリューションを使用してください。ラクダのウェブサイトにはたくさんの例があります。ただし、コンポーネントはかなり大きく、やや扱いにくい場合があります。
休息についても選択肢はありますが、その部分はより単純です。Rest は、いくつかのコンテンツを作成すること (soap メッセージからコンテンツを抽出し、おそらく xml を json にマップすることによって) に大きく関係しています。次に、残りのサーバーに対して HTTP エンドポイントを呼び出すだけです。HTTP4 または HTTP コンポーネントは、この多くのことを行います。
CXFRS は、CXF が好きな場合に適しています。特にクラスを使用して残りのサービスをモデル化する場合は、いくつかの支援を提供できます。