属性文件:
#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
如何启用接收参数数组?
答案 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");
}