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]