Incluso aunque SOAP es un protocolo basado en XML, no siempre es conveniente forzar que todos los datos que se pasan como parte de un mensaje SOAP est�n codificados de una forma que pueda ser embebida dentro de un documento XML. Algunas veces ser�a mejor s�lo permitir que datos, como im�genes JPEG, ficheros WAV, etc., sean pasados junto con el mensaje SOAP en vez de dentro de �l. Para corregir este problema, se cre� la especificaci�n SOAP Messages with Attachments. Esta especificaci�n permite embeber un mensaje SOAP dentro de un documento MIME, de una manera en la que no altere la reglas de procesamiento del mensaje. La especificaci�n tambi�n describe c�mo referirse a los attachments desde dentro del cuerpo de un mensaje SOAP. Apache SOAP contiene una implementaci�n de esta especificaci�n.
�Usar Attachments en el Cliente
Si estamos interactuando con un servicio basado en RPC, podr�amos no tener que hacer nada especial para transmitir un attachment. Existen serializadores/deserializadores predefinidos para interact�ar con objetos javax.activation.DataSource y javax.activation.DataHandler. Si nuestros objetos pueden pasarse a trav�s de uno de estos mecanismos, entonces el c�digo RPC manejar� la creaci�n y/o eleminaci�n de attachments por nosotros.
Si estamos usando un servicio orientado a mensaje, o necesitamos un control fino sobre los attachements, podemos usar m�todos de las clases org.apache.soap.messaging.Message, org.apache.soap.rpc.Call, o org.apache.soap.rpc.Response. Los m�todos addBodyPart(...) nos permitir�n a�adir un objeto javax.mail.internet.MimeBodyPart a nuestros mensajes, mientras que los m�todos findBodyPart(...) y getBodyPart(...) nos permtir�n recuperarlos mediante el Content-URI y la localizaci�n dentro del mensajes, respectivamente.
�Usar Attachments en el Servidor
Al igual que en el caso del cliente, si estamos implementando un servicio basado en RPC podr�amos aprovecharnos de los serializadores/deserializadores internos para los objetos DataSource y DataHandler.
Si est�mos implemendo un servicio orientado a mensaje, o necesitamos un control fino sobre los attachments, podemos usar los m�todos de la clase org.apache.soap.rpc.SOAPContext para a�adir o recuperar MimeBodyParts.
�Referenciar Attachments desde dentro de un Mensaje SOAP
Para hacer que los attachments sean realmente �tiles, necesitamos poder referirnos a ellos desde dentro del contenido de un cuerpo de mensaje SOAP. Para referirnos a un attachment desde dentro de un mensaje, simplemente a�adimos un elemento como este:
<elemName href="cid:cid-uri">
donde elemName es el nombre de alg�n elemento dentro del mensaje, y cid-uri es el nombre de URL codificada del Content-ID del attachment al que no est�mos refiriendo, o alternativamente, una URI absoluta o relativa que se refiere al Content-Location del attachment. (El Content-ID se selecciona como parte del javax.mail.internet.MimeBodyPart.)