// 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() );
context.startElement(name, attrs);
context.endElement(); //There is no data to so end the element.
}
}