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 <
[EMAIL PROTECTED]> 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/