0

これは質問のバリエーションです。Camelの CXF コンポーネントで onException(Exception.class) をキャッチしないで質問しました。

上記でClausが提案したソリューションを実装しましたが、機能しません。グローバル レベルで HandleFault = true を設定したときに onCompletion がトリガーされる理由がわかりません。

コードを大幅に変更したため、同じ質問をしますが、いくつか変更があります。

私のルートは次のようになります: ルート 1(camel-cxf エンドポイント) -> ルート 2(直接) -> ルート 3(直接)。ルート 3 では、ランタイム例外である WebApplicationException をスローしています (これを MyWSException でラップしています)。

コンテキスト レベルで HandleFault を true に設定しました。

getContext().setHandleFault(true);

グローバル レベルでの onException ハンドルは次のようになります。

onException(Exception.class, MyWSException.class)
        .process(new Processor(){
            @Override
            public void process(Exchange exchange) throws Exception {
                System.out.println("In onException Exception and IServicesWSException");
            }
        })
        .to("direct:IServicesWSExceptionHandler");

私はまた、このように見えるローカルのもの(ルート固有)を持っています。

from("cxf:bean:ordermanagementservice")
        .routeId("ordermanagementservice")
        .startupOrder(2)
        .onException(Throwable.class)
            .handled(true)
            .setBody().simple(PROCESS_RESULT_FAILED)
            .process(new Processor(){
                @Override
                public void process(Exchange exchange) throws Exception {
                    exchange.getIn().setHeader(AuditConstants.AUDIT_MAP_KEY.getValue(), AuditParam.AUDIT_ATTR_STATUS_ORDER);
                }
            })
            .beanRef("AuditManager", "audit")
            .to("direct:IServicesWSExceptionHandler")
            .end()

私の onCompletion(ルート固有) は次のようになります。

.onCompletion()
            .setBody().simple(PROCESS_RESULT_SUCCESS)
            .process(new Processor(){
                @Override
                public void process(Exchange exchange) throws Exception {
                    exchange.getIn().setHeader(AuditConstants.AUDIT_MAP_KEY.getValue(), AuditParam.AUDIT_ATTR_STATUS_ORDER);
                }
            })
            .beanRef("AuditManager", "audit")
            .end()

助けてください。質問が重複していると思われる場合は、お詫び申し上げます。非常に絶望的です。

前もって感謝します。

4

0 に答える 0