2

キャメルには次のルートがあります

<route>
    <from uri="target/in"/>
    <doTry> 
        <to uri="validator:schema.xsd"/>
        <to uri="file:target/messages/validation/valid?fileName=a.xml"/>
        <doCatch> 
            <exception>org.apache.camel.ValidationException</exception>             
            <to uri="file:target/messages/validation/invalid?fileName=a.xml"/>
       </doCatch>
    </doTry> 
</route>

この投稿のようにXMLファイルが検証に合格しない場合にエラーメッセージを受け取りたい

http://camel.465427.n5.nabble.com/XML-Validation-getting-to-the-error-messages-using-Camel-td4768229.html

しかし、Spring DSLでそれを行うにはどうすればよいですか?

4

3 に答える 3

2

参照されたスレッドでClausが述べているように:

例外の原因 = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Exception.class);

したがって、このルートは例外を保存する必要があります。

<route>
    <from uri="target/in"/>
    <doTry> 
        <to uri="validator:schema.xsd"/>
        <to uri="file:target/messages/validation/valid?fileName=a.xml"/>
        <doCatch> 
            <exception>org.apache.camel.ValidationException</exception>     
            <transform>
               <simple>${property.CamelExceptionCaught}</simple>
            </transform 
            <to uri="file:target/messages/validation/invalid?fileName=a.xml"/>
       </doCatch>
    </doTry> 
</route>
于 2013-01-16T16:01:17.790 に答える
1

あるファイルで例外を送信し、別のファイルで不良 xml を送信できます。

<route>
    <from uri="target/in"/>
    <doTry> 
        <to uri="validator:schema.xsd"/>
        <to uri="file:target/messages/validation/valid?fileName=a.xml"/>
        <doCatch> 
            <exception>org.apache.camel.ValidationException</exception>
            <setHeader headerName="CamelOverruleFileName">
                <simple>${file:onlyname.noext}.${date:now:yyyyMMdd_HHmmssSSS}.xml</simple>
            </setHeader>
            <to uri="file:target/messages/validation/invalid/"/>
            <setBody>
                <simple>Got "${exception.message}" with this stack\n${exception.stacktrace}\n${body}</simple>
            </setBody>
            <setHeader headerName="CamelOverruleFileName">
                <simple>${file:onlyname.noext}.${date:now:yyyyMMdd_HHmmssSSS}.xml.error</simple>
            </setHeader>
            <to uri="file:target/messages/validation/invalid/"/>
        </doCatch>
    </doTry> 
</route>
于 2015-02-10T22:46:07.990 に答える
1

サンプル コードのように例外情報をファイルに保存する場合は、文字列に変換する必要があります。そうしないと、Camel がスキーマ検証例外を java.io.inputStream に変換できないため、ファイルを保存できないという別の例外が発生します。

<route>
    <from uri="target/in"/>
    <doTry> 
        <to uri="validator:schema.xsd"/>
        <to uri="file:target/messages/validation/valid?fileName=a.xml"/>
        <doCatch> 
            <exception>org.apache.camel.ValidationException</exception>     
            <transform>
               <simple>${property.CamelExceptionCaught}</simple>
            </transform>
            <transform>
               <simple>${bodyAs(String)}</simple>
            </transform>
            <to uri="file:target/messages/validation/invalid?fileName=a.xml"/>
       </doCatch>
    </doTry> 
</route>
于 2013-04-26T20:38:58.810 に答える