FileDocCategorySizeDatePackage
JAFDataHandlerSerializer.javaAPI DocApache Axis 1.44676Sat Apr 22 18:57:26 BST 2006org.apache.axis.encoding.ser

JAFDataHandlerSerializer

public class JAFDataHandlerSerializer extends Object implements org.apache.axis.encoding.Serializer
JAFDataHandler Serializer
author
Rick Rineholt Modified by Rich Scheuerle

Fields Summary
protected static Log
log
Constructors Summary
Methods Summary
public java.lang.StringgetMechanismType()

 return Constants.AXIS_SAX; 
public voidserialize(javax.xml.namespace.QName name, org.xml.sax.Attributes attributes, java.lang.Object value, org.apache.axis.encoding.SerializationContext context)
Serialize a JAF DataHandler quantity.


              
         
                             
         
    
        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() );

            context.startElement(name, attrs);
            context.endElement(); //There is no data to so end the element.
        }
    
public org.w3c.dom.ElementwriteSchema(java.lang.Class javaType, org.apache.axis.wsdl.fromJava.Types types)
Return XML schema for the specified type, suitable for insertion into the <types> element of a WSDL document, or underneath an <element> or <attribute> declaration.

param
javaType the Java Class we're writing out schema for
param
types the Java2WSDL Types object which holds the context for the WSDL being generated.
return
a type element containing a schema simpleType/complexType
see
org.apache.axis.wsdl.fromJava.Types

        return null;