Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何正确配置此骆驼路线xml?_Java_Xml_Serialization_Routing_Apache Camel - Fatal编程技术网

Java 如何正确配置此骆驼路线xml?

Java 如何正确配置此骆驼路线xml?,java,xml,serialization,routing,apache-camel,Java,Xml,Serialization,Routing,Apache Camel,我正在尝试使用Camel的XML构建一个有点奇特的Camel路由 我有两个ActiveMQ队列,toProcess和ready,以及一个MySQL数据库。数据库有一个widgets表,如下所示: widget_id | widget_name | widget_value (INT) (VARCHAR 50) (INT) 外部进程将原始字符串消息放置在toProcess队列上。这些消息是简单的字符串,例如: 起泡 嗡嗡声 福 等。我想使用Camel Quartz每隔5分钟轮询一次

我正在尝试使用Camel的XML构建一个有点奇特的Camel路由

我有两个ActiveMQ队列,toProcess和ready,以及一个MySQL数据库。数据库有一个widgets表,如下所示:

widget_id | widget_name | widget_value
(INT)       (VARCHAR 50)  (INT)
外部进程将原始字符串消息放置在toProcess队列上。这些消息是简单的字符串,例如:

起泡 嗡嗡声 福 等。我想使用Camel Quartz每隔5分钟轮询一次这个toProcess队列,并将这些consumes消息体中的字符串fizz、buzz等合并到JDBC SELECT语句中,该语句将查找小部件名称与字符串(如fizz或buzz)匹配的任何小部件

然后,我想获取从JDBC调用中检索到的每个小部件记录,并将其放在就绪队列中。最后,一个Burninator bean应该从ready消费,并将每个小部件POJO传递给它的BurninatorburninateWidget方法

因此,总结一下:

外部进程在toProcess队列中放置一个字符串,如fizz Camel Quartz作业每5分钟启动一次,并将fizz和任何其他作业排成队 Camel JDBC SELECT*来自widget,其中widget_name='fizz'->我怀疑我需要XPath 假设通过查询返回25个小部件记录 所有25个都得到序列化的二进制/JSON/XML?并将其置于就绪队列中 BurninatorburninateWidget一个接一个地出列就绪,并与下一个出列的小部件一起执行 以下是我目前掌握的情况,但我知道这是错误的:

<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
    <package>com.myapp.bus</package>
    <template id="camelTemplate"/>
    <route>
        <from uri="quartz://toProcessPollerJob?cron=*+5+*+*+*+?"/>
        <to uri="activemq:toProcess"/>
        <setBody>
            <constant>
                SELECT
                    *
                FROM
                    widgets
                WHERE
                    widget_name = ??? (e.g., fizz, buzz)
            </constant>
        </setBody>
        <marshall>
            <serialization/>
        </marshall>
        <to uri="activemq:ready"/>
        <unmarshall>
            <serialization/>
        </unmarshall>
        <to uri="bean:burninator?method=burninate"/>
    </route>
</camelContext>
除了参考我应该阅读的《骆驼在行动》一章之外,还有谁能给我指出正确的方向。具体来说,我遇到了麻烦:

使用widget_name的适当字符串值参数化JDBC SQL 将JDBCSQL返回的内容序列化为可以发送到就绪队列的内容 将就绪队列上的消息反序列化为Java小部件POJO
提前感谢。

您需要使用常数以外的其他语言,因为这只是一个常数。 例如simple、groovy甚至velocity等模板语言。 创建要使用的SQL的位置

试一试

<simple>
            SELECT
                *
            FROM
                widgets
            WHERE
                widget_name = '${body}'
</simple>
你能在这里看到支持的语言吗


或者使用模板框架(如Velocity或Freemarker)根据模板文件生成SQL。

我不喜欢这段代码,因为我担心SQL注入。。。除非camel jdbc已经准备好停止SQL注入?