Camel + sql +错误处理

时间:2014-05-19 08:28:58

标签: apache-camel

我有一个任务来处理路由中的所有传入消息并将它们保存到数据库。 我的路由从webservice(camel-cxf)开始,然后处理到ejb并返回soap响应。

我决定使用camel-sql组件。至于我在记录传入消息方面没有任何问题:

<camelContext id="InstitutionContext" xmlns="http://camel.apache.org/schema/spring">

    <onException>
        <exception>org.example.MyException</exception>
        <continued><constant>true</constant></continued>
        <to uri="bean:myExceptionHandler?method=handle" />
    </onException>

    <route id="InstitutionRoute" >
        <from uri="direct:start" />
        <to uri="sql:insert into translog(id,type,data) values(2,'IN',#)" />
        <split>
            <tokenize token="\n" />
            <unmarshal>
                <csv delimiter=";" />
            </unmarshal>
            <process ref="InstitutionProcessorTest" />
        </split>
        <to uri="bean:myExceptionHandler?method=checkErrors" />
    </route>

</camelContext>

但我不知道如何处理异常并以SOAP消息的形式保存它们。

<onCompletion onFailureOnly="true">
    <to uri="sql:insert into translog(id,type,data) values(2,'ERROR',#)" />
</onCompletion> 

但它会在数据列中保存原始邮件。有没有可以提供帮助的机构?

1 个答案:

答案 0 :(得分:0)

我可能误解了这个问题,但是如果有异常,它看起来你正试图以XML格式保存SOAP消息。

默认情况下,CXF的dataFormat是POJO,意味着它在camel路由周围发送POJO,即SOAP XML转换为POJO。

有两种选择:

  1. 将dataformat设置为message或payload。这将通过camel路由而不是POJO
  2. 发送XML消息
  3. 将POJO转换为XML消息并保存。