【发布时间】:2015-10-02 19:10:02
【问题描述】:
我在使用 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 参数绑定存在问题?有没有其他人遇到过这种情况?
附:我尝试用${exchange} 替换*,但出现了一些错误提示
org.apache.camel.ExpressionEvaluationException:
Cannot create/evaluate simple expression:
${exchange} to be bound to parameter at index: 0 on method"
【问题讨论】:
标签: java spring apache-camel