Apache Camel Spring XML-从文件名表达式调用Bean方法

问题描述 投票:0回答:1

我具有以下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&amp;moveFailed=.bad&amp;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&amp;moveFailed=.bad&amp;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}”中添加了“ $”符号(典型):问题未解决(相同的异常)

java spring apache-camel spring-camel eip
1个回答
0
投票

我不熟悉Camel XML,因为我发现Camel DSL更易于阅读和使用。但是,在骆驼的文档中,您提供的是${bean:myguidgenerator.generateid},而您在路线中未使用“ $”符号:fileName={bean:videoProcessor.getHash}

© www.soinside.com 2019 - 2024. All rights reserved.