2012-10-09 127 views
1

傳遞參數到該方法我有一個測試方法:ESB騾通過http

@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」, 「一些數據」 ,null)),我傳遞參數/ data ='一些數據'。

而且我有一個類:

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

這是在騾子-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> 

我應該怎麼做,以參數 '你好' 通入'sayHello()'方法。如果只是將它改爲'sayHello(String text)' - 它將不起作用。

+0

什麼參數「hello」?你正在談論發送「一些數據」:不是「一些數據」你期望傳遞給'sayHello(String text)'嗎? –

+0

是的,我想通過'一些數據' – ses

回答

4

您需要將它添加到invoke元素:

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

好的!您寧願使用MEL表達式BTW:'「#[message.payload]」'。 (作爲一個方面說明,我仍然更喜歡'component'而不是'invoke',後者覺得很像「用XML編程」:P)。 –

+0

後我把: 我有這樣的例外: ionException:創建名稱爲'(內部bean)'的bean時出錯:init方法的調用失敗;嵌套異常是org.mule.api.lifecycle.InitialisationException:在org.mule.registry.AbstractRegistry上找不到「[email protected]」上的「0」參數的單一方法「012」「 」\t .initialise(AbstractRegistry.java:115) – ses

0

不知道如何/如果invoke作品:你我建議使用component來代替。

如果你改變你的方法接受一個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> 
+0

之後,我有:ionException:創建名爲'(內部bean)'的bean時出錯:init方法的調用失敗;嵌套異常是org.mule.api。lifecycle.InitialisationException:單方法 「的sayHello」,對 「[email protected]」 未找到 「0」 的參數 \t在org.mule.registry.AbstractRegistry.initialise(AbstractRegistry.java:115) ': – ses

+0

用'client.send測試( 「一些數據」 空 「// /你好HTTP」)時,對我來說工作正常。你也使用過這個命令嗎? –

+0

是的。完全一樣。從命令行 – ses

0

試試這個:

  • 在流補充一點:

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

  • ,這是調用的方法:

    公共字符串的sayHello(字符串名稱){ 回報的String.format( 「你好!%S」 的名字); }