Search code examples
javaspringmulemule-el

Mule - Set properties on spring object call in Mule flow


I'm using Mule 3.3.CE

I have a Class called SpringObject which implements Callable interface

package com.threads.test;

import org.mule.api.MuleEventContext;
import org.mule.api.lifecycle.Callable;

public class SpringObject implements Callable {

    private String someData;
    public String getSomeData() {
        return someData;
    }

    public void setSomeData(String someData) {
        this.someData = someData;
    }

    @Override
    public Object onCall(MuleEventContext eventContext) throws Exception {
        System.out.println("CALL SPRING --->>"+someData);

        return eventContext.getMessage();
    }

}    

And my flow is

<http:connector name="httpConnectorEntryPoint" doc:name="HTTP\HTTPS"/>

<spring:beans xmlns="http://www.springframework.org/schema/beans">
<spring:bean id="component" name="component" class="com.threads.test.SpringObject" lazy-init="false">   
</spring:bean>
</spring:beans>
<flow name="TestThreadsFlow1" doc:name="TestThreadsFlow1">
    <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8099" path="m" connector-ref="httpConnectorEntryPoint" doc:name="HTTP"/>
        <set-payload value="#[&quot;ExitA&quot;]" doc:name="Set Payload"/>
        <component doc:name="Java">
            <spring-object bean="component">
                <property key="someData" value="Information"/>
            </spring-object>
        </component>
    </flow>

The problem is that when I run my flow and use the http connector, the console shows

CALL SPRING --->>null

instead of

CALL SPRING --->>Information

What could be?


Solution

  • you can try to configure your spring bean outside the flow as follow:

    <spring:bean id="component" name="component"
        class="com.threads.test.SpringObject" lazy-init="false">
        <spring:property name="someData" value="Information" />
    </spring:bean>
    
    and inside the flow do:
    
    <component>
        <spring-object bean="component" />
    </component>