Object value, SerializationContext context)
throws IOException
{
DataHandler dh= (DataHandler)value;
//Add the attachment content to the message.
Attachments attachments= context.getCurrentMessage().getAttachmentsImpl();
if (attachments == null) {
// Attachments apparently aren't supported.
// Instead of throwing NullPointerException like
// we used to do, throw something meaningful.
throw new IOException(Messages.getMessage("noAttachments"));
}
SOAPConstants soapConstants = context.getMessageContext().getSOAPConstants();
Part attachmentPart= attachments.createAttachmentPart(dh);
AttributesImpl attrs = new AttributesImpl();
if (attributes != null && 0 < attributes.getLength())
attrs.setAttributes(attributes); //copy the existing ones.
int typeIndex=-1;
if((typeIndex = attrs.getIndex(Constants.URI_DEFAULT_SCHEMA_XSI,
"type")) != -1){
//Found a xsi:type which should not be there for attachments.
attrs.removeAttribute(typeIndex);
}
if(attachments.getSendType() == Attachments.SEND_TYPE_MTOM) {
context.setWriteXMLType(null);
context.startElement(name, attrs);
AttributesImpl attrs2 = new AttributesImpl();
attrs2.addAttribute("", soapConstants.getAttrHref(), soapConstants.getAttrHref(),
"CDATA", attachmentPart.getContentIdRef());
context.startElement(new QName(Constants.URI_XOP_INCLUDE, Constants.ELEM_XOP_INCLUDE), attrs2);
context.endElement();
context.endElement();
} else {
boolean doTheDIME = false;
if(attachments.getSendType() == Attachments.SEND_TYPE_DIME)
doTheDIME = true;
attrs.addAttribute("", soapConstants.getAttrHref(), soapConstants.getAttrHref(),
"CDATA", doTheDIME ? attachmentPart.getContentId() : attachmentPart.getContentIdRef() );