You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@synapse.apache.org by Harsha Halgaswatta <ha...@gmail.com> on 2008/11/10 10:19:09 UTC
writing a test for custom mediator (XMLMediator)
hi all
I m one of the members of SCI-flex (Flexible Integration of CEP and
SOA)team. We have currently implemented XML and AXIOM mediator in case of
connecting Esper with Synapse. Now i m going to write a test for the XML
mediator. it is kind of tricky as i am new to synapse.
In our mediator we are setting esper configuration , epl statement
settings etc. Here i am messed bit wheather i have to test each and every of
those etc.
Can anyone help me on how i should approach this. How i test configuration
settings etc.
I have attached the source of XML mediator below ,it would be help full i
guess
public class XMLMediator implements Mediator, ManagedLifecycle {
/**
* Log associated with the XML Mediator.
*/
private static final Log log = LogFactory.getLog(XMLMediator.class);
/**
* Trace State.
*/
private int traceState = 0;
/**
* The Instance URI to be used by EPServiceProviderManager.
* @see com.espertech.esper.client.EPServiceProviderManager
*/
private String instanceURI = null;
/**
* Esper Configuration instance.
*/
private Configuration configuration = new Configuration();
/**
* Synapse Listener Instance.
*/
private SynapseListener listener = null;
/**
* Helper to handle EPL statements.
*/
private EPLStatementHelper eplStatementHelper = null;
/**
* Sets the EventToAddress. Please set listener before setting the
* EventToAddress.
* @param uri URI of To Address associated with Event.
*/
public void setEventToAddress(String uri) {
if (listener != null)
listener.setEventToAddress(uri);
else
log.error("Listener has not been set");
}
/**
* Sets the Esper Configuration details from an Axiom Element describing
* the various details.
* @param config Configuration Axiomimport java.lang.reflect Element.
*/
public void setConfiguration(OMElement config) {
log.debug("Setting configuration " + config);
try {
Document doc = DocumentBuilderFactory.newInstance()
.newDocumentBuilder().parse(
new ByteArrayInputStream(config.toString().getBytes()));
configuration.configure(doc);
log.info("Setting configuration complete");
} catch (Exception e) {
log.error("An error occured while setting the configuration "
+ e.getMessage());
}
}
/**
* Gets the Trace State.
* @return Trace State.
*/
public int getTraceState() {
return traceState;
}
/**
* Sets the Trace State.
* @param state Trace State.
*/
public void setTraceState(int state) {
traceState = state;
}
/**
* Sets the Instance URI.
* @param uri the Instance URI.
*/
public void setInstanceURI(String uri) {
log.debug("Setting Instance URI " + uri);
instanceURI = uri;
}
/**
* Sets associated listener.
* @param name name of listener class.
*/
public void setListener(String name) {
log.debug("Setting listener " + name);
try {
Class listenerClass = Class.forName(name);
if (listenerClass == null) {
log.error("Invalid Class Name");
return;
}
Object o = listenerClass.newInstance();
if (o instanceof SynapseListener) {
listener = (SynapseListener) o;
log.info("Listener " + name + " was successfully setup");
}
else
log.error("Setting listener failed");
} catch (ClassNotFoundException e) {
log.error("Class " + name + " was not found");
} catch (Exception e) {
log.error("Setting listener failed " + e.getMessage());
}
}
/**
* Sets the EPL Statement.
* @param epl the EPL Statement element.
*/
public void setStatement(OMElement epl) {
if (listener == null) {
listener = new SynapseListenerImpl();
}
log.debug("Setting EPL statement " + epl);
String value = epl.getAttributeValue(new QName("value"));
if (value == null) {
value = epl.getAttributeValue(new QName("key"));
if (value == null) {
log.error("Setting EPL statement failed. Got " + epl);
return;
}
else {
log.debug("Setting EPL statment using registry key " +
value);
eplStatementHelper = new EPLStatementHelper(
EPLStatementHelper.EPLStatementType.INDIRECT, value,
getProvider(), listener);
}
}
else {
log.debug("Setting EPL statement " + value);
eplStatementHelper = new EPLStatementHelper(value,
getProvider(), listener);
}
}
/**
* Sets the EPL Statement.
* @param epl the EPL Statement.
*/
public void setStatement(String epl) {
if (listener == null) {
listener = new SynapseListenerImpl();
}
log.debug("Setting EPL statement " + epl);
eplStatementHelper = new EPLStatementHelper(epl, getProvider(),
listener);
}
/**
* Gets an EPServiceProvider based on Mediator configuration details.
* @return EPServiceProvider instance.
*/
private EPServiceProvider getProvider() {
try {
if (instanceURI == null && configuration == null)
return EPServiceProviderManager.getDefaultProvider();
else if (instanceURI == null)
return EPServiceProviderManager
.getDefaultProvider(configuration);
else if (configuration == null)
return EPServiceProviderManager.getProvider(instanceURI);
else
return EPServiceProviderManager.getProvider(instanceURI,
configuration);
} catch (ConfigurationException e) {
log.error("An error occured while retrieving provider "
+ e.getMessage());
return null;
}
}
/**
* Exposes the type of the current mediator for logging and debugging
* purposes.
* @return Mediator Type.
*/
public String getType() {
return "org.sciflex.plugins.synapse.esper.mediators.XMLMediator";
}
/**
* Invokes the mediator passing the current message for mediation.
* @param mc Message Context of the current message.
* @return returns true if mediation should continue, or false if
further
* mediation should be aborted.
*/
public boolean mediate(MessageContext mc) {
log.trace("Beginning Mediation");
EPServiceProvider provider = getProvider();
if (provider == null) {
/*
* There should be an error if we couldn't obtain the provider.
* Therefore, stop mediation
*/
return false;
}
eplStatementHelper.invoke(mc);
OMElement bodyElement = null;
try {
bodyElement = mc.getEnvelope().getBody().getFirstElement();
} catch (OMException e) {
log.warn("An error occured while reading message "
+ e.getMessage());
// We don't mind an error while reading a message.
return true;
}
if (bodyElement == null) {
// FIXME Figure out proper response for null element.
return true;
}
bodyElement.build();
try {
String buffer = bodyElement.toStringWithConsume();
XMLStreamReader xsr = XMLInputFactory.newInstance()
.createXMLStreamReader(new ByteArrayInputStream(
buffer.getBytes()));
StAXOMBuilder builder = new StAXOMBuilder(DOOMAbstractFactory
.getOMFactory(), xsr);
OMElement docElement = builder.getDocumentElement();
if (docElement != null) {
Node node = (Node) docElement.getParent();
provider.getEPRuntime().sendEvent(node);
log.trace("Ending Mediation");
}
else
log.error("Mediation failed");
} catch (Exception e) {
log.error("An error occured while sending Event " +
e.getMessage());
}
return true;
}
/**
* Destruction of Initialized resources.
*/
public void destroy() {
// We have nothing to destroy.
}
/**
* Initialization of resources.
* @param se Synapse Environment passed by configuration.
*/
public void init(SynapseEnvironment se) {
// hack to get round lack of init(SynapseEnv) on mediator interface.
if (listener != null)
listener.setSynapseEnvironment(se);
else
log.error("Listener has not been set");
}
}
Honestly i am really new to those. Hence your responses are highly admired.
Thanking you
kind regards
Harsha
Re: writing a test for custom mediator (XMLMediator)
Posted by Ruwan Linton <ru...@gmail.com>.
Please have a look at the Mediator tests available inside synapse source
code.
Thanks,
Ruwan
On Mon, Nov 10, 2008 at 2:49 PM, Harsha Halgaswatta <
harsha.halgaswatta@gmail.com> wrote:
> hi all
>
> I m one of the members of SCI-flex (Flexible Integration of CEP and
> SOA)team. We have currently implemented XML and AXIOM mediator in case of
> connecting Esper with Synapse. Now i m going to write a test for the XML
> mediator. it is kind of tricky as i am new to synapse.
>
> In our mediator we are setting esper configuration , epl statement
> settings etc. Here i am messed bit wheather i have to test each and every of
> those etc.
> Can anyone help me on how i should approach this. How i test configuration
> settings etc.
>
> I have attached the source of XML mediator below ,it would be help full i
> guess
>
>
>
>
>
>
> public class XMLMediator implements Mediator, ManagedLifecycle {
>
> /**
> * Log associated with the XML Mediator.
> */
> private static final Log log = LogFactory.getLog(XMLMediator.class);
>
> /**
> * Trace State.
> */
> private int traceState = 0;
>
> /**
> * The Instance URI to be used by EPServiceProviderManager.
> * @see com.espertech.esper.client.EPServiceProviderManager
> */
> private String instanceURI = null;
>
> /**
> * Esper Configuration instance.
> */
> private Configuration configuration = new Configuration();
>
> /**
> * Synapse Listener Instance.
> */
> private SynapseListener listener = null;
>
> /**
> * Helper to handle EPL statements.
> */
> private EPLStatementHelper eplStatementHelper = null;
>
> /**
> * Sets the EventToAddress. Please set listener before setting the
> * EventToAddress.
> * @param uri URI of To Address associated with Event.
> */
> public void setEventToAddress(String uri) {
> if (listener != null)
> listener.setEventToAddress(uri);
> else
> log.error("Listener has not been set");
> }
>
>
> /**
> * Sets the Esper Configuration details from an Axiom Element
> describing
> * the various details.
> * @param config Configuration Axiomimport java.lang.reflect Element.
> */
> public void setConfiguration(OMElement config) {
> log.debug("Setting configuration " + config);
> try {
> Document doc = DocumentBuilderFactory.newInstance()
> .newDocumentBuilder().parse(
> new
> ByteArrayInputStream(config.toString().getBytes()));
> configuration.configure(doc);
> log.info("Setting configuration complete");
> } catch (Exception e) {
> log.error("An error occured while setting the configuration "
> + e.getMessage());
> }
> }
>
> /**
> * Gets the Trace State.
> * @return Trace State.
> */
> public int getTraceState() {
> return traceState;
> }
>
> /**
> * Sets the Trace State.
> * @param state Trace State.
> */
> public void setTraceState(int state) {
> traceState = state;
> }
>
> /**
> * Sets the Instance URI.
> * @param uri the Instance URI.
> */
> public void setInstanceURI(String uri) {
> log.debug("Setting Instance URI " + uri);
> instanceURI = uri;
> }
>
> /**
> * Sets associated listener.
> * @param name name of listener class.
> */
> public void setListener(String name) {
> log.debug("Setting listener " + name);
> try {
> Class listenerClass = Class.forName(name);
> if (listenerClass == null) {
> log.error("Invalid Class Name");
> return;
> }
> Object o = listenerClass.newInstance();
> if (o instanceof SynapseListener) {
> listener = (SynapseListener) o;
> log.info("Listener " + name + " was successfully setup");
> }
> else
> log.error("Setting listener failed");
> } catch (ClassNotFoundException e) {
> log.error("Class " + name + " was not found");
> } catch (Exception e) {
> log.error("Setting listener failed " + e.getMessage());
> }
> }
>
> /**
> * Sets the EPL Statement.
> * @param epl the EPL Statement element.
> */
> public void setStatement(OMElement epl) {
> if (listener == null) {
> listener = new SynapseListenerImpl();
> }
> log.debug("Setting EPL statement " + epl);
> String value = epl.getAttributeValue(new QName("value"));
> if (value == null) {
> value = epl.getAttributeValue(new QName("key"));
> if (value == null) {
> log.error("Setting EPL statement failed. Got " + epl);
> return;
> }
> else {
> log.debug("Setting EPL statment using registry key " +
> value);
> eplStatementHelper = new EPLStatementHelper(
> EPLStatementHelper.EPLStatementType.INDIRECT,
> value,
> getProvider(), listener);
> }
> }
> else {
> log.debug("Setting EPL statement " + value);
> eplStatementHelper = new EPLStatementHelper(value,
> getProvider(), listener);
> }
> }
>
> /**
> * Sets the EPL Statement.
> * @param epl the EPL Statement.
> */
> public void setStatement(String epl) {
> if (listener == null) {
> listener = new SynapseListenerImpl();
> }
> log.debug("Setting EPL statement " + epl);
> eplStatementHelper = new EPLStatementHelper(epl, getProvider(),
> listener);
> }
>
> /**
> * Gets an EPServiceProvider based on Mediator configuration details.
> * @return EPServiceProvider instance.
> */
> private EPServiceProvider getProvider() {
> try {
> if (instanceURI == null && configuration == null)
> return EPServiceProviderManager.getDefaultProvider();
> else if (instanceURI == null)
> return EPServiceProviderManager
> .getDefaultProvider(configuration);
> else if (configuration == null)
> return EPServiceProviderManager.getProvider(instanceURI);
> else
> return EPServiceProviderManager.getProvider(instanceURI,
> configuration);
> } catch (ConfigurationException e) {
> log.error("An error occured while retrieving provider "
> + e.getMessage());
> return null;
> }
> }
>
> /**
> * Exposes the type of the current mediator for logging and debugging
> * purposes.
> * @return Mediator Type.
> */
> public String getType() {
> return "org.sciflex.plugins.synapse.esper.mediators.XMLMediator";
> }
>
> /**
> * Invokes the mediator passing the current message for mediation.
> * @param mc Message Context of the current message.
> * @return returns true if mediation should continue, or false if
> further
> * mediation should be aborted.
> */
> public boolean mediate(MessageContext mc) {
> log.trace("Beginning Mediation");
> EPServiceProvider provider = getProvider();
> if (provider == null) {
> /*
> * There should be an error if we couldn't obtain the provider.
> * Therefore, stop mediation
> */
> return false;
> }
> eplStatementHelper.invoke(mc);
> OMElement bodyElement = null;
> try {
> bodyElement = mc.getEnvelope().getBody().getFirstElement();
> } catch (OMException e) {
> log.warn("An error occured while reading message "
> + e.getMessage());
> // We don't mind an error while reading a message.
> return true;
> }
> if (bodyElement == null) {
> // FIXME Figure out proper response for null element.
> return true;
> }
> bodyElement.build();
>
> try {
> String buffer = bodyElement.toStringWithConsume();
> XMLStreamReader xsr = XMLInputFactory.newInstance()
> .createXMLStreamReader(new ByteArrayInputStream(
> buffer.getBytes()));
> StAXOMBuilder builder = new StAXOMBuilder(DOOMAbstractFactory
> .getOMFactory(), xsr);
> OMElement docElement = builder.getDocumentElement();
> if (docElement != null) {
> Node node = (Node) docElement.getParent();
> provider.getEPRuntime().sendEvent(node);
> log.trace("Ending Mediation");
> }
> else
> log.error("Mediation failed");
> } catch (Exception e) {
> log.error("An error occured while sending Event " +
> e.getMessage());
> }
> return true;
> }
>
> /**
> * Destruction of Initialized resources.
> */
> public void destroy() {
> // We have nothing to destroy.
> }
>
> /**
> * Initialization of resources.
> * @param se Synapse Environment passed by configuration.
> */
> public void init(SynapseEnvironment se) {
> // hack to get round lack of init(SynapseEnv) on mediator
> interface.
> if (listener != null)
> listener.setSynapseEnvironment(se);
> else
> log.error("Listener has not been set");
> }
>
> }
>
>
> Honestly i am really new to those. Hence your responses are highly admired.
>
> Thanking you
> kind regards
> Harsha
>
>
--
Ruwan Linton
http://wso2.org - "Oxygenating the Web Services Platform"
http://ruwansblog.blogspot.com/