我遇到了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方法“
答案 0 :(得分:1)
看起来这是由“transformBodyUsingStyleSheet”方法上缺少右括号引起的。我解决了这个问题,它解决了我的问题。