2012-09-16 57 views
2

我有一個流通過VM端點調用另一個流。呼叫失敗,例外情況爲NoReceiverForEndpointException。日誌中的消息是:使用VM入站端點發出呼叫流

There is no receiver registered on connector "connector.VM.mule.default" for endpointUri vm://inner 

有誰知道爲什麼?這是Mule 3.3.0企業版。

謝謝。

配置文件:

<mule ...> 
    <vm:endpoint name="inner" path="inner" /> 
    <flow name="inner.flow"> 
     <inbound-endpoint ref="inner" exchange-pattern="request-response" /> 
     <logger level="INFO" message="in inner flow" /> 
    </flow> 

    <vm:endpoint name="outer" path="outer" /> 
    <flow name="outer.flow"> 
     <inbound-endpoint ref="outer" exchange-pattern="one-way" /> 
     <logger level="INFO" message="in outer flow" /> 
     <outbound-endpoint ref="inner" exchange-pattern="request-response" /> 
    </flow> 
</mule> 

測試用例行使它:

import org.junit.Test; 
import org.mule.api.MuleException; 
import org.mule.module.client.MuleClient; 
import org.mule.tck.junit4.FunctionalTestCase; 

public class VMEndpointTest extends FunctionalTestCase { 

    @Test 
    public void innerIsCalled() throws MuleException { 
     final MuleClient client = new MuleClient(muleContext); 
     client.sendNoReceive("outer", new Object(), null); 
    } 

    @Override 
    protected String getConfigResources() { 
     return "test.xml"; 
    } 

} 

回答

1

啊,我想這對我自己:

  1. 外終點是one-way,所以我笑了已經使用dispatch發送消息給它。
  2. 單元測試需要一些機制來等待Mule處理one-way流程中的消息。我在Java代碼中引入了一個虛擬機端點,僅爲此提供了receive調用。

配置文件:

​​

測試用例:

package foo; 

import static org.junit.Assert.assertEquals; 

import org.junit.Test; 
import org.mule.module.client.MuleClient; 
import org.mule.tck.functional.FunctionalTestComponent; 
import org.mule.tck.junit4.FunctionalTestCase; 

public class VMEndpointTest extends FunctionalTestCase { 

    @Test 
    public void innerIsCalled() throws Exception { 
     final FunctionalTestComponent ftc = getFunctionalTestComponent("innerFtc"); 
     final Object object = new Object(); 
     final MuleClient client = new MuleClient(muleContext); 

     client.dispatch("outer", object, null); 
     client.request("inner.completed", RECEIVE_TIMEOUT); 

     assertEquals(object, ftc.getLastReceivedMessage()); 
    } 

    @Override 
    protected String getConfigResources() { 
     return "test.xml"; 
    } 

} 
0

對於這兩個你有相同名稱的配置,然後只將連接的VM端點。