2

キューからメッセージをルーティングしています-> xslt を使用して変換し、別のキューであるログに転送しています。

私のキャメルの設定は次のとおりです。

<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 本文は: org.apache.camel.builder.xml.XsltBuilder.getSource(XsltBuilder.java で null :482)[64:org.apache.camel.camel-core:2.10.1] org.apache.camel.builder.xml.XsltBuilder.process(XsltBuilder.java:125)[64:org.apache.camel. camel-core:2.10.1] org.apache.camel.impl.ProcessorPollingConsumer.receive(ProcessorPollingConsumer.java:58) [64:org.apache.camel.camel-core:2.10.1] で

この問題の原因は何ですか?

4

1 に答える 1

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>
于 2012-10-17T08:13:51.670 に答える