[ 
https://issues.apache.org/jira/browse/SYNAPSE-867?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Andreas Veithen resolved SYNAPSE-867.
-------------------------------------

       Resolution: Fixed
    Fix Version/s: FUTURE

Fixed for 2.2 (BTW, why is there no 2.2 or 3.0 in the version list???)
                
> SwA responses are processed incorrectly
> ---------------------------------------
>
>                 Key: SYNAPSE-867
>                 URL: https://issues.apache.org/jira/browse/SYNAPSE-867
>             Project: Synapse
>          Issue Type: Bug
>          Components: Core
>            Reporter: Andreas Veithen
>             Fix For: FUTURE
>
>         Attachments: capture.txt
>
>
> When Synapse forwards a SwA response, the SOAP part is duplicated in the 
> forwarded response. This can be verified with Sample 51. The attached capture 
> (produced with the last successful Synapse build from the trunk) shows that 
> the response sent by Synapse to the client contains two SOAP parts. Note that 
> a capture of the traffic between Synapse and the server shows that the 
> response received by Synapse is correct. Sample 51 also allows to check that 
> the issue only occurs with SwA responses, but not with SwA requests.
> The probable root cause is that the message builder for SwA sets up the 
> message context with an Attachments object that contains all MIME parts 
> including the root part, while the message formatter for SwA expects that the 
> Attachments object in the message context only contains the attachment parts. 
> For SwA requests, this issue is handled by the following code in 
> MessageHelper#clonePartially:
>         Attachments attachments = ori.getAttachmentMap();
>         if (attachments != null && attachments.getAllContentIDs().length > 0) 
> {
>             String[] cIDs = attachments.getAllContentIDs();
>             String soapPart = attachments.getSOAPPartContentID();
>             for (String cID : cIDs) {
>                 if (!cID.equals(soapPart)) {
>                     newMC.addAttachment(cID, attachments.getDataHandler(cID));
>                 }
>             }
>         }
> Apparently that code is not executed for SwA responses, probably because a 
> response doesn't need to be cloned.
> In conjunction with the change in AXIS2-5302, the issue now causes the 
> following failure because the original SOAP part has been consumed:
> java.lang.IllegalStateException: The content of the MIME part has already 
> been consumed
>        at org.apache.axiom.attachments.PartImpl.getContent(PartImpl.java:154)
>        at org.apache.axiom.attachments.PartImpl.writeTo(PartImpl.java:238)
>        at 
> org.apache.axiom.attachments.PartDataHandler.writeTo(PartDataHandler.java:65)
>        at 
> org.apache.axiom.mime.impl.axiom.MultipartWriterImpl.writePart(MultipartWriterImpl.java:133)
>        at 
> org.apache.axiom.om.impl.OMMultipartWriter.writePart(OMMultipartWriter.java:159)
>        at 
> org.apache.axiom.om.impl.OMMultipartWriter.writePart(OMMultipartWriter.java:175)
>        at 
> org.apache.axis2.transport.http.SOAPMessageFormatter.writeSwAMessage(SOAPMessageFormatter.java:237)
>        at 
> org.apache.axis2.transport.http.SOAPMessageFormatter.writeTo(SOAPMessageFormatter.java:68)
>        at 
> org.apache.synapse.transport.nhttp.HttpCoreNIOSender.sendAsyncResponse(HttpCoreNIOSender.java:537)
>        at 
> org.apache.synapse.transport.nhttp.HttpCoreNIOSender.invoke(HttpCoreNIOSender.java:310)
>        at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:443)
>        at 
> org.apache.synapse.core.axis2.Axis2Sender.sendBack(Axis2Sender.java:159)
>        at 
> org.apache.synapse.core.axis2.Axis2SynapseEnvironment.send(Axis2SynapseEnvironment.java:265)
>        at 
> org.apache.synapse.mediators.builtin.SendMediator.mediate(SendMediator.java:84)
>        at 
> org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:60)
>        at 
> org.apache.synapse.mediators.filters.OutMediator.mediate(OutMediator.java:55)
>        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:188)
>        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:276)
>        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:680)

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@synapse.apache.org
For additional commands, e-mail: dev-h...@synapse.apache.org

Reply via email to