Apache camel 我可以在bean方法调用中直接使用体中的xpath吗?

Apache camel 我可以在bean方法调用中直接使用体中的xpath吗?,apache-camel,Apache Camel,目前,我正在Camel中使用此XML DSL: <route> ... <setProperty propertyName="inputFilepath"> <xpath resultType="java.lang.String">/tla:InputType/tla:inputFilepath/text()</xpath> </setProperty> <setProperty p

目前,我正在Camel中使用此XML DSL:

<route>
    ...
    <setProperty propertyName="inputFilepath">
        <xpath resultType="java.lang.String">/tla:InputType/tla:inputFilepath/text()</xpath>
    </setProperty>
    <setProperty propertyName="outputFilepath">
        <xpath resultType="java.lang.String">/tla:InputType/tla:outputFilepath/text()</xpath>
    </setProperty>
    <bean ref="bean1" method="process(${property.inputFilepath},${property.outputFilepath})"/>
    ...

...
/tla:InputType/tla:inputFilepath/text()
/tla:InputType/tla:outputFilepath/text()
...

但我想用一些更接近于:

<route>
    ...
    <bean ref="bean1" method="process(xpath('/tla:InputType/tla:inputFilepath/text()'),xpath('/tla:InputType/tla:inputFilepath/text()'))"/>
    ...

...
...

有没有比我现在的路线更整洁的路线

我不想在bean中使用@XPath,因为我不想在bean类中嵌入对外部环境的依赖

我确实看过OGNL,我相信它可以用在一个简单的表达式中,所以大致如下:

<bean ref="bean1" method="process(${body.InputType.inputFilepath},${body.InputType.inputFilepath})"/>


但两者都不起作用

我还怀疑我应该使用头而不是属性,因为这些值只能持续到方法调用为止,而不能持续到交换的其余部分。我也很想听听对此的评论


感谢您提出的改进意见

您可以在传入的负载中执行XSL,然后调用bean,而不是设置属性并将其作为方法参数发送。这将减少设置属性和使用属性值调用bean。第一行是XSL转换,然后可以调用处理器。处理器将能够从传入的交换中获取所需的值,这是转换的结果。

您可以使用XSL而不是执行多个集合属性。在bean的下一步中,您可以使用xstream或jaxb解析器将xml转换为pojo。通过这种方式,可以避免在bean或camel-context.xml中执行xpath

步骤1.FileTransform.XSL(示例) 第二步。在Bean/处理器中 创建一个名为FileProp的Pojo,使用inputFilePath,outputFilePath作为字符串。使用类似Xstream的解析器,将传入的XML转换为Pojo(使用fromXML方法)
现在您有了POJO,您可以在bean中轻松使用它了

我还没有机会尝试这一点,但是您是否尝试过使用简单语言生成方法名?${property.inputFilepath}是用简单的语言编写的。问题是Simple没有执行xpath的语法。我确实看过OGNL——我将编辑问题以包含它。如果我理解正确,您将用处理器替换两个setProperty元素。这会是一个定制的JavaBean处理器,它从负载中读取值并为方法调用创建两个属性值吗?XSL转换会做什么?您可以检查我的新ReplyTanks以获得回复。这很有趣,但对于我的需求来说,这是一个相当重要的解决方案。我在寻找一些在路线上更容易阅读的东西。
<bean ref="bean1" method="process(${body.tla:InputType.tla:inputFilepath},${body.tla:InputType.tla:inputFilepath})"/>