public final class XmlSchemaPathFinder<U,V>
extends org.xml.sax.helpers.DefaultHandler
This is a traditional DefaultHandler that can be attached to either a
SAXParser during a parse, or to
SaxWalkerOverDom to find paths through an
Document.
Because this is a SAX-based walk, the source information need not be an XML document. It can be any data that can be interpreted via a SAX walk. This can be helpful when trying to confirm the source data can be converted back into XML.
| Modifier and Type | Class and Description |
|---|---|
private static class |
XmlSchemaPathFinder.DecisionPoint<U,V> |
private static class |
XmlSchemaPathFinder.Fulfillment |
private static class |
XmlSchemaPathFinder.PathSegment<U,V> |
private static class |
XmlSchemaPathFinder.TraversedElement |
| Modifier and Type | Field and Description |
|---|---|
private java.util.ArrayList<javax.xml.namespace.QName> |
anyStack |
private XmlSchemaPathNode<U,V> |
currentPath |
private java.util.ArrayList<XmlSchemaPathFinder.DecisionPoint<U,V>> |
decisionPoints |
private java.util.ArrayList<javax.xml.namespace.QName> |
elementStack |
private static int |
MAX_DEPTH |
private XmlSchemaNamespaceContext |
nsContext |
private XmlSchemaPathManager<U,V> |
pathMgr |
private XmlSchemaPathNode<U,V> |
rootPathNode |
private java.util.ArrayList<XmlSchemaPathFinder.TraversedElement> |
traversedElements |
| Constructor and Description |
|---|
XmlSchemaPathFinder(XmlSchemaStateMachineNode root)
Creates a new
XmlToAvroPathCreator with the root
XmlSchemaStateMachineNode to start from when evaluating
documents. |
| Modifier and Type | Method and Description |
|---|---|
void |
characters(char[] ch,
int start,
int length)
Adds a new
XmlSchemaPathNode.Direction.CONTENT
XmlSchemaPathNode to the path. |
void |
endDocument()
Called when the XML Document traversal is complete.
|
void |
endElement(java.lang.String uri,
java.lang.String localName,
java.lang.String qName)
Ends the current element.
|
void |
endPrefixMapping(java.lang.String prefix)
Handles the end of a prefix mapping in the SAX walk.
|
private java.util.List<XmlSchemaPathFinder.PathSegment<U,V>> |
find(XmlSchemaPathNode<U,V> startNode,
javax.xml.namespace.QName elemQName) |
private java.util.List<XmlSchemaPathFinder.PathSegment<U,V>> |
find(XmlSchemaPathNode<U,V> startNode,
javax.xml.namespace.QName elemQName,
int currDepth) |
private java.util.List<XmlSchemaPathFinder.PathSegment<U,V>> |
find(XmlSchemaPathNode<U,V> startNode,
javax.xml.namespace.QName elemQName,
XmlSchemaStateMachineNode doNotFollow) |
private void |
followPath(XmlSchemaPathFinder.PathSegment<U,V> path) |
private java.lang.String |
getElementsTraversedAsString() |
private java.lang.String |
getLeafNodeName(XmlSchemaStateMachineNode node) |
private XmlSchemaStateMachineNode |
getStateMachineOfOwningElement() |
XmlSchemaPathNode<U,V> |
getXmlSchemaTraversal()
Once a traversal completes successfully, this method may be called to
retrieve the relevant interpretation of the path through the
XmlSchemaStateMachineNodes. |
private static <U,V> XmlSchemaPathFinder.Fulfillment |
isPositionFulfilled(XmlSchemaPathNode<U,V> currentPath,
java.util.List<java.lang.Integer> possiblePaths) |
void |
startDocument()
Kick-starts a new SAX walk, building new
XmlSchemaPathNode
and XmlSchemaDocumentNode traversals in the process. |
void |
startElement(java.lang.String uri,
java.lang.String localName,
java.lang.String qName,
org.xml.sax.Attributes atts)
Find the path through the XML Schema that best matches this element,
traversing any relevant groups, and backtracking if necessary.
|
void |
startPrefixMapping(java.lang.String prefix,
java.lang.String uri)
Handles a new prefix mapping in the SAX walk.
|
private void |
validateAttributes(org.xml.sax.Attributes attrs) |
private void |
verifyCurrentPositionIsAtElement(java.lang.String errMsgPrefix) |
private void |
walkUpToElement(javax.xml.namespace.QName element) |
private void |
walkUpTree(javax.xml.namespace.QName currElem) |
private static final int MAX_DEPTH
private final XmlSchemaNamespaceContext nsContext
private XmlSchemaPathNode<U,V> rootPathNode
private XmlSchemaPathNode<U,V> currentPath
private java.util.ArrayList<XmlSchemaPathFinder.TraversedElement> traversedElements
private java.util.ArrayList<XmlSchemaPathFinder.DecisionPoint<U,V>> decisionPoints
private java.util.ArrayList<javax.xml.namespace.QName> elementStack
private java.util.ArrayList<javax.xml.namespace.QName> anyStack
private XmlSchemaPathManager<U,V> pathMgr
public XmlSchemaPathFinder(XmlSchemaStateMachineNode root)
XmlToAvroPathCreator with the root
XmlSchemaStateMachineNode to start from when evaluating
documents.public void startDocument()
throws org.xml.sax.SAXException
XmlSchemaPathNode
and XmlSchemaDocumentNode traversals in the process.startDocument in interface org.xml.sax.ContentHandlerstartDocument in class org.xml.sax.helpers.DefaultHandlerorg.xml.sax.SAXExceptionDefaultHandler.startDocument()public void startPrefixMapping(java.lang.String prefix,
java.lang.String uri)
throws org.xml.sax.SAXException
startPrefixMapping in interface org.xml.sax.ContentHandlerstartPrefixMapping in class org.xml.sax.helpers.DefaultHandlerorg.xml.sax.SAXExceptionDefaultHandler.startPrefixMapping(String, String)public void endPrefixMapping(java.lang.String prefix)
throws org.xml.sax.SAXException
endPrefixMapping in interface org.xml.sax.ContentHandlerendPrefixMapping in class org.xml.sax.helpers.DefaultHandlerorg.xml.sax.SAXExceptionDefaultHandler.endPrefixMapping(String)public void startElement(java.lang.String uri,
java.lang.String localName,
java.lang.String qName,
org.xml.sax.Attributes atts)
throws org.xml.sax.SAXException
startElement in interface org.xml.sax.ContentHandlerstartElement in class org.xml.sax.helpers.DefaultHandlerorg.xml.sax.SAXExceptionDefaultHandler.startElement(String, String, String, Attributes)public void characters(char[] ch,
int start,
int length)
throws org.xml.sax.SAXException
XmlSchemaPathNode.Direction.CONTENT
XmlSchemaPathNode to the path. Throws an
IllegalStateException if the owning element should not receive
content, or the content is empty when it should not be.characters in interface org.xml.sax.ContentHandlercharacters in class org.xml.sax.helpers.DefaultHandlerorg.xml.sax.SAXExceptionDefaultHandler.characters(char[], int, int)public void endElement(java.lang.String uri,
java.lang.String localName,
java.lang.String qName)
throws org.xml.sax.SAXException
uri and localName, throws an
IllegalStateException.endElement in interface org.xml.sax.ContentHandlerendElement in class org.xml.sax.helpers.DefaultHandlerorg.xml.sax.SAXExceptionDefaultHandler.endElement(String, String, String)public void endDocument()
throws org.xml.sax.SAXException
Confirms all open elements have been closed. If not, throws an
IllegalStateException.
endDocument in interface org.xml.sax.ContentHandlerendDocument in class org.xml.sax.helpers.DefaultHandlerorg.xml.sax.SAXExceptionpublic XmlSchemaPathNode<U,V> getXmlSchemaTraversal()
XmlSchemaStateMachineNodes.
XmlSchemaPathNode.getDocumentNode() can be called to retrieve the
interpretation of the XML Schema as applied to the document; meanwhile
the walk through XmlSchemaPathNodes will show how that schema was
traversed.
private static <U,V> XmlSchemaPathFinder.Fulfillment isPositionFulfilled(XmlSchemaPathNode<U,V> currentPath, java.util.List<java.lang.Integer> possiblePaths)
private java.util.List<XmlSchemaPathFinder.PathSegment<U,V>> find(XmlSchemaPathNode<U,V> startNode, javax.xml.namespace.QName elemQName)
private java.util.List<XmlSchemaPathFinder.PathSegment<U,V>> find(XmlSchemaPathNode<U,V> startNode, javax.xml.namespace.QName elemQName, XmlSchemaStateMachineNode doNotFollow)
private java.util.List<XmlSchemaPathFinder.PathSegment<U,V>> find(XmlSchemaPathNode<U,V> startNode, javax.xml.namespace.QName elemQName, int currDepth)
private void walkUpTree(javax.xml.namespace.QName currElem)
private void walkUpToElement(javax.xml.namespace.QName element)
private void followPath(XmlSchemaPathFinder.PathSegment<U,V> path)
private java.lang.String getElementsTraversedAsString()
private void verifyCurrentPositionIsAtElement(java.lang.String errMsgPrefix)
private java.lang.String getLeafNodeName(XmlSchemaStateMachineNode node)
private XmlSchemaStateMachineNode getStateMachineOfOwningElement()
private void validateAttributes(org.xml.sax.Attributes attrs)