com.sun.tools.xjc.reader.internalizer

Class DOMForest

public final class DOMForest extends Object

Builds a DOM forest and maintains association from system IDs to DOM trees.

A forest is a transitive reflexive closure of referenced documents. IOW, if a document is in a forest, all the documents referenced from it is in a forest, too. To support this semantics, DOMForest uses InternalizationLogic to find referenced documents.

Some documents are marked as "root"s, meaning those documents were put into a forest explicitly, not because it is referenced from another document. (However, a root document can be referenced from other documents, too.)

Nested Class Summary
interfaceDOMForest.Handler
Field Summary
LocatorTablelocatorTable
Stores location information for all the trees in this forest.
protected InternalizationLogiclogic
Schema language dependent part of the processing.
Set<Element>outerMostBindings
Stores all the outer-most <jaxb:bindings> customizations.
Constructor Summary
DOMForest(SAXParserFactory parserFactory, DocumentBuilder documentBuilder, InternalizationLogic logic)
DOMForest(InternalizationLogic logic)
Method Summary
booleancheckSchemaCorrectness(ErrorReceiver errorHandler)
Checks the correctness of the XML Schema documents and return true if it's OK.
XMLParsercreateParser()
Creates XMLParser for XSOM which reads documents from this DOMForest rather than doing a fresh parse.
SAXSourcecreateSAXSource(String systemId)
Creates a SAXSource that, when parsed, reads from this DOMForest (instead of parsing the original source identified by the system ID.)
voiddump(OutputStream out)
Dumps the contents of the forest to the specified stream.
Documentget(String systemId)
Gets the DOM tree associated with the specified system ID, or null if none is found.
EntityResolvergetEntityResolver()
ErrorReceivergetErrorHandler()
DocumentgetOneDocument()
Picks one document at random and returns it.
DOMForest.HandlergetParserHandler(String systemId, boolean root)
Returns a ContentHandler to feed SAX events into.
Set<String>getRootDocuments()
Returns a read-only set of root document system IDs.
StringgetSystemId(Document dom)
Gets the system ID from which the given DOM is parsed.
Document[]listDocuments()
Gets all the parsed documents.
String[]listSystemIDs()
Gets all the system IDs of the documents.
Documentparse(InputSource source, boolean root)
Documentparse(String systemId, boolean root)
Parses an XML at the given location ( and XMLs referenced by it) into DOM trees and stores them to this forest.
Documentparse(String systemId, InputSource inputSource, boolean root)
Parses the given document and add it to the DOM forest.
Documentparse(String systemId, XMLStreamReader parser, boolean root)
voidsetEntityResolver(EntityResolver entityResolver)
voidsetErrorHandler(ErrorReceiver errorHandler)
SCDBasedBindingSettransform(boolean enableSCD)
Performs internalization.
voidweakSchemaCorrectnessCheck(SchemaFactory sf)
Performs the schema correctness check by using JAXP 1.3.

Field Detail

locatorTable

public final LocatorTable locatorTable
Stores location information for all the trees in this forest.

logic

protected final InternalizationLogic logic
Schema language dependent part of the processing.

outerMostBindings

public final Set<Element> outerMostBindings
Stores all the outer-most <jaxb:bindings> customizations.

Constructor Detail

DOMForest

public DOMForest(SAXParserFactory parserFactory, DocumentBuilder documentBuilder, InternalizationLogic logic)

DOMForest

public DOMForest(InternalizationLogic logic)

Method Detail

checkSchemaCorrectness

public boolean checkSchemaCorrectness(ErrorReceiver errorHandler)
Checks the correctness of the XML Schema documents and return true if it's OK.

This method performs a weaker version of the tests where error messages are provided without line number information. So whenever possible use SchemaConstraintChecker.

See Also: SchemaConstraintChecker

createParser

public XMLParser createParser()
Creates XMLParser for XSOM which reads documents from this DOMForest rather than doing a fresh parse. The net effect is that XSOM will read transformed XML Schemas instead of the original documents.

createSAXSource

SAXSource createSAXSource(String systemId)
Creates a SAXSource that, when parsed, reads from this DOMForest (instead of parsing the original source identified by the system ID.)

dump

public void dump(OutputStream out)
Dumps the contents of the forest to the specified stream. This is a debug method. As such, error handling is sloppy.

get

public Document get(String systemId)
Gets the DOM tree associated with the specified system ID, or null if none is found.

getEntityResolver

public EntityResolver getEntityResolver()

getErrorHandler

public ErrorReceiver getErrorHandler()

getOneDocument

public Document getOneDocument()
Picks one document at random and returns it.

getParserHandler

public DOMForest.Handler getParserHandler(String systemId, boolean root)
Returns a ContentHandler to feed SAX events into.

The client of this class can feed SAX events into the handler to parse a document into this DOM forest.

getRootDocuments

public Set<String> getRootDocuments()
Returns a read-only set of root document system IDs.

getSystemId

public String getSystemId(Document dom)
Gets the system ID from which the given DOM is parsed.

Poor-man's base URI.

listDocuments

public Document[] listDocuments()
Gets all the parsed documents.

listSystemIDs

public String[] listSystemIDs()
Gets all the system IDs of the documents.

parse

public Document parse(InputSource source, boolean root)

parse

public Document parse(String systemId, boolean root)
Parses an XML at the given location ( and XMLs referenced by it) into DOM trees and stores them to this forest.

Returns: the parsed DOM document object.

parse

public Document parse(String systemId, InputSource inputSource, boolean root)
Parses the given document and add it to the DOM forest.

Returns: null if there was a parse error. otherwise non-null.

parse

public Document parse(String systemId, XMLStreamReader parser, boolean root)

setEntityResolver

public void setEntityResolver(EntityResolver entityResolver)

setErrorHandler

public void setErrorHandler(ErrorReceiver errorHandler)

transform

public SCDBasedBindingSet transform(boolean enableSCD)
Performs internalization. This method should be called only once, only after all the schemas are parsed.

Returns: the returned bindings need to be applied after schema components are built.

weakSchemaCorrectnessCheck

public void weakSchemaCorrectnessCheck(SchemaFactory sf)
Performs the schema correctness check by using JAXP 1.3.

This is "weak", because SchemaFactory#newSchema(Source[]) doesn't handle inclusions very correctly (it ends up parsing it from its original source, not in this tree), and because it doesn't handle two documents for the same namespace very well.

We should eventually fix JAXP (and Xerces), but meanwhile this weaker and potentially wrong correctness check is still better than nothing when used inside JAX-WS (JAXB CLI and Ant does a better job of checking this.)

To receive errors, use SchemaFactory#setErrorHandler(ErrorHandler).