Package com.sun.msv.scanner.dtd
Class DTDParser
- java.lang.Object
-
- com.sun.msv.scanner.dtd.DTDParser
-
public class DTDParser extends java.lang.ObjectThis implements parsing of XML 1.0 DTDs. This conforms to the portion of the XML 1.0 specification related to the external DTD subset. For multi-language applications (such as web servers using XML processing to create dynamic content), a method supports choosing a locale for parser diagnostics which is both understood by the message recipient and supported by the parser. This parser produces a stream of parse events. It supports some features (exposing comments, CDATA sections, and entity references) which are not required to be reported by conformant XML processors.- Version:
- $Id: DTDParser.java 1793 2013-02-18 12:52:53Z snajper $
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) static classDTDParser.Catalog(package private) static classDTDParser.NameCache(package private) static classDTDParser.NameCacheEntry
-
Field Summary
Fields Modifier and Type Field Description private char[]charTmpprotected java.util.SetdeclaredElementsprivate booleandoLexicalPEprivate DTDEventListenerdtdHandler(package private) SimpleHashtableentitiesprivate SimpleHashtableidsprivate InputEntityinprivate java.util.Localelocale(package private) static DTDParser.Catalogmessagesprivate DTDParser.NameCachenameCacheprivate char[]nameTmp(package private) java.util.Hashtablenotationsprivate SimpleHashtableparamsprivate org.xml.sax.EntityResolverresolver(package private) static java.lang.StringstrANY(package private) static java.lang.StringstrEMPTYprivate java.lang.StringBufferstrTmpstatic java.lang.StringTYPE_CDATAstatic java.lang.StringTYPE_ENTITIESstatic java.lang.StringTYPE_ENTITYstatic java.lang.StringTYPE_ENUMERATIONstatic java.lang.StringTYPE_IDstatic java.lang.StringTYPE_IDREFstatic java.lang.StringTYPE_IDREFSstatic java.lang.StringTYPE_NMTOKENstatic java.lang.StringTYPE_NMTOKENSstatic java.lang.StringTYPE_NOTATIONprivate static java.lang.StringXmlLang
-
Constructor Summary
Constructors Constructor Description DTDParser()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description (package private) voidafterRoot()private voidbuiltin(java.lang.String entityName, java.lang.String entityValue)java.util.LocalechooseLocale(java.lang.String[] languages)Chooses a client locale to use for diagnostics, using the first language specified in the list that is supported by this parser.(package private) voiderror(java.lang.String messageId, java.lang.Object[] parameters)private voidexpandEntityInLiteral(java.lang.String name, SimpleHashtable table, boolean isEntityValue)private voidexternalParameterEntity(ExternalEntity next)private voidfatal(java.lang.String messageId)private voidfatal(java.lang.String messageId, java.lang.Object[] parameters)private chargetc()intgetColumnNumber()private voidgetcps(java.lang.String elementName, InputEntity start)DTDEventListenergetDtdHandler()Returns the handler used to for DTD parsing events.org.xml.sax.EntityResolvergetEntityResolver()Returns the object used to resolve entitiesprivate shortgetFrequency()intgetLineNumber()java.util.LocalegetLocale()Returns the diagnostic locale.private java.lang.StringgetMarkupDeclname(java.lang.String roleId, boolean qname)private voidgetMixed(java.lang.String elementName, InputEntity start)private shortgetMixedOrChildren(java.lang.String elementName)returns content model type.private java.lang.StringgetNmtoken()java.lang.StringgetPublicId()private java.lang.StringgetQuotedString(java.lang.String type, java.lang.String extra)java.lang.StringgetSystemId()private voidinit()private booleanisXmlLang(java.lang.String value)private booleanmaybeAttlistDecl()private booleanmaybeComment(boolean skipStart)private booleanmaybeConditionalSect()private booleanmaybeElementDecl()To validate, subclassers should at this time make sure that values are of the declared types: ID and IDREF(S) values are Names NMTOKEN(S) are Nmtokens ENUMERATION values match one of the tokens NOTATION values match a notation name ENTITIY(IES) values match an unparsed external entityprivate booleanmaybeEntityDecl()private ExternalEntitymaybeExternalID()private java.lang.StringmaybeGetName()private DTDParser.NameCacheEntrymaybeGetNameCacheEntry()private booleanmaybeMarkupDecl()private booleanmaybeNotationDecl()private booleanmaybePEReference()private booleanmaybePI(boolean skipStart)private java.lang.StringmaybeReadAttribute(java.lang.String name, boolean must)private voidmaybeTextDecl()private booleanmaybeWhitespace()private DTDParser.NameCacheEntrynameCharString(char c)private voidnextChar(char c, java.lang.String location, java.lang.String near)private java.lang.Stringnormalize(boolean invalidIfNeeded)voidparse(java.lang.String uri)Parse a DTD.voidparse(org.xml.sax.InputSource in)Parse a DTD.private intparseCharNumber()private voidparseInternal(org.xml.sax.InputSource input)private voidparseLiteral(boolean isEntityValue)private java.lang.StringparsePublicId()private java.lang.StringparseSystemId()private booleanpeek(java.lang.String s)private InputEntitypeekDeclaration(java.lang.String s)private voidpushReader(char[] buf, java.lang.String name, boolean isGeneral)private booleanpushReader(ExternalEntity next)private voidreadEncoding(boolean must)private voidreadVersion(boolean must, java.lang.String versionNum)private voidreportConnector(char type)voidsetDtdHandler(DTDEventListener handler)Used by applications to set handling of DTD parsing events.voidsetEntityResolver(org.xml.sax.EntityResolver r)Lets applications control entity resolution.voidsetLocale(java.util.Locale l)Used by applications to request locale for diagnostics.private intsurrogatesToCharTmp(int ucs4)private voidungetc()private voidwarning(java.lang.String messageId, java.lang.Object[] parameters)private voidwhitespace(java.lang.String roleId)
-
-
-
Field Detail
-
TYPE_CDATA
public static final java.lang.String TYPE_CDATA
- See Also:
- Constant Field Values
-
TYPE_ID
public static final java.lang.String TYPE_ID
- See Also:
- Constant Field Values
-
TYPE_IDREF
public static final java.lang.String TYPE_IDREF
- See Also:
- Constant Field Values
-
TYPE_IDREFS
public static final java.lang.String TYPE_IDREFS
- See Also:
- Constant Field Values
-
TYPE_ENTITY
public static final java.lang.String TYPE_ENTITY
- See Also:
- Constant Field Values
-
TYPE_ENTITIES
public static final java.lang.String TYPE_ENTITIES
- See Also:
- Constant Field Values
-
TYPE_NMTOKEN
public static final java.lang.String TYPE_NMTOKEN
- See Also:
- Constant Field Values
-
TYPE_NMTOKENS
public static final java.lang.String TYPE_NMTOKENS
- See Also:
- Constant Field Values
-
TYPE_NOTATION
public static final java.lang.String TYPE_NOTATION
- See Also:
- Constant Field Values
-
TYPE_ENUMERATION
public static final java.lang.String TYPE_ENUMERATION
- See Also:
- Constant Field Values
-
in
private InputEntity in
-
strTmp
private java.lang.StringBuffer strTmp
-
nameTmp
private char[] nameTmp
-
nameCache
private DTDParser.NameCache nameCache
-
charTmp
private char[] charTmp
-
doLexicalPE
private boolean doLexicalPE
-
declaredElements
protected final java.util.Set declaredElements
-
params
private SimpleHashtable params
-
notations
java.util.Hashtable notations
-
entities
SimpleHashtable entities
-
ids
private SimpleHashtable ids
-
dtdHandler
private DTDEventListener dtdHandler
-
resolver
private org.xml.sax.EntityResolver resolver
-
locale
private java.util.Locale locale
-
strANY
static final java.lang.String strANY
- See Also:
- Constant Field Values
-
strEMPTY
static final java.lang.String strEMPTY
- See Also:
- Constant Field Values
-
XmlLang
private static final java.lang.String XmlLang
- See Also:
- Constant Field Values
-
messages
static final DTDParser.Catalog messages
-
-
Method Detail
-
setLocale
public void setLocale(java.util.Locale l) throws org.xml.sax.SAXExceptionUsed by applications to request locale for diagnostics.- Parameters:
l- The locale to use, or null to use system defaults (which may include only message IDs).- Throws:
org.xml.sax.SAXException
-
getLocale
public java.util.Locale getLocale()
Returns the diagnostic locale.
-
chooseLocale
public java.util.Locale chooseLocale(java.lang.String[] languages) throws org.xml.sax.SAXExceptionChooses a client locale to use for diagnostics, using the first language specified in the list that is supported by this parser. That locale is then set using setLocale(). Such a list could be provided by a variety of user preference mechanisms, including the HTTP Accept-Language header field.- Parameters:
languages- Array of language specifiers, ordered with the most preferable one at the front. For example, "en-ca" then "fr-ca", followed by "zh_CN". Both RFC 1766 and Java styles are supported.- Returns:
- The chosen locale, or null.
- Throws:
org.xml.sax.SAXException- See Also:
MessageCatalog
-
setEntityResolver
public void setEntityResolver(org.xml.sax.EntityResolver r)
Lets applications control entity resolution.
-
getEntityResolver
public org.xml.sax.EntityResolver getEntityResolver()
Returns the object used to resolve entities
-
setDtdHandler
public void setDtdHandler(DTDEventListener handler)
Used by applications to set handling of DTD parsing events.
-
getDtdHandler
public DTDEventListener getDtdHandler()
Returns the handler used to for DTD parsing events.
-
parse
public void parse(org.xml.sax.InputSource in) throws java.io.IOException, org.xml.sax.SAXExceptionParse a DTD.- Throws:
java.io.IOExceptionorg.xml.sax.SAXException
-
parse
public void parse(java.lang.String uri) throws java.io.IOException, org.xml.sax.SAXExceptionParse a DTD.- Throws:
java.io.IOExceptionorg.xml.sax.SAXException
-
init
private void init()
-
builtin
private void builtin(java.lang.String entityName, java.lang.String entityValue)
-
parseInternal
private void parseInternal(org.xml.sax.InputSource input) throws java.io.IOException, org.xml.sax.SAXException- Throws:
java.io.IOExceptionorg.xml.sax.SAXException
-
afterRoot
void afterRoot() throws org.xml.sax.SAXException- Throws:
org.xml.sax.SAXException
-
whitespace
private void whitespace(java.lang.String roleId) throws java.io.IOException, org.xml.sax.SAXException- Throws:
java.io.IOExceptionorg.xml.sax.SAXException
-
maybeWhitespace
private boolean maybeWhitespace() throws java.io.IOException, org.xml.sax.SAXException- Throws:
java.io.IOExceptionorg.xml.sax.SAXException
-
maybeGetName
private java.lang.String maybeGetName() throws java.io.IOException, org.xml.sax.SAXException- Throws:
java.io.IOExceptionorg.xml.sax.SAXException
-
maybeGetNameCacheEntry
private DTDParser.NameCacheEntry maybeGetNameCacheEntry() throws java.io.IOException, org.xml.sax.SAXException
- Throws:
java.io.IOExceptionorg.xml.sax.SAXException
-
getNmtoken
private java.lang.String getNmtoken() throws java.io.IOException, org.xml.sax.SAXException- Throws:
java.io.IOExceptionorg.xml.sax.SAXException
-
nameCharString
private DTDParser.NameCacheEntry nameCharString(char c) throws java.io.IOException, org.xml.sax.SAXException
- Throws:
java.io.IOExceptionorg.xml.sax.SAXException
-
parseLiteral
private void parseLiteral(boolean isEntityValue) throws java.io.IOException, org.xml.sax.SAXException- Throws:
java.io.IOExceptionorg.xml.sax.SAXException
-
expandEntityInLiteral
private void expandEntityInLiteral(java.lang.String name, SimpleHashtable table, boolean isEntityValue) throws java.io.IOException, org.xml.sax.SAXException- Throws:
java.io.IOExceptionorg.xml.sax.SAXException
-
getQuotedString
private java.lang.String getQuotedString(java.lang.String type, java.lang.String extra) throws java.io.IOException, org.xml.sax.SAXException- Throws:
java.io.IOExceptionorg.xml.sax.SAXException
-
parsePublicId
private java.lang.String parsePublicId() throws java.io.IOException, org.xml.sax.SAXException- Throws:
java.io.IOExceptionorg.xml.sax.SAXException
-
maybeComment
private boolean maybeComment(boolean skipStart) throws java.io.IOException, org.xml.sax.SAXException- Throws:
java.io.IOExceptionorg.xml.sax.SAXException
-
maybePI
private boolean maybePI(boolean skipStart) throws java.io.IOException, org.xml.sax.SAXException- Throws:
java.io.IOExceptionorg.xml.sax.SAXException
-
maybeReadAttribute
private java.lang.String maybeReadAttribute(java.lang.String name, boolean must) throws java.io.IOException, org.xml.sax.SAXException- Throws:
java.io.IOExceptionorg.xml.sax.SAXException
-
readVersion
private void readVersion(boolean must, java.lang.String versionNum) throws java.io.IOException, org.xml.sax.SAXException- Throws:
java.io.IOExceptionorg.xml.sax.SAXException
-
getMarkupDeclname
private java.lang.String getMarkupDeclname(java.lang.String roleId, boolean qname) throws java.io.IOException, org.xml.sax.SAXException- Throws:
java.io.IOExceptionorg.xml.sax.SAXException
-
maybeMarkupDecl
private boolean maybeMarkupDecl() throws java.io.IOException, org.xml.sax.SAXException- Throws:
java.io.IOExceptionorg.xml.sax.SAXException
-
isXmlLang
private boolean isXmlLang(java.lang.String value)
-
maybeElementDecl
private boolean maybeElementDecl() throws java.io.IOException, org.xml.sax.SAXExceptionTo validate, subclassers should at this time make sure that values are of the declared types:- ID and IDREF(S) values are Names
- NMTOKEN(S) are Nmtokens
- ENUMERATION values match one of the tokens
- NOTATION values match a notation name
- ENTITIY(IES) values match an unparsed external entity
Separately, make sure IDREF values match some ID provided in the document (in the afterRoot method).
- Throws:
java.io.IOExceptionorg.xml.sax.SAXException
-
getMixedOrChildren
private short getMixedOrChildren(java.lang.String elementName) throws java.io.IOException, org.xml.sax.SAXExceptionreturns content model type.- Throws:
java.io.IOExceptionorg.xml.sax.SAXException
-
getcps
private void getcps(java.lang.String elementName, InputEntity start) throws java.io.IOException, org.xml.sax.SAXException- Throws:
java.io.IOExceptionorg.xml.sax.SAXException
-
reportConnector
private void reportConnector(char type) throws org.xml.sax.SAXException- Throws:
org.xml.sax.SAXException
-
getFrequency
private short getFrequency() throws java.io.IOException, org.xml.sax.SAXException- Throws:
java.io.IOExceptionorg.xml.sax.SAXException
-
getMixed
private void getMixed(java.lang.String elementName, InputEntity start) throws java.io.IOException, org.xml.sax.SAXException- Throws:
java.io.IOExceptionorg.xml.sax.SAXException
-
maybeAttlistDecl
private boolean maybeAttlistDecl() throws java.io.IOException, org.xml.sax.SAXException- Throws:
java.io.IOExceptionorg.xml.sax.SAXException
-
normalize
private java.lang.String normalize(boolean invalidIfNeeded)
-
maybeConditionalSect
private boolean maybeConditionalSect() throws java.io.IOException, org.xml.sax.SAXException- Throws:
java.io.IOExceptionorg.xml.sax.SAXException
-
parseCharNumber
private int parseCharNumber() throws java.io.IOException, org.xml.sax.SAXException- Throws:
java.io.IOExceptionorg.xml.sax.SAXException
-
surrogatesToCharTmp
private int surrogatesToCharTmp(int ucs4) throws org.xml.sax.SAXException- Throws:
org.xml.sax.SAXException
-
maybePEReference
private boolean maybePEReference() throws java.io.IOException, org.xml.sax.SAXException- Throws:
java.io.IOExceptionorg.xml.sax.SAXException
-
maybeEntityDecl
private boolean maybeEntityDecl() throws java.io.IOException, org.xml.sax.SAXException- Throws:
java.io.IOExceptionorg.xml.sax.SAXException
-
maybeExternalID
private ExternalEntity maybeExternalID() throws java.io.IOException, org.xml.sax.SAXException
- Throws:
java.io.IOExceptionorg.xml.sax.SAXException
-
parseSystemId
private java.lang.String parseSystemId() throws java.io.IOException, org.xml.sax.SAXException- Throws:
java.io.IOExceptionorg.xml.sax.SAXException
-
maybeTextDecl
private void maybeTextDecl() throws java.io.IOException, org.xml.sax.SAXException- Throws:
java.io.IOExceptionorg.xml.sax.SAXException
-
externalParameterEntity
private void externalParameterEntity(ExternalEntity next) throws java.io.IOException, org.xml.sax.SAXException
- Throws:
java.io.IOExceptionorg.xml.sax.SAXException
-
readEncoding
private void readEncoding(boolean must) throws java.io.IOException, org.xml.sax.SAXException- Throws:
java.io.IOExceptionorg.xml.sax.SAXException
-
maybeNotationDecl
private boolean maybeNotationDecl() throws java.io.IOException, org.xml.sax.SAXException- Throws:
java.io.IOExceptionorg.xml.sax.SAXException
-
getc
private char getc() throws java.io.IOException, org.xml.sax.SAXException- Throws:
java.io.IOExceptionorg.xml.sax.SAXException
-
ungetc
private void ungetc()
-
peek
private boolean peek(java.lang.String s) throws java.io.IOException, org.xml.sax.SAXException- Throws:
java.io.IOExceptionorg.xml.sax.SAXException
-
peekDeclaration
private InputEntity peekDeclaration(java.lang.String s) throws java.io.IOException, org.xml.sax.SAXException
- Throws:
java.io.IOExceptionorg.xml.sax.SAXException
-
nextChar
private void nextChar(char c, java.lang.String location, java.lang.String near) throws java.io.IOException, org.xml.sax.SAXException- Throws:
java.io.IOExceptionorg.xml.sax.SAXException
-
pushReader
private void pushReader(char[] buf, java.lang.String name, boolean isGeneral) throws org.xml.sax.SAXException- Throws:
org.xml.sax.SAXException
-
pushReader
private boolean pushReader(ExternalEntity next) throws java.io.IOException, org.xml.sax.SAXException
- Throws:
java.io.IOExceptionorg.xml.sax.SAXException
-
getPublicId
public java.lang.String getPublicId()
-
getSystemId
public java.lang.String getSystemId()
-
getLineNumber
public int getLineNumber()
-
getColumnNumber
public int getColumnNumber()
-
warning
private void warning(java.lang.String messageId, java.lang.Object[] parameters) throws org.xml.sax.SAXException- Throws:
org.xml.sax.SAXException
-
error
void error(java.lang.String messageId, java.lang.Object[] parameters) throws org.xml.sax.SAXException- Throws:
org.xml.sax.SAXException
-
fatal
private void fatal(java.lang.String messageId) throws org.xml.sax.SAXException- Throws:
org.xml.sax.SAXException
-
fatal
private void fatal(java.lang.String messageId, java.lang.Object[] parameters) throws org.xml.sax.SAXException- Throws:
org.xml.sax.SAXException
-
-