Attachments semantics are different for incoming and outgoing messages

Details

Description

The message builders for MTOM and SwA both initialize the message context with an Attachments object that contains all MIME parts, including the root part. On the other hand, the corresponding message formatters have different expectations. The message formatter for MTOM doesn't look at the Attachments object in the message context because attachments are referenced by special OMText instances in the SOAP envelope. Finally, the message formatter for SwA assumes that the Attachments object in the message context only contains the attachment parts.

This means that for MTOM and SwA messages, the message context is set up differently for incoming and outgoing messages. Such inconsistencies in the API are not only annoying, but they also cause subtile issues in Synapse which needs to be able to forward messages, i.e. transform incoming into outgoing messages. One such issue is described in SYNAPSE-867.

The proposal is to change the semantics for incoming messages, such that they match the current semantics for outgoing messages. In practice this means:

1. The Attachments object in the message context would no longer be set for MTOM messages. In fact, code that attempts to directly access the MIME parts of an MTOM message is broken by definition, because the sender is free to choose which base64Binary elements are sent as attachments and which ones are inlined.
2. The message builder for SwA would remove the root part from the Attachments object before adding it to the message context, so that application code only sees attachments parts. In fact, there is no valid use case where application code would want to retrieve the SOAP part directly from the Attachments object.

Integrated in Axis2 #1410 (See https://builds.apache.org/job/Axis2/1410/)AXIS2-5308: In the SwA case, remove the root part from the Attachments object before adding it to the message context, so that the Attachments object in the message context always contains attachment parts only (both for incoming and for outgoing messages). (Revision 1332311)

Hudson
added a comment - 30/Apr/12 19:45 Integrated in Axis2 #1410 (See https://builds.apache.org/job/Axis2/1410/ )
AXIS2-5308 : In the SwA case, remove the root part from the Attachments object before adding it to the message context, so that the Attachments object in the message context always contains attachment parts only (both for incoming and for outgoing messages). (Revision 1332311)
Result = SUCCESS
veithen :
Files :
/axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/builder/SOAPBuilder.java

Integrated in Axis2 #1409 (See https://builds.apache.org/job/Axis2/1409/)
Made the design of the message builders responsible for building SwA and MTOM messages a bit more object oriented by introducing a MIMEAwareBuilder extension interface. MIMEBuilder now essentially dispatches to an instance of that interface.

This allows us to use the proper Axiom API to build MTOM messages. It will also make it easier to implement AXIS2-5308. (Revision 1332277)

Hudson
added a comment - 30/Apr/12 17:35 Integrated in Axis2 #1409 (See https://builds.apache.org/job/Axis2/1409/ )
Made the design of the message builders responsible for building SwA and MTOM messages a bit more object oriented by introducing a MIMEAwareBuilder extension interface. MIMEBuilder now essentially dispatches to an instance of that interface.
This allows us to use the proper Axiom API to build MTOM messages. It will also make it easier to implement AXIS2-5308 . (Revision 1332277)
Result = SUCCESS
veithen :
Files :
/axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/builder/MIMEAwareBuilder.java
/axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/builder/MIMEBuilder.java
/axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/builder/MTOMBuilder.java
/axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/builder/SOAPBuilder.java