我有以下处理文件(输入)的 Apache Camel Spring XML 配置。我尝试在复制文件之前重命名文件(移动选项)。我希望文件的名称包含一个字符串,该字符串是从返回字符串(getHash)的 bean 调用方法的结果。
阿帕奇骆驼版本
<dependency>
<groupId>org.apache.camel</groupId>
<version>3.0.0</version>
<type>pom</type>
</dependency>
骆驼上下文.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 类,该类生成一些要使用的字符串输出(或可转换为字符串):
fileName="uniquefile-${bean:myguidgenerator.generateid}.txt"
https://camel.apache.org/manual/latest/file-language.html
关于我所缺少的任何想法?谢谢!
更新:根据朱利安的回答,在“${bean:videoProcessor.getHash}”中添加了“$”符号(错字):问题没有解决(同样的例外)