First we create the mediator class by extending AbstractMediator:
package org.example.mediator;
import org.apache.synapse.MessageContext;
import org.apache.synapse.Mediator;
import org.apache.synapse.mediators.AbstractMediator;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.soap.SOAPBody;
import org.apache.axiom.soap.SOAPFactory;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import javax.xml.namespace.QName;
public class MyMediator extends AbstractMediator {
private static final Log log = LogFactory.getLog(MyMediator.class);
public MyMediator(){}
public boolean mediate(MessageContext mc) {
//get the SOAP body from message context
SOAPBody soapBody = mc.getEnvelope().getBody();
//now you can modify the SOAP body as you wish
//...
return true;
}
public String getType() {
return null;
}
public void setTraceState(int traceState) {
this.traceState = traceState;
}
public int getTraceState() {
return 0;
}
}
Create a base folder, say mymed, and place MyMediator class in mymed/src/main/java/org/example/mediator. You may create other non-mediator classes and place according to the package name.
Save the following pom.xml file in mymed/ folder.
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0 xsi:schemalocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelversion>4.0.0</modelversion>
<groupid>org.example.mediator</groupid>
<artifactid>org.example.mediator</artifactid>
<packaging>jar</packaging>
<version>1.0</version>
<name>org.example.mediator</name>
<url>http://maven.apache.org</url>
<repositories>
<repository>
<id>wso2-maven2-repository</id>
<url>http://dist.wso2.org/maven2</url>
</repository>
<repository>
<id>apache-Incubating-repo</id>
<name>Maven Incubating Repository</name>
<url>http://people.apache.org/repo/m2-incubating-repository</url>
</repository>
<repository>
<id>apache-maven2-repo</id>
<name>Apache Maven2 Repository</name>
<url>http://repo1.maven.org/maven2/</url>
</repository>
</repositories>
<build>
<plugins>
<plugin>
<groupid>org.apache.maven.plugins</groupid>
<artifactid>maven-compiler-plugin</artifactid>
<version>2.0</version>
<configuration>
<source></source>1.5
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupid>org.apache.synapse</groupid>
<artifactid>synapse-core</artifactid>
<version>2.1.1-wso2v7</version>
</dependency>
</dependencies>
</project>
Inside mymed/ folder run "mvn clean install". This will create org.example.mediator-1.0.jar in mymed/target folder.
Copy this jar to WSO2-ESB-HOME/repository/components/lib.
Now run the ESB server:
cd WSO2-ESB-HOME/bin
Run wso2server.sh (or .bat in windows)
Now you should be able to log into the ESB console by typing https://localhost:9443/carbon.
As explained here, deploy the StockQuoteService in the axis2server provided with the ESB.
cd WSO2-ESB-HOME/samples/axis2server/src/SimpleStockQuoteService
Run ant
This will create the SimpleStockQuoteService.aar and deploy it in the axis2server's repository.
Now start the axis2server:
cd WSO2-ESB-HOME/samples/axis2server
Run axis2server.sh (or .bat in windows)
In order to make sure everything is fine, let's run the client shipped with the ESB.
cd WSO2-ESB-HOME/samples/axis2Client
Run "ant stockquote -Daddurl=http://localhost:9000/services/SimpleStockQuoteService -Dtrpurl=http://localhost:8280 -Dsymbol=IBM -Dmode=quote"
This should return a random stock quote price.
Now, as explained here, we create a proxy service name StockQuoteProxy to mediate requests to SimpleStockQuoteService.
In the in sequence of this proxy service, we add our mediator inline as shown below. If you cannot load the mediator class successfully, there is something wrong with your mediator. You will have to go back and check your code.
Now execute the stockquote client again, you will see the modifications that the mediator does to the SOAP message are reflected in the SimpleStockQuoteService's received message. That demonstrates the successful deployment of the class mediator!
You may add another mediator in the out sequence to modify the reply messages from the service to the client following similar steps as above as well
.