Camel XSLT消息路由问题

时间:2012-10-17 07:14:01

标签: apache-camel

我正在路由来自queue->的消息,使用xslt转换它并将其转发到另一个队列,log。

我的Camel配置如下:

<camelContext xmlns="http://camel.apache.org/schema/spring"
    streamCache="true">
    <route>
        <from uri="jms:queue:TradeEventsToESBQueue" />
        <multicast>
            <to uri="xslt:com/tpt/esb/tradeevent/confirmation.xsl" />
            <to uri="xslt:com/tpt/esb/tradeevent/valuation.xsl" />
        </multicast>
    </route>

    <route>
        <from uri="xslt:com/tpt/esb/tradeevent/confirmation.xsl" />
        <to uri="log:output?showAll=true" />
    </route>

    <route>
        <from uri="xslt:com/tpt/esb/tradeevent/valuation.xsl" />
        <to uri="jms:queue:TradeValuationStartQueue1?jmsMessageType=Text" />
        <to uri="log:output?showAll=true" />
    </route>
</camelContext>

运行程序时出现以下错误:

  

引起:org.apache.camel.ExpectedBodyTypeException:无法   将IN消息体提取为类型:interface javax.xml.transform.Source   body是:null at   org.apache.camel.builder.xml.XsltBuilder.getSource(XsltBuilder.java:482)[64:org.apache.camel.camel核:2.10.1]     在   org.apache.camel.builder.xml.XsltBuilder.process(XsltBuilder.java:125)[64:org.apache.camel.camel核:2.10.1]     在   org.apache.camel.impl.ProcessorPollingConsumer.receive(ProcessorPollingConsumer.java:58)[64:org.apache.camel.camel核:2.10.1]

任何想法是什么导致了这个问题?

1 个答案:

答案 0 :(得分:2)

您不应该以这种方式使用XSLT组件。

您应该特别尝试在XSLT中使用“from”,而是将其与任何内部传输组件(直接用于实例)结合使用。我认为以下会做你想做的事。

<route>
    <from uri="jms:queue:TradeEventsToESBQueue" />
    <multicast>
        <to uri="direct:confirmation"/>
        <to uri="direct:valuation"/>
    </multicast>
</route>

<route>
  <from uri="direct:confirmation"/>
  <to uri="xslt:com/tpt/esb/tradeevent/confirmation.xsl" />
  <to uri="log:output?showAll=true" />
</route>

<route>
  <from uri="direct:valuation"/>
  <to uri="xslt:com/tpt/esb/tradeevent/valuation.xsl" />
  <to uri="jms:queue:TradeValuationStartQueue1?jmsMessageType=Text" />
  <to uri="log:output?showAll=true" />
</route>