Package org.apache.axis.encoding
Class DeserializationContext
- java.lang.Object
-
- org.xml.sax.helpers.DefaultHandler
-
- org.apache.axis.encoding.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 Summary
Fields Modifier and Type Field Description protected boolean
haveSeenSchemaNS
protected org.xml.sax.InputSource
inputSource
protected static org.apache.commons.logging.Log
log
protected MessageContext
msgContext
protected int
startOfMappingsPos
-
Constructor Summary
Constructors Constructor Description DeserializationContext(MessageContext ctx, SOAPHandler initialHandler)
Construct Deserializer using MessageContext and EnvelopeBuilder handlerDeserializationContext(org.xml.sax.InputSource is, MessageContext ctx, java.lang.String messageType)
Construct DeserializerDeserializationContext(org.xml.sax.InputSource is, MessageContext ctx, java.lang.String messageType, SOAPEnvelope env)
Construct Deserializer
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description 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.void
characters(char[] p1, int p2, int p3)
void
comment(char[] ch, int start, int length)
void
deserializing(boolean isDeserializing)
void
endCDATA()
void
endDocument()
endDocument is invoked at the end of the document.void
endDTD()
void
endElement(java.lang.String namespace, java.lang.String localName, java.lang.String qName)
endElement is called at the end tag of an elementvoid
endEntity(java.lang.String name)
void
endPrefixMapping(java.lang.String prefix)
MessageElement
getCurElement()
Get current MessageElementjava.util.ArrayList
getCurrentNSMappings()
Get the Namespace Mappings.int
getCurrentRecordPos()
Get the current position in the record.Deserializer
getDeserializer(java.lang.Class cls, QName xmlType)
Get a Deserializer which can turn a given xml type into a given Java typeDeserializer
getDeserializerForClass(java.lang.Class cls)
Convenience method to get the Deserializer for a specific java class from its meta data.Deserializer
getDeserializerForType(QName xmlType)
Convenience method to get the Deserializer for a specific xmlType.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 getDeserializerForClassorg.xml.sax.Locator
getDocumentLocator()
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.java.lang.String
getEncodingStyle()
Returns this context's encoding style.SOAPEnvelope
getEnvelope()
Get EnvelopeMessageContext
getMessageContext()
Get MessageContextjava.lang.String
getNamespaceURI(java.lang.String prefix)
Get the Namespace for a particular prefixjava.lang.Object
getObjectByRef(java.lang.String href)
Gets the MessageElement or actual Object value associated with the href value.QName
getQNameFromString(java.lang.String qNameStr)
Construct a QName from a string of the form: SAX2EventRecorder
getRecorder()
Get Event RecorderSOAPConstants
getSOAPConstants()
returns the soap constants.int
getStartOfMappingsPos()
Get the start of the mapping positionQName
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.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.TypeMapping
getTypeMapping()
Get the TypeMapping for this DeserializationContextTypeMappingRegistry
getTypeMappingRegistry()
Get the TypeMappingRegistry we're using.boolean
hasElementsByID()
Return true if any ids are being tracked by this DeserializationContextvoid
ignorableWhitespace(char[] p1, int p2, int p3)
boolean
isDoneParsing()
Return if done parsing document.boolean
isNil(org.xml.sax.Attributes attrs)
Convenenience method that returns true if the value is nil (due to the xsi:nil) attribute.boolean
isProcessingRef()
void
parse()
Create a parser and parse the inputSourceSOAPHandler
popElementHandler()
void
processingInstruction(java.lang.String p1, java.lang.String p2)
void
pushElementHandler(SOAPHandler handler)
Management of sub-handlers (deserializers)void
pushNewElement(MessageElement elem)
Push the MessageElement into the recordervoid
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.void
registerFixup(java.lang.String href, Deserializer dser)
During deserialization, an element with an href=#idmay be encountered before the element defining id=id is read. void
registerResolverForID(java.lang.String id, IDResolver resolver)
Each id can have its own kind of resolver.void
replaceElementHandler(SOAPHandler handler)
Replace the handler at the top of the stack.org.xml.sax.InputSource
resolveEntity(java.lang.String publicId, java.lang.String systemId)
void
setCurElement(MessageElement el)
Set current MessageElementvoid
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 getDeserializerForClassvoid
setDocumentLocator(org.xml.sax.Locator locator)
void
setProcessingRef(boolean ref)
void
setRecorder(SAX2EventRecorder recorder)
Set Event Recordervoid
skippedEntity(java.lang.String p1)
void
startCDATA()
void
startDocument()
SAX event handlersvoid
startDTD(java.lang.String name, java.lang.String publicId, java.lang.String systemId)
void
startElement(java.lang.String namespace, java.lang.String localName, java.lang.String qName, org.xml.sax.Attributes attributes)
startElement is called when an element is read.void
startEntity(java.lang.String name)
void
startPrefixMapping(java.lang.String prefix, java.lang.String uri)
Record the current set of prefix mappings in the nsMappings table.
-
-
-
Field Detail
-
log
protected static org.apache.commons.logging.Log log
-
msgContext
protected MessageContext msgContext
-
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 MessageContextinitialHandler
- is the EnvelopeBuilder handler
-
DeserializationContext
public DeserializationContext(org.xml.sax.InputSource is, MessageContext ctx, java.lang.String messageType)
Construct Deserializer- Parameters:
is
- is the InputSourcectx
- is the MessageContextmessageType
- 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 InputSourcectx
- is the MessageContextmessageType
- is the MessageType to construct an EnvelopeBuilderenv
- 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
-
getRecorder
public SAX2EventRecorder getRecorder()
Get Event Recorder
-
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 elementlocalName
- is the local name of the elementattrs
- 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 elementlocalName
- is the local name of the elementattrs
- 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=#idmay 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 interfaceorg.xml.sax.ContentHandler
- Overrides:
startDocument
in classorg.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 interfaceorg.xml.sax.ContentHandler
- Overrides:
endDocument
in classorg.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 interfaceorg.xml.sax.ContentHandler
- Overrides:
startPrefixMapping
in classorg.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 interfaceorg.xml.sax.ContentHandler
- Overrides:
endPrefixMapping
in classorg.xml.sax.helpers.DefaultHandler
- Throws:
org.xml.sax.SAXException
-
setDocumentLocator
public void setDocumentLocator(org.xml.sax.Locator locator)
- Specified by:
setDocumentLocator
in interfaceorg.xml.sax.ContentHandler
- Overrides:
setDocumentLocator
in classorg.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 interfaceorg.xml.sax.ContentHandler
- Overrides:
characters
in classorg.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 interfaceorg.xml.sax.ContentHandler
- Overrides:
ignorableWhitespace
in classorg.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 interfaceorg.xml.sax.ContentHandler
- Overrides:
processingInstruction
in classorg.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 interfaceorg.xml.sax.ContentHandler
- Overrides:
skippedEntity
in classorg.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 interfaceorg.xml.sax.ContentHandler
- Overrides:
startElement
in classorg.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 interfaceorg.xml.sax.ContentHandler
- Overrides:
endElement
in classorg.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 interfaceorg.xml.sax.ext.LexicalHandler
- Throws:
org.xml.sax.SAXException
-
endDTD
public void endDTD() throws org.xml.sax.SAXException
- Specified by:
endDTD
in interfaceorg.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 interfaceorg.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 interfaceorg.xml.sax.ext.LexicalHandler
- Throws:
org.xml.sax.SAXException
-
startCDATA
public void startCDATA() throws org.xml.sax.SAXException
- Specified by:
startCDATA
in interfaceorg.xml.sax.ext.LexicalHandler
- Throws:
org.xml.sax.SAXException
-
endCDATA
public void endCDATA() throws org.xml.sax.SAXException
- Specified by:
endCDATA
in interfaceorg.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 interfaceorg.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 interfaceorg.xml.sax.EntityResolver
- Overrides:
resolveEntity
in classorg.xml.sax.helpers.DefaultHandler
-
-