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

VectorDeserializer

public class VectorDeserializer extends org.apache.axis.encoding.DeserializerImpl
Deserializer for SOAP Vectors for compatibility with SOAP 2.2.
author
Carsten Ziegeler (cziegeler@apache.org) Modified by @author Rich scheuerle

Fields Summary
protected static Log
log
public int
curIndex
Constructors Summary
Methods Summary
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)
onStartChild is called on each child element.

param
namespace is the namespace of the child element
param
localName is the local name of the child element
param
prefix is the prefix used on the name of the child element
param
attributes are the attributes of the child element
param
context is the deserialization context.
return
is a Deserializer to use to deserialize a child (must be a derived class of SOAPHandler) or null if no deserialization should be performed.

        if (log.isDebugEnabled()) {
            log.debug("Enter: VectorDeserializer::onStartChild()");
        }
        
        if (attributes == null)
            throw new SAXException(Messages.getMessage("noType01"));

        // If the xsi:nil attribute, set the value to null and return since
        // there is nothing to deserialize.
        if (context.isNil(attributes)) {
            setChildValue(null, new Integer(curIndex++));
            return null;
        }

        // Get the type
        QName itemType = context.getTypeFromAttributes(namespace,
                                                       localName,
                                                       attributes);
        // Get the deserializer
        Deserializer dSer = null;
        if (itemType != null) {
           dSer = context.getDeserializerForType(itemType);
        }
        if (dSer == null) {
            dSer = new DeserializerImpl();
        }

        // When the value is deserialized, inform us.
        // Need to pass the index because multi-ref stuff may 
        // result in the values being deserialized in a different order.
        dSer.registerValueTarget(new DeserializerTarget(this, new Integer(curIndex)));
        curIndex++;

        if (log.isDebugEnabled()) {
            log.debug("Exit: VectorDeserializer::onStartChild()");
        }
        
        // Let the framework know that we aren't complete until this guy
        // is complete.
        addChildDeserializer(dSer);
        
        return (SOAPHandler)dSer;
    
public voidonStartElement(java.lang.String namespace, java.lang.String localName, java.lang.String prefix, org.xml.sax.Attributes attributes, org.apache.axis.encoding.DeserializationContext context)
This method is invoked after startElement when the element requires deserialization (i.e. the element is not an href and the value is not nil.) Simply creates

param
namespace is the namespace of the element
param
localName is the name of the element
param
prefix is the prefix of the element
param
attributes are the attributes on the element...used to get the type
param
context is the DeserializationContext


                                                                              
         
                                  
                                
          
        if (log.isDebugEnabled()) {
            log.debug("Enter: VectorDeserializer::startElement()");
        }
        
        if (context.isNil(attributes)) { 
            return;
        }
        
        // Create a vector to hold the deserialized values.
        setValue(new java.util.Vector());
        
        if (log.isDebugEnabled()) {
            log.debug("Exit: VectorDeserializer::startElement()");
        }
    
public voidsetChildValue(java.lang.Object value, java.lang.Object hint)
The registerValueTarget code above causes this set function to be invoked when each value is known.

param
value is the value of an element
param
hint is an Integer containing the index

        if (log.isDebugEnabled()) {
            log.debug(Messages.getMessage("gotValue00", "VectorDeserializer", "" + value));
        }
        int offset = ((Integer)hint).intValue();
        Vector v = (Vector)this.value;
        
        // If the vector is too small, grow it 
        if (offset >= v.size()) {
            v.setSize(offset+1);
        }
        v.setElementAt(value, offset);