当前位置: 首页 > 知识库问答 >
问题:

Spring DSL的Apache Camelbean参数绑定问题

秦博达
2023-03-14

我在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>

在我发布最后一行之前,一切都很好。执行< code > extractDocumentRootOid(Exchange Exchange) Java方法,并将结果存储到DocumentRootOid头中。

执行< code > getOrganizationByOid(Exchange Exchange,String oid) java方法,并将结果存储到organization头中。

执行< code > extractstylesheetattributefromcorganization(Exchange Exchange,Organization Organization) Java方法,并将结果存储到organizationStyleSheet头中。

一旦它到达TransformBodyUgle StyleSheet方法,事情就变得奇怪了。这是我的方法声明:

public void transformBodyUsingStyleSheet(Exchange exchange, String styleSheet) 

我在方法的第一行放置了一个调试器,并且< code>styleSheet值总是显示为交换体,而不是我试图在< code >($ { header . organization style sheet })中传递的值。

如果我通过调试器查看标头,我会看到我的 organizationStyleSheet 标头和我期望的值,所以我猜测我的 bean 参数绑定有问题?以前有没有人遇到过这种情况?

附注:我尝试将< code>*替换为< code>${exchange},但出现了许多错误,如

org.apache.camel.ExpressionEvaluationException: 
  Cannot create/evaluate simple expression: 
    ${exchange} to be bound to parameter at index: 0 on method"

共有1个答案

牟焱
2023-03-14

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

 类似资料:
  • 参数绑定是把当前请求的变量作为操作方法(也包括架构方法)的参数直接传入,参数绑定并不区分请求类型。 参数绑定传入的值会经过全局过滤,如果你有额外的过滤需求可以在操作方法中单独处理。 按名称绑定 参数绑定方式默认是按照变量名进行绑定,例如,我们给Blog控制器定义了两个操作方法read和archive方法,由于read操作需要指定一个id参数,archive方法需要指定年份(year)和月份(mon

  • 我使用实体管理器来创建一个本地查询。我的数据库是Postgres数据库。我请求的日期字段是这样建模的... 当我写这个的时候,一切都很好... 但是当我想使用setParameter函数时... 我有这个问题。。 知道吗?

  • 问题内容: 我有一个功能可以做到这一点: 哪个发送到我的数据库类,它执行以下操作: 问题是这不起作用。 我希望做的是获取列表,并在后面列出它们,以使查询类似于: 但是很明显,我走错了路。 有没有办法使数组…按原样转换为要在查询阶段打印出来的列表? 问题答案: call_user_func_array “使用参数数组调用回调” 应该做的工作 更新 :您还必须更改您的params数组: 如预期的那样,

  • 问题内容: 我正在尝试绑定准备好的语句参数,该参数是“多维” PostgreSQL数组。这是一个数组示例(列类型为): 如何使用预处理语句绑定类似的值?我试过了: 它没有用: 无法将java.lang.String的实例强制转换为Types.ARRAY 有任何想法吗? 问题答案: 尝试这样的事情(未经测试): 链接: JDBC中的Postgres和多维数组 将数组从Java传递到Postgres

  • 我尝试将属性和一些数据绑定到模板,但下面的代码不起作用。我需要的是呈现n个模板的数量取决于printedForms对象的数量,并在每个模板中实现来自适当对象的数据。请告诉我我的代码有什么问题。 注意:控制台中有如下警告:[Vue warn]:计算表达式“printedForm.docNumber”时出错:TypeError:无法读取未定义(在组件中找到)的属性“docNumber”) 我的VueJ

  • 问题内容: 我需要将动态参数传递给applet。 这是我的控制器: 这是我的观点,参数base64在控制器中定义为“ abcd” 当我运行页面时,我在p标签中看到字符串’abcd’,但是applet参数的值只是“ {{base64}}”。 我该如何解决? 问题答案: 我解决了传递整个applet声明的问题。这样,它可以正常工作。 控制器: 视图: