mule将java组件作为数组参数调用

时间:2015-03-27 23:49:56

标签: mule

属性文件:

  

#torun='GSD11','GSD12' torun='GSD11'

  <flow name="deleteInvoiceFlow" doc:name="deleteInvoiceFlow">
            <http:inbound-endpoint exchange-pattern="request-response" host="${hostname}" port="${port}" path="deleteInvoice" doc:name="HTTP"/>
            <invoke object-ref="client" method="deleteInvoice" methodArguments="${torun}" methodArgumentTypes="java.lang.String" />
     </flow>

  <spring:bean id="client" name="client" class="com.util.DeleteTable"/>  

Java:DeleteTable:

public String deleteInvoice(@Payload String deleteCompany) throws SQLException{

它适用于属性中的单个参数,如上面在属性文件中所示。但是,如果我在属性中运行以下公司的应用程序

  

`托伦=&#39; GSD11&#39;&#39; GSD12&#39;

它会将错误消息显示为

1 (java.lang.ArrayIndexOutOfBoundsException). Message payload is of type: String

如何启用接收参数数组?

2 个答案:

答案 0 :(得分:0)

Mule消息的Payload是一个对象。从而允许它处理任何类型的对象。

如果您查看MuleMessage界面,您将会看到它。

在上面的代码中,您将来自入站端点(http)的任何内容发送到您的spring bean,并且您假设它将成为一个字符串。

现在有效负载肯定会在http入站端点中发生变化,具体取决于您收到的请求类型(get / post / put / etc),所以要小心。

回到你的问题,如果你肯定有效载荷将是一个数组,你可以改变你的方法的公司。如果不是,我建议您将其更改为对象,并验证相应的内容并进行相应的投射。

HTH

答案 1 :(得分:0)

Mule docs说: http://www.mulesoft.org/documentation/display/current/Invoke+Component+Reference

methodArguments =&#34;#[1],#[2]&#34;

methodArgumentTypes =&#34; java.lang.Float,java.lang.Float&#34;

但我的列表是随机的,它增长到100s到1000s,我不想放1000个参数类型。 作为一种解决方案,我在java组件中加载mule-app.propertes并读取属性内容。

public String deleteInvoice(){
      Properties prop = new Properties();
      InputStream input = DeleteTable.class.getClassLoader().getResourceAsStream("mule-app.properties");
      prop.load(input);
      return prop.getProperty("torun");
}