[ 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