SOAP Messages with Attachments: WSDL examples
Use this task to see an example and explanation of a WSDL file with an attachment.
Example
The following example WSDL illustrates a simple operation
that has one attachment called attch:
<binding name="MyBinding" type="tns:abc" >
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="MyOperation">
<soap:operation soapAction=""/>
<input>
<mime:multipartRelated>
<mime:part>
<soap:body parts="part1 part2 ..." use="encoded" namespace="http://mynamespace"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding"/>
</mime:part>
<mime:part>
<mime:content part="attch" type="text/html"/>
</mime:part>
</mime:multipartRelated>
</input>
</operation>
</binding>
In this type of WSDL extension:
- There must be a
partattribute (in this exampleattch) on the input message for the operation (in this exampleMyOperation). There can be other input parts toMyOperationthat are not attachments. - In the binding input there must either be a
<soap:body>tag or a<mime:multipartRelated>tag, but not both. - For MIME messages, the
<soap:body>tag is inside a<mime:part>tag. There must only be one<mime:part>tag that contains a<soap:body>tag in the binding input and that must not contain a<mime:content>tag as well, because a content type oftext/xmlis assumed for the<soap:body>tag. - There can be multiple attachments in a MIME message, each described
by a
<mime:part>tag. - Each
<mime:part>tag that does not contain a<soap:body>tag contains a<mime:content>tag that describes the attachment itself. Thetypeattribute inside the<mime:content>tag is not checked or used by the service integration bus. It is there to suggest, to the application that uses the service integration bus, what the attachment contains. Multiple<mime:content>tags inside a single<mime:part>tag means that the back end service expects a single attachment with a type specified by one of the<mime:content>tags inside that<mime:part>tag. - The
parts="..."attribute inside the<soap:body>tag is assumed to contain the names of all the SOAP parts in the message, but not the attachment parts. If there are only attachment parts, specifyparts=""(empty string). If you omit thepartsattribute altogether, then the service integration bus assumes ALL parts including the attachments - which causes the attachments to appear twice.
In your WSDL you might have defined a schema for the attachment
(for instance as a binary[]). The service integration
technologies silently ignore this mapping and treat the attachment
as a Data Handler.
You do not have to mention unreferenced attachments in the WSDL bindings.