2

CamelとCXFは初めてです。Webサービスからスローされた障害メッセージを後処理しようとしています。ただし、CXFはそれらを障害例外としてのみスローするため、ラクダのルーティングは中止され、エラーハンドラが呼び出されます。

CamelまたはCXFを微調整して、CXF自体が受信したのと同じように障害メッセージを取得するにはどうすればよいですか。

  1. これを実現できる構成はありますか?
  2. または、これを実現するためにインターセプターを提供する必要がありますか?
  3. または、エラーハンドラで処理する必要がありますか?
4

3 に答える 3

4

これを試すことができます:

from("endpoint")
  .doTry()
    .to("endpoint")
  .doCatch()
    .process(new Processor(
      @Override
      public void process(Exchange exchange) throws Exception {
        //Get the exception
        SoapFault fault = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, SoapFault.class);

        //Then you can change the body
      }
    ))
  .endDoTry()
.end();
于 2012-11-09T14:32:09.313 に答える
1

これは、Spring DSL のサンプル ルートです。これを試すことができます。これは、プロバイダーからの SOAP Fault がある場合に完全に機能します。

<route id="test-route-id">
        <from uri="direct:from-route"/>
        <doTry>
          <log message="Request Payload : ${body}" loggingLevel="INFO" logName="test-route-id"/>

          <to uri="direct:cxf-endpoint"/>

          <log message="Response Payload : ${body}" loggingLevel="INFO" logName="test-route-id"/>

          <doCatch>
            <exception>org.apache.cxf.binding.soap.SoapFault</exception>
            <to uri="direct:fault-handling-route"/>
          </doCatch>
        </doTry>
    </route>
于 2016-06-01T06:30:52.657 に答える
0

障害にのみ対応したい場合は、次のことができます。

onException(Fault.class).handled(true).process(new MyFaltProcessor()).stop();

于 2014-07-09T14:33:12.900 に答える