Friday, July 15, 2011

WSO2 ESB learning part1-Usage of a class mediator in a makeFault mediator

Class Mediator-The class mediator creates an instance of a custom specified class and sets it as a mediator. The class must implement the org.apache.synapse.api.Mediator interface.For more info

makeFault mediator-The fault mediator transforms the current message into a SOAP fault message.but does NOT send it. The mediator needs to be invoked to send a fault message created this way.For more info

Sample makeFault mediator

Below is the sample fault mediator that we are going to use in ESB sequence.


Creating a new class mediator

There is a good article on how to create a new class mediator which can be found here.Hence I'm not going to repeat those steps.But for your easier,i'll give the overview of a class mediator.Any class mediator must have to extend 'AbstractMediator' abstract class and hence such a mediator need to implement the method 'mediate()'.The purpose of creating the class mediator here,is to set the property value 'ERROR_CODE' which is going to use as the fault code value in above makeFault mediator.How we have done it using the class mediator is shown as below.
package org.wso2.carbon.mediator;


import org.apache.synapse.MessageContext;
import org.apache.synapse.mediators.AbstractMediator;
import javax.xml.namespace.QName;

public class SynapseMessageContextMediator extends AbstractMediator{
public boolean mediate(MessageContext messageContext) {
QName qname=new QName("http://www.w3.org/2003/05/soap-envelope","soap12Env:Receiver");
messageContext.setProperty("ERROR_CODE",qname);
return true;

}
}
Since ESB supports SOAP 1.2,based on SOAP 1.2 specification,the fault code value should contains the same prefix of the SOAP envelope namespace.Hence we have set 'ERROR_CODE' property value as a QName,which has a namespace and a prefix.

How to make usage of created class mediator into the makeFault mediator.

To do this we have to add above both class mediator and fault mediator into synapse.xml file.Then add a log mediator exactly after the makeFault mediator.Then once we have accessed http://localhost/8280 we can see the SOAP fault[which follows SOAP 1.2 specification] which is corresponding to the above created makeFault mediator in ESB server log as below.



You can see the above soap envelope fault code value has set to 'soap12Env:Receiver' by using the class mediator we have created.






No comments:

Post a Comment