- java.lang.Object
-
- com.sun.xml.xsom.impl.parser.state.NGCCRuntime
-
- com.sun.xml.xsom.impl.parser.NGCCRuntimeEx
-
- All Implemented Interfaces:
PatcherManager
,NGCCEventSource
,ContentHandler
public class NGCCRuntimeEx extends NGCCRuntime implements PatcherManager
NGCCRuntime extended with various utility methods for parsing XML Schema.- Author:
- Kohsuke Kawaguchi ([email protected])
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface com.sun.xml.xsom.impl.parser.PatcherManager
PatcherManager.Patcher
-
-
Field Summary
Fields Modifier and Type Field Description boolean
attributeFormDefault
The @attributeFormDefault value of the current schema.int
blockDefault
The @blockDefault value of the current schema.boolean
chameleonMode
True if the current schema is in a chameleon mode.SchemaImpl
currentSchema
The schema currently being parsed.SchemaDocumentImpl
document
Points to theSchemaDocumentImpl
that represents the schema document being parsed.boolean
elementFormDefault
The @elementFormDefault value of the current schema.int
finalDefault
The @finalDefault value of the current schema.ParserContext
parser
coordinator.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addErrorChecker(Patch patcher)
void
addPatcher(Patch patcher)
void
checkDoubleDefError(XSDeclaration c)
String
collapse(String text)
Utility function for collapsing the namespaces inside qname declarations and 'name' attribute values that should contain the qname valuesLocator
copyLocator()
Creates a copy of the current locator object.AnnotationParser
createAnnotationParser()
Creates a new instance of annotation parser.ValidationContext
createValidationContext()
Returns an immutable snapshot of the current context.XmlString
createXmlString(String value)
void
endPrefixMapping(String prefix)
String
getAnnotationContextElementName()
Gets the element name that contains the annotation element.This method works correctly only when called by the annotation handler.ErrorHandler
getErrorHandler()
boolean
hasAlreadyBeenRead()
Called when a new document is being parsed and checks if the document has already been parsed before.static boolean
ignorableDuplicateComponent(XSDeclaration c)
void
importSchema(String ns, String schemaLocation)
Imports the specified schema.void
includeSchema(String schemaLocation)
Includes the specified schema.void
onEnterElementConsumed(String uri, String localName, String qname, Attributes atts)
Called by the generated handler code when an enter element event is consumed.void
onLeaveElementConsumed(String uri, String localName, String qname)
boolean
parseBoolean(String v)
void
parseEntity(InputSource source, boolean includeMode, String expectedNamespace, Locator importLocation)
Parses the specified entity.ForeignAttributesImpl
parseForeignAttributes(ForeignAttributesImpl next)
UName
parseUName(String qname)
Parses UName under the given context.void
reportError(String msg)
void
reportError(String msg, Locator loc)
Reports an error during the parsing.void
startPrefixMapping(String prefix, String uri)
protected void
unexpectedX(String token)
-
Methods inherited from class com.sun.xml.xsom.impl.parser.state.NGCCRuntime
characters, consumeAttribute, endDocument, endElement, getAttributeIndex, getCurrentAttributes, getLocator, ignorableWhitespace, processingInstruction, processList, redirectSubtree, replace, reset, resolveNamespacePrefix, sendEnterAttribute, sendEnterElement, sendLeaveAttribute, sendLeaveElement, sendText, setDocumentLocator, setRootHandler, skippedEntity, startDocument, startElement, trace, traceln
-
-
-
-
Field Detail
-
parser
public final ParserContext parser
coordinator.
-
currentSchema
public SchemaImpl currentSchema
The schema currently being parsed.
-
finalDefault
public int finalDefault
The @finalDefault value of the current schema.
-
blockDefault
public int blockDefault
The @blockDefault value of the current schema.
-
elementFormDefault
public boolean elementFormDefault
The @elementFormDefault value of the current schema. True if local elements are qualified by default.
-
attributeFormDefault
public boolean attributeFormDefault
The @attributeFormDefault value of the current schema. True if local attributes are qualified by default.
-
chameleonMode
public boolean chameleonMode
True if the current schema is in a chameleon mode. This changes the way QNames are interpreted. Life is very miserable with XML Schema, as you see.
-
document
public SchemaDocumentImpl document
Points to theSchemaDocumentImpl
that represents the schema document being parsed.
-
-
Method Detail
-
checkDoubleDefError
public void checkDoubleDefError(XSDeclaration c) throws SAXException
- Throws:
SAXException
-
ignorableDuplicateComponent
public static boolean ignorableDuplicateComponent(XSDeclaration c)
-
addPatcher
public void addPatcher(Patch patcher)
- Specified by:
addPatcher
in interfacePatcherManager
-
addErrorChecker
public void addErrorChecker(Patch patcher)
- Specified by:
addErrorChecker
in interfacePatcherManager
-
reportError
public void reportError(String msg, Locator loc) throws SAXException
Description copied from interface:PatcherManager
Reports an error during the parsing.- Specified by:
reportError
in interfacePatcherManager
loc
- location of the error in the source file, or null if it's unavailable.- Throws:
SAXException
-
reportError
public void reportError(String msg) throws SAXException
- Throws:
SAXException
-
includeSchema
public void includeSchema(String schemaLocation) throws SAXException
Includes the specified schema.- Throws:
SAXException
-
importSchema
public void importSchema(String ns, String schemaLocation) throws SAXException
Imports the specified schema.- Throws:
SAXException
-
hasAlreadyBeenRead
public boolean hasAlreadyBeenRead()
Called when a new document is being parsed and checks if the document has already been parsed before.Used to avoid recursive inclusion. Note that the same document will be parsed multiple times if they are for different target namespaces.
Document Graph Model
The challenge we are facing here is that you have a graph of documents that reference each other. Each document has an unique URI to identify themselves, and references are done by using those. The graph may contain cycles.
Our goal here is to parse all the documents in the graph, without parsing the same document twice. This method implements this check.
One complication is the chameleon schema; a document can be parsed multiple times if they are under different target namespaces.
Also, note that when you resolve relative URIs in the @schemaLocation, their base URI is *NOT* the URI of the document.
- Returns:
- true if the document has already been processed and thus needs to be skipped.
-
parseEntity
public void parseEntity(InputSource source, boolean includeMode, String expectedNamespace, Locator importLocation) throws SAXException
Parses the specified entity.- Parameters:
importLocation
- The source location of the import/include statement. Used for reporting errors.- Throws:
SAXException
-
createAnnotationParser
public AnnotationParser createAnnotationParser()
Creates a new instance of annotation parser.- Returns:
- Annotation parser
-
getAnnotationContextElementName
public String getAnnotationContextElementName()
Gets the element name that contains the annotation element.This method works correctly only when called by the annotation handler.- Returns:
- Element name
-
copyLocator
public Locator copyLocator()
Creates a copy of the current locator object.- Returns:
- Locator copy
-
getErrorHandler
public ErrorHandler getErrorHandler()
-
onEnterElementConsumed
public void onEnterElementConsumed(String uri, String localName, String qname, Attributes atts) throws SAXException
Description copied from class:NGCCRuntime
Called by the generated handler code when an enter element event is consumed.Pushes a new attribute set.
Note that attributes are NOT pushed at the startElement method, because the processing of the enterElement event can trigger other attribute events and etc.
This method will be called from one of handlers when it truely consumes the enterElement event.
- Overrides:
onEnterElementConsumed
in classNGCCRuntime
- Throws:
SAXException
-
onLeaveElementConsumed
public void onLeaveElementConsumed(String uri, String localName, String qname) throws SAXException
- Overrides:
onLeaveElementConsumed
in classNGCCRuntime
- Throws:
SAXException
-
createValidationContext
public ValidationContext createValidationContext()
Returns an immutable snapshot of the current context.- Returns:
- Snapshot of current context
-
startPrefixMapping
public void startPrefixMapping(String prefix, String uri) throws SAXException
- Specified by:
startPrefixMapping
in interfaceContentHandler
- Overrides:
startPrefixMapping
in classNGCCRuntime
- Throws:
SAXException
-
endPrefixMapping
public void endPrefixMapping(String prefix) throws SAXException
- Specified by:
endPrefixMapping
in interfaceContentHandler
- Overrides:
endPrefixMapping
in classNGCCRuntime
- Throws:
SAXException
-
parseUName
public UName parseUName(String qname) throws SAXException
Parses UName under the given context.- Parameters:
qname
- Attribute name.- Returns:
- New
UName
instance based on attribute name. - Throws:
SAXException
-
collapse
public String collapse(String text)
Utility function for collapsing the namespaces inside qname declarations and 'name' attribute values that should contain the qname values- Parameters:
text
- String where whitespaces should be collapsed- Returns:
- String with whitespaces collapsed
-
parseBoolean
public boolean parseBoolean(String v)
-
unexpectedX
protected void unexpectedX(String token) throws SAXException
- Overrides:
unexpectedX
in classNGCCRuntime
- Throws:
SAXException
-
parseForeignAttributes
public ForeignAttributesImpl parseForeignAttributes(ForeignAttributesImpl next)
-
-