On 9 Jul 2007, at 06:07, Asankha C. Perera wrote:

Hi Nick

Instead of using your mediator to send the incoming message to its ultimate target, you could let it flow through rules specified on the configuration, and use the custom mediator to invoke a new message exchange that you want to handle - e.g. for message enrichment before you forward the original request to its ultimate destination.

Right now you cannot use Synapse to split a message into two by configuration - but you could achieve the same result by using SynapseEnvironment.injectMessage() to inject a new message into Synapse for mediation, through your custom mediator. This would behave as if a new message came into Synapse.

Hope this helps, let me know if you need any help to do this.. unfortunately we do not have a sample that we ship to show this
asankha




- thanks.


I had already tried to use both SynapseEnvironment.injectMessage() and SynapseEnvironment.send() with essentially the same result (once I got over looping from injectMessage!). My code and the exception it causes is given below. So I must've been doing something wrong.

For now, I am simply sending a new message from within a mediator using axis2 (not going back through synapse). But, if you get time, any pointers would be useful.

All the best,

Nick

---

Code Using injectMessage
------------------------

public boolean mediate(MessageContext ctx) {
        final SynapseEnvironment env = ctx.getEnvironment();

        final MessageContext newCtx = env.createMessageContext();

final SOAPFactory soapFac = OMAbstractFactory.getSOAP12Factory();

        final OMFactory omFac = OMAbstractFactory.getOMFactory();

        final SOAPEnvelope msg = soapFac.getDefaultEnvelope();

        final SOAPHeader hdr = msgOne.getHeader();

        final OMNamespace nrexNs
= omFac.createOMNamespace("http://www.cs.ncl.ac.uk/ nrex/", "nrex");
        final OMElement nrexHdr
            = omFac.createOMElement("ProtocolHeader", nrexNs);
        nrexHdr.addAttribute("msgNum", "1", nrexNs);

        hdr.addChild(nrexHdr);

        msg.getBody().addChild(nrexHdr);

        try {
            newCtx.setEnvelope(msg);
        } catch (AxisFault e) {
            e.printStackTrace();
            return false;
        }

        newCtx.setTo(
new EndpointReference("http://localhost:8080/nrex/ process/"));
        newCtx.setWSAAction("urn:testing");

        env.injectMessage(newCtx);

        return true;
}

Exception raised by synapse
--------------------------

[HttpServerWorker-1] DEBUG SendMediator - Body :
<?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap- envelope"><soapenv:Body><nrex:ProtocolHeader xmlns:nrex="http:// www.cs.ncl.ac.uk" nrex:msgNum="1" /></soapenv:Body></soapenv:Envelope> [HttpServerWorker-1] DEBUG Axis2FlexibleMEPClient - sending [add = false] [sec = false] [rm = false] [ to Address: http://localhost:8080/ nrex/process/]


[HttpServerWorker-1] ERROR Axis2Sender - Unexpected error during Sending message onwards
java.lang.NullPointerException
at org.apache.synapse.core.axis2.Axis2FlexibleMEPClient.send (Axis2FlexibleMEPClient.java:171) at org.apache.synapse.core.axis2.Axis2Sender.sendOn (Axis2Sender.java:50) at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.send (Axis2SynapseEnvironment.java:112) at org.apache.synapse.mediators.builtin.SendMediator.mediate (SendMediator.java:89) at org.apache.synapse.mediators.AbstractListMediator.mediate (AbstractListMediator.java:49) at org.apache.synapse.mediators.filters.InMediator.mediate (InMediator.java:54) at org.apache.synapse.mediators.AbstractListMediator.mediate (AbstractListMediator.java:49) at org.apache.synapse.mediators.base.SequenceMediator.mediate (SequenceMediator.java:104) at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage (Axis2SynapseEnvironment.java:104) at uk.ac.ncl.synapse.test.SimpleProtoMediator.mediate (SimpleProtoMediator.java:150) at org.apache.synapse.mediators.ext.ClassMediator.mediate (ClassMediator.java:80) at org.apache.synapse.mediators.AbstractListMediator.mediate (AbstractListMediator.java:49) at org.apache.synapse.mediators.filters.InMediator.mediate (InMediator.java:54) at org.apache.synapse.mediators.AbstractListMediator.mediate (AbstractListMediator.java:49) at org.apache.synapse.mediators.base.SequenceMediator.mediate (SequenceMediator.java:104) at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage (Axis2SynapseEnvironment.java:104) at org.apache.synapse.core.axis2.SynapseMessageReceiver.receive (SynapseMessageReceiver.java:73) at org.apache.axis2.engine.AxisEngine.receive (AxisEngine.java:144) at org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostReques t(HTTPTransportUtils.java:279) at org.apache.axis2.transport.nhttp.ServerWorker.processPost (ServerWorker.java:207) at org.apache.axis2.transport.nhttp.ServerWorker.run (ServerWorker.java:171) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask (ThreadPoolExecutor.java:650) at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:675)
        at java.lang.Thread.run(Thread.java:613)

---




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to