Hi, I am working on enabling streaming xml events from OMElement inside ESB Smooks Mediator. This is to process large messages through Smooks mediator. Previously Smooks mediator used to build the message envelop as *synCtx.getEnvelope().build() *(synCtx is the MessageContext ) before processing the message. Since it builds the element inside memory, I removed that step.
I used to test the new streaming implementation with two scenarios. Scenario 1 :- Input message is read from the VFS transport, and streamed to Smooks mediator. Inside that message is processed by smooks and child elements from the MessageContext is detached & transformed element it added to MessageContext. This worked successfully. The ESB configuration sequence is, <inSequence> <smooks config-key="smooks-key"> <input type="xml"/> <output type="xml"/> </smooks> </inSequence> </outSequence> Scenario 2 :- A proxy service to a DSS endpoint and its response is processed by smooks mediator in outSequence. <endpoint> <address uri="http://localhost:9765/services/OrderDetails" /> </endpoint> <outSequence> <smooks config-key="smooks-key"> <input type="xml" /> <output type="xml" /> </smooks> <send /> </outSequence> After smooks processing the message, the child elements from the MessageContext envelop is detached and new transformed message is added. But when iterating through the MessageContext and calling next(), OMException is thrown as follows. *org.apache.axiom.om.OMException at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:212) at org.apache.axiom.soap.impl.llom.SOAPBodyImpl.buildNext(SOAPBodyImpl.java:171) at org.apache.axiom.om.impl.llom.OMNodeImpl.getNextOMSibling(OMNodeImpl.java:122) at org.apache.axiom.om.impl.llom.OMElementImpl.getNextOMSibling(OMElementImpl.java:343) at org.apache.axiom.om.impl.traverse.OMChildElementIterator.next(OMChildElementIterator.java:104) at org.wso2.carbon.mediator.transform.Output.setXMLPayload(Output.java:208) at org.wso2.carbon.mediator.transform.Output.process(Output.java:84) at org.wso2.carbon.mediator.transform.SmooksMediator.mediate(SmooksMediator.java:94) at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:60) at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:114) at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:219) at org.apache.synapse.core.axis2.SynapseCallbackReceiver.handleMessage(SynapseCallbackReceiver.java:370) at org.apache.synapse.core.axis2.SynapseCallbackReceiver.receive(SynapseCallbackReceiver.java:160) at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:181) at org.apache.synapse.transport.nhttp.ClientWorker.run(ClientWorker.java:275) at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:173) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662)* The issue is why only the second scenario can not access the MessageContext after smooks has processed the message. Adding back the *synCtx.getEnvelope().build() *solves this issue, but large messages can not be processed that way. Can anybody kindly look into this issue and explain why is it required to build up the message? Thanks, Lakmali -- Lakmali Baminiwatta* * Software Engineer WSO2, Inc.: http://wso2.com lean.enterprise.middleware mobile: +94 71 2335936 * *
_______________________________________________ Carbon-dev mailing list Carbon-dev@wso2.org http://mail.wso2.org/cgi-bin/mailman/listinfo/carbon-dev