FileDocCategorySizeDatePackage
SOAPHandler.javaAPI DocApache Axis 1.46116Sat Apr 22 18:57:28 BST 2006org.apache.axis.message

SOAPHandler

public class SOAPHandler extends DefaultHandler
A SOAPHandler
author
Glen Daniels (gdaniels@allaire.com)

Fields Summary
public MessageElement
myElement
private MessageElement[]
myElements
private int
myIndex
private CharArrayWriter
val
Constructors Summary
public SOAPHandler()

    
      
    
public SOAPHandler(MessageElement[] elements, int index)
This constructor allows deferred setting of any elements

param
elements array of message elements to be populated
param
index position in array where the message element is to be created

        myElements = elements;
        myIndex = index;
    
Methods Summary
private voidaddTextNode()

        if (myElement != null) {
            if (val != null && val.size() > 0) {
                String s = StringUtils.strip(val.toString());
                val.reset();
                
                // we need to check the length of STRIPPED string 
                // to avoid appending ignorable white spaces as 
                // message elmenet's child. 
                // (SOAPHeader and others does not accept text children...
                // but in SAAJ 1.2's DOM view, this could be incorrect.
                // we need to keep the ignorable white spaces later)
                if(s.length()>0){
                    try {
                        // add unstripped string as text child.
                        myElement.addTextNode(s);
                    } catch (SOAPException e) {
                        throw new SAXException(e);
                    }
                }
            }
        }
    
public voidcharacters(char[] chars, int start, int end)

        if (val == null) {
            val = new CharArrayWriter();
        }
        val.write(chars, start, end);
    
public voidendElement(java.lang.String namespace, java.lang.String localName, org.apache.axis.encoding.DeserializationContext context)

        if (myElement != null) {
            addTextNode();	

            if (myElements != null) {
                myElements[myIndex] = myElement;
            }
            myElement.setEndIndex(context.getCurrentRecordPos());
        }
    
public MessageElementmakeNewElement(java.lang.String namespace, java.lang.String localName, java.lang.String prefix, org.xml.sax.Attributes attributes, org.apache.axis.encoding.DeserializationContext context)

        return new MessageElement(namespace, localName,
                                               prefix, attributes, context);
    
public voidonEndChild(java.lang.String namespace, java.lang.String localName, org.apache.axis.encoding.DeserializationContext context)

    
public org.apache.axis.message.SOAPHandleronStartChild(java.lang.String namespace, java.lang.String localName, java.lang.String prefix, org.xml.sax.Attributes attributes, org.apache.axis.encoding.DeserializationContext context)

        addTextNode();
        SOAPHandler handler = new SOAPHandler();
        return handler;
    
public voidstartElement(java.lang.String namespace, java.lang.String localName, java.lang.String prefix, org.xml.sax.Attributes attributes, org.apache.axis.encoding.DeserializationContext context)

        SOAPConstants soapConstants = context.getSOAPConstants();

        if (soapConstants == SOAPConstants.SOAP12_CONSTANTS) {
            String encodingStyle = attributes.getValue(Constants.URI_SOAP12_ENV,
                                Constants.ATTR_ENCODING_STYLE);

            if (encodingStyle != null && !encodingStyle.equals("")
                && !encodingStyle.equals(Constants.URI_SOAP12_NOENC)
                && !Constants.isSOAP_ENC(encodingStyle)) {
                TypeMappingRegistry tmr = context.getTypeMappingRegistry();
                // TODO: both soap encoding style is registered ?
                if (tmr.getTypeMapping(encodingStyle) == tmr.getDefaultTypeMapping()) {
                    AxisFault fault = new AxisFault(Constants.FAULT_SOAP12_DATAENCODINGUNKNOWN,
                        null, Messages.getMessage("invalidEncodingStyle"), null, null, null);

                    throw new SAXException(fault);
                }
            }
        }


        // By default, make a new element
        if (!context.isDoneParsing() && !context.isProcessingRef()) {
            if (myElement == null) {
                try {
                    myElement = makeNewElement(namespace, localName, prefix,
                                               attributes, context);
                } catch (AxisFault axisFault) {
                    throw new SAXException(axisFault);
                }
            }
            context.pushNewElement(myElement);
        }