2012-04-19 40 views
0

我期望一個<test:component />等同於問題與FunctionalTestComponent(騾子3.2.1)

<component> 
    <spring-object bean="FTC" /> 
<component> 

在FTC豆使用FunctionalTestComponent類。也就是說,我期望下面的兩個配置通過下面進一步顯示的功能測試。

配置與<test:component />

<mule ...> 
    <vm:endpoint name="EntryPoint.Name" path="EntryPoint.Path" /> 
    <simple-service name="service" endpoint-ref="EntryPoint.Name" > 
     <test:component /> 
    </simple-service> 
</mule> 

配置有彈簧豆使用FunctionalTestComponent

<mule ...> 
    <vm:endpoint name="EntryPoint.Name" path="EntryPoint.Path" /> 
    <spring:bean id="FTC" class="org.mule.tck.functional.FunctionalTestComponent" /> 

    <simple-service name="service" endpoint-ref="EntryPoint.Name" > 
     <component> 
      <spring-object bean="FTC" /> 
     </component> 
    </simple-service> 
</mule> 

測試

@Test 
public void aTest() throws Exception { 
    final MuleClient client = muleContext.getClient(); 
    client.send("vm://EntryPoint.Path", "1", null); 
    assertEquals("1", getFunctionalTestComponent("service").getLastReceivedMessage()); 
} 

<test:component />與該配置通過測試。但是,與FTC豆的那個不一樣。事實上,與FTC豆的運行在日誌中顯示一個例外:


******************************************************************************** 
Message    : Component that caused exception is: DefaultJavaComponent{service.commponent}. Message payload is of type: String 
Code     : MULE_ERROR--2 
-------------------------------------------------------------------------------- 
Exception stack is: 
1. null (java.lang.NullPointerException) 
    org.mule.tck.functional.FunctionalTestComponent:215 (null) 
2. Component that caused exception is: DefaultJavaComponent{service.commponent}. Message payload is of type: String (org.mule.component.ComponentException) 
    org.mule.component.DefaultComponentLifecycleAdapter:359 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/component/ComponentException.html) 
-------------------------------------------------------------------------------- 
Root Exception stack trace: 
java.lang.NullPointerException 
    at org.mule.tck.functional.FunctionalTestComponent.process(FunctionalTestComponent.java:215) 
    at org.mule.tck.functional.FunctionalTestComponent.onCall(FunctionalTestComponent.java:108) 
    at org.mule.model.resolvers.CallableEntryPointResolver.invoke(CallableEntryPointResolver.java:50) 
    + 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything) 
******************************************************************************** 

任何想法我可能做錯了什麼?我使用的騾子3.2.1

感謝

回答

0

我想我想通了。該bean的定義缺少一個屬性init-method= "initialise"。這個細節似乎從documentation丟失。因此,bean的定義應該是:

<spring:bean id="FTC" 
    class="org.mule.tck.functional.FunctionalTestComponent" init-method="initialise" /> 
+1

同理我想象* <單例的對象類=「org.mule.tck.functional.FunctionalTestComponent」 /> *在doc會失敗太所示:(一般來說,無論如何都最好使用test:component – 2012-04-19 16:15:52

+0

@David:你說得對,我後來意識到我不需要爲我的目的設置一個單獨的bean。 – beluchin 2012-04-19 16:54:43