Ashay Batwal
Ashay Batwal

Reputation: 5613

Camel XSLT message routing issue

I am routing a message from queue->converting it using xslt and forwarding it to another queue, log.

My Camel configuration is as follows:

<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>

On running the program i get the following error:

Caused by: org.apache.camel.ExpectedBodyTypeException: Could not extract IN message body as type: interface javax.xml.transform.Source body is: null at org.apache.camel.builder.xml.XsltBuilder.getSource(XsltBuilder.java:482)[64:org.apache.camel.camel-core:2.10.1] at org.apache.camel.builder.xml.XsltBuilder.process(XsltBuilder.java:125)[64:org.apache.camel.camel-core:2.10.1] at org.apache.camel.impl.ProcessorPollingConsumer.receive(ProcessorPollingConsumer.java:58)[64:org.apache.camel.camel-core:2.10.1]

Any ideas what is causing this issue?

Upvotes: 2

Views: 3724

Answers (1)

Petter Nordlander
Petter Nordlander

Reputation: 22279

You should not use the XSLT component in that manner.

You should particularly not try to use "from" with XSLT, but rather use it in combination with any internal transport component (directly for the instance). I think the following will do what you want.

<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>

Upvotes: 2

Related Questions