1

我有一个测试方法:

@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)' - 它将不起作用。

4

3 回答 3

4

您需要将其添加到调用元素:

methodArguments="#[message.getPayload()]" methodArgumentTypes="java.lang.String"
于 2012-10-09T17:40:58.863 回答
0

不确定如何/是否invoke有效:我建议您component改用。

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

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

那么您还需要使用object-to-string-transformer将入站输入流反序列化为字符串:

<flow name="HelloWorld">
    <inbound-endpoint address="http://127.0.0.1:8080/hello" />
    <object-to-string-transformer />
    <component>
        <spring-object bean="helloWorld" />
    </component>
</flow>
于 2012-10-09T17:53:31.587 回答
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); }

于 2015-08-17T17:03:21.983 回答