The Class Mediator creates an instance of a custom-specified class and sets it as a mediator. If any properties are specified, the corresponding setter methods are invoked once on the class during initialization.
Use the Class mediator for user-specific, custom developments only when there is no built-in mediator that already provides the required functionality.
The syntax of Class Mediator in ESB
Use the Class mediator for user-specific, custom developments only when there is no built-in mediator that already provides the required functionality.
The syntax of Class Mediator in ESB
<
class
name=
"class-name"
>
<property name=
"string"
value=
"literal"
>
</property>
</
class
>
Creating a Class Mediator
lets use the Eclipse
WSO2 Developer Studio
Create a New Mediator project by selecting
File --> New --> project --> Mediator Project
Now you have class mediator by extending the AbstractMediator class. Then you need to implement the mediate methods
Sample class mediator implementation is as follows.
package lk.harshana; import org.apache.synapse.MessageContext; import org.apache.synapse.mediators.AbstractMediator; public class TestMediator extends AbstractMediator { private String variable1; private String variable2; public boolean mediate(MessageContext mc) { System.out.println("===========Starting class mediator=========="); System.out.println("variable1 : " + variable1); System.out.println("variable1 : " + variable2); String prop1 = (String) mc.getProperty("property1"); int prop2 = (Integer) mc.getProperty("property2"); System.out.println("prop1 : " + prop1); System.out.println("prop2 : " + prop2); int prop3 = (Integer) mc.getProperty("property3"); int calc = add(prop2, prop3); System.out.println("calc value : " + calc); mc.setProperty("calc", calc); System.out.println("=========== ending class mediator==========="); return true; } private int add(int x, int y) { return x + y; } public String getVariable1() { return variable1; } public void setVariable1(String variable1) { this.variable1 = variable1; } public String getVariable2() { return variable2; } public void setVariable2(String variable2) { this.variable2 = variable2; } }Now you need to use this in proxy service. So I have created a proxy service to use the class mediator
<?xml version="1.0" encoding="UTF-8"?> <proxy name="SampleProxy" startOnLoad="true" transports="http https" xmlns="http://ws.apache.org/ns/synapse"> <target> <inSequence> <log level="custom"> <property name="start log" value="Proxy Started" /> </log> <property name="property1" value="welcome to class mediator test" type="STRING"/> <property name="property2" value="10" scope="default" type="INTEGER"/> <property name="property3" value="5" scope="default" type="INTEGER" /> <class name="lk.harshana.TestMediator"> <property name="variable1" value="variable 1 value" /> <property name="variable2" value="variable 2 value" /> </class> <log> <property name="calc" expression="$ctx:calc" /> </log> </inSequence> <outSequence /> <faultSequence /> </target> </proxy>You will see the following log in the console
[2018-09-13 15:21:07,127] INFO - LogMediator start log = Proxy Started ===========Starting class mediator========== variable1 : variable 1 value variable1 : variable 2 value prop1 : welcome to class mediator test prop2 : 10 calc value : 15 =========== ending class mediator=========== [2018-09-13 15:21:07,129] INFO - LogMediator To: /services/SampleProxy.SampleProxyHttpSoap12Endpoint, WSAction: urn:mediate, SOAPAction: urn:mediate, MessageID: urn:uuid:0aa5a19e-5e05-49a4-a52e-52a5b1d4351c, Direction: request, calc = 15
Comments
Post a Comment