The following example is used to simulate the functionality of the expression-splitter-router in mule.
Java Classes:
Fruit:
Apple:
Banana:
FruitBowl:
CreateFruitComponent:
AppleComponent:
BananaComponent:
Mule-config.xml:
Java Classes:
Fruit:
package com.expressionsplitterrouter; public abstract class Fruit { private String shape; public String getShape() { return shape; } public void setShape(String shape) { this.shape = shape; } }
Apple:
package com.expressionsplitterrouter; public class Apple extends Fruit { private String type; public String getType() { return type; } public void setType(String type) { this.type = type; } }
Banana:
package com.expressionsplitterrouter; public class Banana extends Fruit { private String form; public String getForm() { return form; } public void setForm(String form) { this.form = form; } }
FruitBowl:
package com.expressionsplitterrouter; import java.util.ArrayList; import java.util.List; public class FruitBowl { private List<Fruit> fruit; public List<Fruit> getFruit() { return fruit; } public void setFruit(List<Fruit> fruit) { this.fruit = fruit; } public void addFruit(Fruit fruit){ if (this.fruit == null) { this.fruit = new ArrayList<Fruit>(); } this.fruit.add(fruit); } }
CreateFruitComponent:
package com.expressionsplitterrouter; public class CreateFruitComponent { public FruitBowl createFruit(String start) { FruitBowl bowl = new FruitBowl(); Apple apple = new Apple(); apple.setShape("Round"); apple.setType("Green"); Banana banana = new Banana(); banana.setShape("Lengthy"); banana.setForm("Yellow"); bowl.addFruit(apple); bowl.addFruit(banana); apple = new Apple(); apple.setShape("Rectangular Square"); apple.setType("Red"); bowl.addFruit(apple); return bowl; } }
AppleComponent:
package com.expressionsplitterrouter; public class AppleComponent { public void displayApple(Apple apple) { System.out.println("Apple Component"); System.out.println(apple.getShape() + "," + apple.getType()); } }
BananaComponent:
package com.expressionsplitterrouter; public class BananaComponent { public void displayBanana(Banana banana) { System.out.println("BananaComponent"); System.out.println(banana.getShape() + "," + banana.getForm()); } }
Mule-config.xml:
<?xml version="1.0" encoding="UTF-8"?> <mule xmlns="http://www.mulesource.org/schema/mule/core/2.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:stdio="http://www.mulesource.org/schema/mule/stdio/2.2" xmlns:vm="http://www.mulesource.org/schema/mule/vm/2.2" xsi:schemaLocation=" http://www.mulesource.org/schema/mule/core/2.2 http://www.mulesource.org/schema/mule/core/2.2/mule.xsd http://www.mulesource.org/schema/mule/stdio/2.2 http://www.mulesource.org/schema/mule/stdio/2.2/mule-stdio.xsd http://www.mulesource.org/schema/mule/vm/2.2 http://www.mulesource.org/schema/mule/vm/2.2/mule-vm.xsd"> <stdio:connector name="stdioIN" promptMessage="Press any key to continue" /> <model name="ExpressionSplitterRouterModel"> <service name="CreateMsgService"> <inbound> <stdio:inbound-endpoint connector-ref="stdioIN" system="IN" /> </inbound> <component class="com.expressionsplitterrouter.CreateFruitComponent" /> <outbound> <expression-splitter-router expression="fruit" evaluator="bean"> <vm:outbound-endpoint path="banana-channel"> <payload-type-filter expectedType="com.expressionsplitterrouter.Banana" /> </vm:outbound-endpoint> <vm:outbound-endpoint path="apple-channel"> <payload-type-filter expectedType="com.expressionsplitterrouter.Apple" /> </vm:outbound-endpoint> </expression-splitter-router> </outbound> </service> <service name="BananaService"> <inbound> <vm:inbound-endpoint path="banana-channel"/> </inbound> <component class="com.expressionsplitterrouter.BananaComponent"/> </service> <service name="AppleService"> <inbound> <vm:inbound-endpoint path="apple-channel"/> </inbound> <component class="com.expressionsplitterrouter.AppleComponent"/> </service> </model> </mule>