我具有以下Apache Camel Spring XML配置,用于处理文件(输入)。我尝试在复制文件之前对其进行重命名(移动选项)。我希望文件名包含一个字符串,这是从bean返回一个字符串(getHash)的方法调用的结果。
Apache Camel版本
<dependency>
<groupId>org.apache.camel</groupId>
<version>3.0.0</version>
<type>pom</type>
</dependency>
camel-context.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- Configures the Camel Context-->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
<camelContext id="camelContext-89c763e9" xmlns="http://camel.apache.org/schema/spring">
<route id="FileConsumption" shutdownRoute="Defer">
<from id="_from2" uri="file:/home/spool_in/?move=.done&moveFailed=.bad&fileName={bean:videoProcessor.getHash}.{file:name.ext}"/>
<bean
beanType="org.mediaprocessor.VideoProcessor" id="_videoProcessor" ref="videoProcessor"/>
</route>
</camelContext>
<bean id="videoProcessor" class="org.mediaprocessor.VideoProcessor" />
</beans>
我在文件组件(路由的第一个端点)上有问题
<from id="_from2" uri="file:/home/matthieu/spool_in/?move=.done&moveFailed=.bad&fileName=${bean:videoProcessor.getHash}.{file:name.ext}"/>
Bean VideoProcessor.java
@Bean
public static String getHash(File file) throws NoSuchAlgorithmException, IOException {
//Use MD5 algorithm
MessageDigest md5Digest = MessageDigest.getInstance("MD5");
//Get the checksum
String checksum = getFileChecksum(md5Digest, file);
return checksum;
}
Apache Camel似乎无法识别videoProcessor bean并引发以下异常:
Caused by: org.apache.camel.FailedToCreateRouteException: Failed to create route FileConsumption at: >>> Bean[] <<< in route: Route(FileConsumption)[From[file:/home/spool_in/?mo... because of bean, ref or beanType must be provided
...
Caused by: java.lang.IllegalArgumentException: bean, ref or beanType must be provided
at org.apache.camel.component.bean.DefaultBeanProcessorFactory.createBeanProcessor(DefaultBeanProcessorFactory.java:67)
at org.apache.camel.reifier.BeanReifier.createProcessor(BeanReifier.java:47)
at org.apache.camel.reifier.ProcessorReifier.makeProcessorImpl(ProcessorReifier.java:571)
at org.apache.camel.reifier.ProcessorReifier.makeProcessor(ProcessorReifier.java:537)
at org.apache.camel.reifier.ProcessorReifier.addRoutes(ProcessorReifier.java:250)
at org.apache.camel.reifier.RouteReifier.doCreateRoute(RouteReifier.java:384)
... 37 more
根据文档:
最后,我们还可以使用bean表达式来调用POJO类生成一些String输出(或可转换为String)以使用过:
fileName =“ uniquefile-$ {bean:myguidgenerator.generateid} .txt”
https://camel.apache.org/manual/latest/file-language.html
关于我缺少的任何想法?谢谢!
Update:在“ $ {bean:videoProcessor.getHash}”中添加了“ $”符号(典型):问题未解决(相同的异常)
我不熟悉Camel XML,因为我发现Camel DSL更易于阅读和使用。但是,在骆驼的文档中,您提供的是${bean:myguidgenerator.generateid}
,而您在路线中未使用“ $”符号:fileName={bean:videoProcessor.getHash}