与Spring DSL的Apache Camel bean参数绑定问题

时间:2015-10-02 19:10:03

标签: java spring apache-camel

我遇到了Apache Camel和Spring DSL的一个奇怪问题。以下是我定义的Spring路线的摘录:

<route>
  <from uri="direct:process-xml"/>
  <setHeader headerName="documentRootOid">
    <method bean="foo.bar.util.TranslatorUtil" method="extractDocumentRootOid"/>
  </setHeader>
  <setHeader headerName="organization">
    <method bean="foo.bar.util.OrgServices" method="getOrganizationByOid(*,${header.documentRootOid})"/>
  </setHeader>
  <setHeader headerName="organizationStyleSheet">
    <method bean="foo.bar.util.TranslatorUtil" method="extractStyleSheetAttributeFromOrganization(*,${header.organization})"/>
  </setHeader>
  <bean beanType="foo.bar.util.Utils" method="transformBodyUsingStyleSheet(*,${header.organizationStyleSheet}"/>
....
</route>

一切正常,直到我发布的最后一行。执行extractDocumentRootOid(Exchange exchange)java方法,并将结果存储到“documentRootOid”标头中。执行getOrganizationByOid(Exchange exchange,String oid)java方法,并将结果存储到“organization”标头中。执行extractStyleSheetAttributeFromOrganization(Exchange exchange,Organization organization)java方法,并将结果存储到“organizationStyleSheet”标题中。

一旦进入“transformBodyUsingStyleSheet”方法,事情变得奇怪。这是我的方法声明:

public void transformBodyUsingStyleSheet(Exchange exchange, String styleSheet) 

我在方法的第一行放了一个调试器,“styleSheet”值总是显示为交换体,而不是我试图传入的值($ {header.organizationStyleSheet})。如果我通过调试器查看标题,我会看到我的“organizationStyleSheet”标题和我期望的值,所以我猜我的bean参数绑定存在问题?有没有其他人遇到过这个?

感谢您提供的任何帮助。

P.S。我尝试用“$ {exchange}”替换“*”但是有一些错误说“org.apache.camel.ExpressionEvaluationException:无法创建/评估简单表达式:$ {exchange}被绑定到索引处的参数:0 on方法“

1 个答案:

答案 0 :(得分:1)

看起来这是由“transformBodyUsingStyleSheet”方法上缺少右括号引起的。我解决了这个问题,它解决了我的问题。