无法将SQL输出保存到Apache Camel中的文件

时间:2016-08-28 17:21:22

标签: apache-camel

我一直在尝试这个camel-sql示例从后端oracle中获取一些行。

数据源定义:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
    <property name="url" value="jdbc:oracle:thin:@localhost:port:sid"/>
    <property name="username" value="username"/>
    <property name="password" value="password"/>
</bean>

路线定义:

<route id="QueryTable">
    <from uri="timer:foo?period=5s"/>
    <to uri="sql:{{sql.selectOrder}}"/>
    <to uri="file:target/data/?fileName=data.txt"/>
</route>

它似乎正确地获取行,但是,不会创建该文件并报告以下异常。任何帮助都将受到高度赞赏。

  

at org.apache.camel.impl.converter.BaseTypeConverterRegistry.mandatoryConvertTo(BaseTypeConverterRegistry.java:198)       在org.apache.camel.impl.MessageSupport.getMandatoryBody(MessageSupport.java:105)       ......还有16个

2 个答案:

答案 0 :(得分:2)

http://camel.apache.org/sql-component.html

  

对于select操作,结果是List<Map<String, Object>>类型的实例,由JdbcTemplate.queryForList()方法返回。

您收到List<Map<String, Object>>作为查询的结果。如果你想将这个结果保存到文件,你必须按记录拆分列表(使用拆分器),将一个记录转换为字符串(也许你可以使用某种模板,或者只是加入字符串字段值)并保存(追加)这个字符串要归档。

答案 1 :(得分:0)

感谢您的帮助。这是我用来将resultSet保存到文件中的内容。

<from uri="timer:foo?repeatCount=1" />
    <to uri="sql:{{sql.selectOrder}}"/>
    <marshal>
     <csv delimiter="|" />
    </marshal>
 <to uri="file://target/test.csv?fileName=data.txt" />

当然,pom.xml必须添加以下依赖项。

<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-csv</artifactId>
 </dependency>