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 part attribute (in this example attch)
on the input message for the operation (in this example MyOperation).
There can be other input parts to MyOperation that 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 of text/xml is 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.
The type attribute inside the <mime:content> tag is not
checked or used by the gateway. It is there to suggest to the application
using the gateway what the attachment contains. Multiple <mime:content> tags
inside a single <mime:part> tag means that the backend 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,
then you must specify parts="" (empty string). If you omit the parts attribute
altogether, then the gateway assumes ALL parts including the attachments -
which means the attachments will appear twice.
In your WSDL you might have defined a schema for the attachment
(for instance as a binary[]). The gateway silently ignores this mapping
and treats the attachment as a Data Handler.
You do not need to mention
unreferenced attachments in the WSDL bindings.