esb mule通过http将参数传递给方法

时间:2012-10-09 14:18:44

标签: esb mule

我有一个测试方法:

@Test
    public void testHello_with_muleXmlConfig() throws Exception {

        MuleClient client = new MuleClient("mule-config-test.xml");
        client.getMuleContext().start();

        MuleMessage result = client.send("http://127.0.0.1:8080/hello", "some data", null);
        assertNotNull(result);

        assertNull(result.getExceptionPayload());
        assertFalse(result.getPayload() instanceof NullPayload);

        assertEquals("hello", result.getPayloadAsString());
    }

这里(client.send(“http://127.0.0.1:8080/hello”,“some data”,null)),我正在传递参数/ data ='some data'。

我有一节课:

public class HelloWorld {
    public String sayHello() {
        return "hello";
    }
}   

在mule-config.xml中作为spring bean公开:

<spring:bean id="helloWorld" class="org.mule.application.hello.HelloWorld"/>

<flow name="HelloWorld">
        <inbound-endpoint address="http://127.0.0.1:8080/hello"/>
        <invoke method="sayHello" object-ref="helloWorld"/>
    </flow>

我应该怎么做才能将参数'hello'传递给'sayHello()'方法。如果只是将其更改为'sayHello(String text)' - 它将无效。

3 个答案:

答案 0 :(得分:4)

您需要将其添加到invoke元素:

methodArguments="#[message.getPayload()]" methodArgumentTypes="java.lang.String"

答案 1 :(得分:0)

不确定invoke如何/如果有效:我建议你改用component

如果您将方法更改为接受String,例如:

public String sayHello(final String text)
{
    return "hello:" + text;
}

然后您还需要使用object-to-string-transformer将入站输入流反序列化为String:

<flow name="HelloWorld">
    <inbound-endpoint address="http://127.0.0.1:8080/hello" />
    <object-to-string-transformer />
    <component>
        <spring-object bean="helloWorld" />
    </component>
</flow>

答案 2 :(得分:0)

试试这个:

  • 在您的流程中添加:

<invoke object-ref="helloWorld" method="sayHello" methodArguments="#[message.inboundProperties.'http.query.params'.name]" doc:name="Invoke" />

  • 这是调用的方法:

    public String sayHello(String name){         return String.format(“Hello%s!”,name);     }