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
<classname="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