Camel を使用して一種のトリガー EIP を実装したいと考えています。
私が欲しいのはこれです: 私はラクダルートのエンドポイントとして機能する Web サービスを持っています。このサービスはリクエストを受信し、リクエストが整形式である場合は、2 つのことを並行して実行する必要があります: 単純なメッセージ「OK」または「ACK」で元の送信者に応答を返すか、またはリクエストが整形式でない場合応答は "NOK" または "RPT" (メッセージの繰り返しを要求) になります。同時に、メッセージが適切な形式である場合は、元のメッセージを情報で強化し、結果のメッセージを送信する別の Web サービスに送信する必要があります (または Exchange、ここでの正しい用語はわかりません)。 ) JMS 実装に。
私のエンドポイントはプロセスのトリガーとして機能しますが、呼び出し元にすぐに応答を返す必要があります。
私の質問は、これを行うためにどのコンポーネントを使用できますか? Spring DSL でルートを実装しています。私は使用して始めました:
<route>
<from uri="cxf:bean:clientEventEip?dataFormat=MESSAGE"/>
<multicast>
<to uri="bean:messageResponse"/><!-- checks the message and returns 'OK' -->
<to uri="bean:messageEnricher"/><!-- Enriches and sends msg to another WS -->
</multicast>
</route>
しかし、クライアントでエラー応答が返されます:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>Exception occurred during execution on the exchange: Exchange[Message: [Body is instance of java.io.InputStream]]</faultstring>
</soap:Fault>
</soap:Body>
</soap:Envelope>
そしてIDEでは、次のような多くの例外があります:
org.apache.camel.CamelExecutionException
と
org.apache.camel.InvalidPayloadException: No body available of type: org.w3c.dom.Document but has value: org.apache.cxf.transport.http.AbstractHTTPDestination$1@b8c6fb of type: null on: Message: [Body is instance of java.io.InputStream]. Caused by: Error during type conversion from type: null to the required type: org.w3c.dom.Document with value org.apache.cxf.transport.http.AbstractHTTPDestination$1@b8c6fb due org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Premature end of file.. Exchange[Message: [Body is instance of java.io.InputStream]]. Caused by: [org.apache.camel.TypeConversionException - Error during type conversion from type: null to the required type: org.w3c.dom.Document with value org.apache.cxf.transport.http.AbstractHTTPDestination$1@b8c6fb due org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Premature end of file.]
camel ルートで Bean の 1 つだけを使用すると、すべてがうまくいき、期待どおりの応答が得られます。
それは私の間違いだと確信しています。間違ったコンポーネントを使用しているに違いありませんが、これを解決する方法がまだわかりません。誰かが私にできる助けに感謝します!