Class DeserializationContext

  • All Implemented Interfaces:
    DeserializationContext, org.xml.sax.ContentHandler, org.xml.sax.DTDHandler, org.xml.sax.EntityResolver, org.xml.sax.ErrorHandler, org.xml.sax.ext.LexicalHandler

    public class DeserializationContext
    extends org.xml.sax.helpers.DefaultHandler
    implements DeserializationContext, org.xml.sax.ext.LexicalHandler
    This interface describes the AXIS DeserializationContext, note that an AXIS compliant DeserializationContext must extend the org.xml.sax.helpers.DefaultHandler.
    • Field Detail

      • log

        protected static org.apache.commons.logging.Log log
      • inputSource

        protected org.xml.sax.InputSource inputSource
      • startOfMappingsPos

        protected int startOfMappingsPos
      • haveSeenSchemaNS

        protected boolean haveSeenSchemaNS
    • Constructor Detail

      • DeserializationContext

        public DeserializationContext​(MessageContext ctx,
                                      SOAPHandler initialHandler)
        Construct Deserializer using MessageContext and EnvelopeBuilder handler
        Parameters:
        ctx - is the MessageContext
        initialHandler - is the EnvelopeBuilder handler
      • DeserializationContext

        public DeserializationContext​(org.xml.sax.InputSource is,
                                      MessageContext ctx,
                                      java.lang.String messageType)
        Construct Deserializer
        Parameters:
        is - is the InputSource
        ctx - is the MessageContext
        messageType - is the MessageType to construct an EnvelopeBuilder
      • DeserializationContext

        public DeserializationContext​(org.xml.sax.InputSource is,
                                      MessageContext ctx,
                                      java.lang.String messageType,
                                      SOAPEnvelope env)
        Construct Deserializer
        Parameters:
        is - is the InputSource
        ctx - is the MessageContext
        messageType - is the MessageType to construct an EnvelopeBuilder
        env - is the SOAPEnvelope to construct an EnvelopeBuilder
    • Method Detail

      • deserializing

        public void deserializing​(boolean isDeserializing)
      • getSOAPConstants

        public SOAPConstants getSOAPConstants()
        returns the soap constants.
      • parse

        public void parse()
                   throws org.xml.sax.SAXException
        Create a parser and parse the inputSource
        Throws:
        org.xml.sax.SAXException
      • getCurElement

        public MessageElement getCurElement()
        Get current MessageElement
      • setCurElement

        public void setCurElement​(MessageElement el)
        Set current MessageElement
      • getMessageContext

        public MessageContext getMessageContext()
        Get MessageContext
      • getEncodingStyle

        public java.lang.String getEncodingStyle()
        Returns this context's encoding style. If we've got a message context then we'll get the style from that; otherwise we'll return a default.
        Returns:
        a String value
      • getEnvelope

        public SOAPEnvelope getEnvelope()
        Get Envelope
      • setRecorder

        public void setRecorder​(SAX2EventRecorder recorder)
        Set Event Recorder
      • getCurrentNSMappings

        public java.util.ArrayList getCurrentNSMappings()
        Get the Namespace Mappings. Returns null if none are present.
      • getNamespaceURI

        public java.lang.String getNamespaceURI​(java.lang.String prefix)
        Get the Namespace for a particular prefix
      • getQNameFromString

        public QName getQNameFromString​(java.lang.String qNameStr)
        Construct a QName from a string of the form :
        Parameters:
        qNameStr - is the prefixed name from the xml text
        Returns:
        QName
      • getTypeFromXSITypeAttr

        public QName getTypeFromXSITypeAttr​(java.lang.String namespace,
                                            java.lang.String localName,
                                            org.xml.sax.Attributes attrs)
        Create a QName for the type of the element defined by localName and namespace from the XSI type.
        Parameters:
        namespace - of the element
        localName - is the local name of the element
        attrs - are the attributes on the element
      • getTypeFromAttributes

        public QName getTypeFromAttributes​(java.lang.String namespace,
                                           java.lang.String localName,
                                           org.xml.sax.Attributes attrs)
        Create a QName for the type of the element defined by localName and namespace with the specified attributes.
        Parameters:
        namespace - of the element
        localName - is the local name of the element
        attrs - are the attributes on the element
      • isNil

        public boolean isNil​(org.xml.sax.Attributes attrs)
        Convenenience method that returns true if the value is nil (due to the xsi:nil) attribute.
        Parameters:
        attrs - are the element attributes.
        Returns:
        true if xsi:nil is true
      • getDeserializer

        public final Deserializer getDeserializer​(java.lang.Class cls,
                                                  QName xmlType)
        Get a Deserializer which can turn a given xml type into a given Java type
      • getDeserializerForClass

        public Deserializer getDeserializerForClass​(java.lang.Class cls)
        Convenience method to get the Deserializer for a specific java class from its meta data.
        Parameters:
        cls - is the Class used to find the deserializer
        Returns:
        Deserializer
      • setDestinationClass

        public void setDestinationClass​(java.lang.Class destClass)
        Allows the destination class to be set so that downstream deserializers like ArrayDeserializer can pick it up when deserializing its components using getDeserializerForClass
        Parameters:
        destClass - is the Class of the component to be deserialized
      • getDestinationClass

        public java.lang.Class getDestinationClass()
        Allows the destination class to be retrieved so that downstream deserializers like ArrayDeserializer can pick it up when deserializing its components using getDeserializerForClass
        Returns:
        the Class of the component to be deserialized
      • getDeserializerForType

        public final Deserializer getDeserializerForType​(QName xmlType)
        Convenience method to get the Deserializer for a specific xmlType.
        Parameters:
        xmlType - is QName for a type to deserialize
        Returns:
        Deserializer
      • getTypeMapping

        public TypeMapping getTypeMapping()
        Get the TypeMapping for this DeserializationContext
      • getTypeMappingRegistry

        public TypeMappingRegistry getTypeMappingRegistry()
        Get the TypeMappingRegistry we're using.
        Returns:
        TypeMapping or null
      • getElementByID

        public MessageElement getElementByID​(java.lang.String id)
        Get the MessageElement for the indicated id (where id is the #value of an href) If the MessageElement has not been processed, the MessageElement will be returned. If the MessageElement has been processed, the actual object value is stored with the id and this routine will return null.
        Parameters:
        id - is the value of an href attribute
        Returns:
        MessageElement or null
      • getObjectByRef

        public java.lang.Object getObjectByRef​(java.lang.String href)
        Gets the MessageElement or actual Object value associated with the href value. The return of a MessageElement indicates that the referenced element has not been processed. If it is not a MessageElement, the Object is the actual deserialized value. In addition, this method is invoked to get Object values via Attachments.
        Parameters:
        href - is the value of an href attribute (or an Attachment id)
        Returns:
        MessageElement other Object or null
      • addObjectById

        public void addObjectById​(java.lang.String id,
                                  java.lang.Object obj)
        Add the object associated with this id (where id is the value of an id= attribute, i.e. it does not start with #). This routine is called to associate the deserialized object with the id specified on the XML element.
        Parameters:
        id - (id name without the #)
        obj - is the deserialized object for this id.
      • registerFixup

        public void registerFixup​(java.lang.String href,
                                  Deserializer dser)
        During deserialization, an element with an href=#id may be encountered before the element defining id=id is read. In these cases, the getObjectByRef method above will return null. The deserializer is placed in a table keyed by href (a fixup table). After the element id is processed, the deserializer is informed of the value so that it can update its target(s) with the value.
        Parameters:
        href - (#id syntax)
        dser - is the deserializer of the element
      • registerElementByID

        public void registerElementByID​(java.lang.String id,
                                        MessageElement elem)
        Register the MessageElement with this id (where id is id= form without the #) This routine is called when the MessageElement with an id is read. If there is a Deserializer in our fixup list (described above), the 'fixup' deserializer is given to the MessageElement. When the MessageElement is completed, the 'fixup' deserializer is informed and it can set its targets.
        Parameters:
        id - (id name without the #)
        elem - is the MessageElement
      • registerResolverForID

        public void registerResolverForID​(java.lang.String id,
                                          IDResolver resolver)
        Each id can have its own kind of resolver. This registers a resolver for the id.
      • hasElementsByID

        public boolean hasElementsByID()
        Return true if any ids are being tracked by this DeserializationContext
        Returns:
        true if any ides are being tracked by this DeserializationContext
      • getCurrentRecordPos

        public int getCurrentRecordPos()
        Get the current position in the record.
      • getStartOfMappingsPos

        public int getStartOfMappingsPos()
        Get the start of the mapping position
      • pushNewElement

        public void pushNewElement​(MessageElement elem)
        Push the MessageElement into the recorder
      • pushElementHandler

        public void pushElementHandler​(SOAPHandler handler)
        Management of sub-handlers (deserializers)
      • replaceElementHandler

        public void replaceElementHandler​(SOAPHandler handler)
        Replace the handler at the top of the stack. This is only used when we have a placeholder Deserializer for a referenced object which doesn't know its type until we hit the referent.
      • popElementHandler

        public SOAPHandler popElementHandler()
      • setProcessingRef

        public void setProcessingRef​(boolean ref)
      • isProcessingRef

        public boolean isProcessingRef()
      • startDocument

        public void startDocument()
                           throws org.xml.sax.SAXException
        SAX event handlers
        Specified by:
        startDocument in interface org.xml.sax.ContentHandler
        Overrides:
        startDocument in class org.xml.sax.helpers.DefaultHandler
        Throws:
        org.xml.sax.SAXException
      • endDocument

        public void endDocument()
                         throws org.xml.sax.SAXException
        endDocument is invoked at the end of the document.
        Specified by:
        endDocument in interface org.xml.sax.ContentHandler
        Overrides:
        endDocument in class org.xml.sax.helpers.DefaultHandler
        Throws:
        org.xml.sax.SAXException
      • isDoneParsing

        public boolean isDoneParsing()
        Return if done parsing document.
      • startPrefixMapping

        public void startPrefixMapping​(java.lang.String prefix,
                                       java.lang.String uri)
                                throws org.xml.sax.SAXException
        Record the current set of prefix mappings in the nsMappings table. !!! We probably want to have this mapping be associated with the MessageElements, since they may potentially need access to them long after the end of the prefix mapping here. (example: when we need to record a long string of events scanning forward in the document to find an element with a particular ID.)
        Specified by:
        startPrefixMapping in interface org.xml.sax.ContentHandler
        Overrides:
        startPrefixMapping in class org.xml.sax.helpers.DefaultHandler
        Throws:
        org.xml.sax.SAXException
      • endPrefixMapping

        public void endPrefixMapping​(java.lang.String prefix)
                              throws org.xml.sax.SAXException
        Specified by:
        endPrefixMapping in interface org.xml.sax.ContentHandler
        Overrides:
        endPrefixMapping in class org.xml.sax.helpers.DefaultHandler
        Throws:
        org.xml.sax.SAXException
      • setDocumentLocator

        public void setDocumentLocator​(org.xml.sax.Locator locator)
        Specified by:
        setDocumentLocator in interface org.xml.sax.ContentHandler
        Overrides:
        setDocumentLocator in class org.xml.sax.helpers.DefaultHandler
      • getDocumentLocator

        public org.xml.sax.Locator getDocumentLocator()
      • characters

        public void characters​(char[] p1,
                               int p2,
                               int p3)
                        throws org.xml.sax.SAXException
        Specified by:
        characters in interface org.xml.sax.ContentHandler
        Overrides:
        characters in class org.xml.sax.helpers.DefaultHandler
        Throws:
        org.xml.sax.SAXException
      • ignorableWhitespace

        public void ignorableWhitespace​(char[] p1,
                                        int p2,
                                        int p3)
                                 throws org.xml.sax.SAXException
        Specified by:
        ignorableWhitespace in interface org.xml.sax.ContentHandler
        Overrides:
        ignorableWhitespace in class org.xml.sax.helpers.DefaultHandler
        Throws:
        org.xml.sax.SAXException
      • processingInstruction

        public void processingInstruction​(java.lang.String p1,
                                          java.lang.String p2)
                                   throws org.xml.sax.SAXException
        Specified by:
        processingInstruction in interface org.xml.sax.ContentHandler
        Overrides:
        processingInstruction in class org.xml.sax.helpers.DefaultHandler
        Throws:
        org.xml.sax.SAXException
      • skippedEntity

        public void skippedEntity​(java.lang.String p1)
                           throws org.xml.sax.SAXException
        Specified by:
        skippedEntity in interface org.xml.sax.ContentHandler
        Overrides:
        skippedEntity in class org.xml.sax.helpers.DefaultHandler
        Throws:
        org.xml.sax.SAXException
      • startElement

        public void startElement​(java.lang.String namespace,
                                 java.lang.String localName,
                                 java.lang.String qName,
                                 org.xml.sax.Attributes attributes)
                          throws org.xml.sax.SAXException
        startElement is called when an element is read. This is the big work-horse. This guy also handles monitoring the recording depth if we're recording (so we know when to stop).
        Specified by:
        startElement in interface org.xml.sax.ContentHandler
        Overrides:
        startElement in class org.xml.sax.helpers.DefaultHandler
        Throws:
        org.xml.sax.SAXException
      • endElement

        public void endElement​(java.lang.String namespace,
                               java.lang.String localName,
                               java.lang.String qName)
                        throws org.xml.sax.SAXException
        endElement is called at the end tag of an element
        Specified by:
        endElement in interface org.xml.sax.ContentHandler
        Overrides:
        endElement in class org.xml.sax.helpers.DefaultHandler
        Throws:
        org.xml.sax.SAXException
      • startDTD

        public void startDTD​(java.lang.String name,
                             java.lang.String publicId,
                             java.lang.String systemId)
                      throws org.xml.sax.SAXException
        Specified by:
        startDTD in interface org.xml.sax.ext.LexicalHandler
        Throws:
        org.xml.sax.SAXException
      • endDTD

        public void endDTD()
                    throws org.xml.sax.SAXException
        Specified by:
        endDTD in interface org.xml.sax.ext.LexicalHandler
        Throws:
        org.xml.sax.SAXException
      • startEntity

        public void startEntity​(java.lang.String name)
                         throws org.xml.sax.SAXException
        Specified by:
        startEntity in interface org.xml.sax.ext.LexicalHandler
        Throws:
        org.xml.sax.SAXException
      • endEntity

        public void endEntity​(java.lang.String name)
                       throws org.xml.sax.SAXException
        Specified by:
        endEntity in interface org.xml.sax.ext.LexicalHandler
        Throws:
        org.xml.sax.SAXException
      • startCDATA

        public void startCDATA()
                        throws org.xml.sax.SAXException
        Specified by:
        startCDATA in interface org.xml.sax.ext.LexicalHandler
        Throws:
        org.xml.sax.SAXException
      • endCDATA

        public void endCDATA()
                      throws org.xml.sax.SAXException
        Specified by:
        endCDATA in interface org.xml.sax.ext.LexicalHandler
        Throws:
        org.xml.sax.SAXException
      • comment

        public void comment​(char[] ch,
                            int start,
                            int length)
                     throws org.xml.sax.SAXException
        Specified by:
        comment in interface org.xml.sax.ext.LexicalHandler
        Throws:
        org.xml.sax.SAXException
      • resolveEntity

        public org.xml.sax.InputSource resolveEntity​(java.lang.String publicId,
                                                     java.lang.String systemId)
        Specified by:
        resolveEntity in interface org.xml.sax.EntityResolver
        Overrides:
        resolveEntity in class org.xml.sax.helpers.DefaultHandler