
org.enhydra.xml.xmlc.parsers.xerces.XercesTracer Maven / Gradle / Ivy
The newest version!
/*
* Enhydra Java Application Server Project
*
* The contents of this file are subject to the Enhydra Public License
* Version 1.1 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License on
* the Enhydra web site ( http://www.enhydra.org/ ).
*
* Software distributed under the License is distributed on an "AS IS"
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
* the License for the specific terms governing rights and limitations
* under the License.
*
* The Initial Developer of the Enhydra Application Server is Lutris
* Technologies, Inc. The Enhydra Application Server and portions created
* by Lutris Technologies, Inc. are Copyright Lutris Technologies, Inc.
* All Rights Reserved.
*
* Contributor(s):
*
* $Id: XercesTracer.java,v 1.3 2005/01/26 08:29:24 jkjome Exp $
*/
package org.enhydra.xml.xmlc.parsers.xerces;
import org.enhydra.apache.xerces.framework.XMLAttrList;
import org.enhydra.apache.xerces.framework.XMLContentSpec;
import org.enhydra.apache.xerces.readers.XMLEntityHandler;
import org.enhydra.apache.xerces.utils.QName;
import org.enhydra.apache.xerces.utils.StringPool;
import org.enhydra.apache.xerces.validators.common.XMLAttributeDecl;
import org.enhydra.xml.io.InputSourceOps;
import org.enhydra.xml.xmlc.XMLCError;
import org.enhydra.xml.xmlc.parsers.ParseTracer;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
/**
* Tracing for parser callbacks. Isolated in a class because it
* was getting to complex and crowding the actuall handlers.
*/
class XercesTracer {
/**
* Verbose tracing.
*/
private ParseTracer fTracer;
/**
* String pool used to lookup strings by index.
*/
private StringPool fStringPool;
/**
* Is the tracer enabled?
*/
private boolean fIsEnabled;
/**
* Constructor.
*/
protected XercesTracer(StringPool stringPool,
ParseTracer tracer) {
fStringPool = stringPool;
fTracer = tracer;
fIsEnabled = (fTracer != null) && fTracer.enabled();
}
/*
* Determine if tracing is enabled.
*/
public boolean enabled() {
return fIsEnabled;
}
/**
* Convert XMLEntityHandler.ENTITYTYPE_* to a string
*/
private String getEntityTypeString(int entityType) {
switch (entityType) {
case XMLEntityHandler.ENTITYTYPE_INTERNAL_PE:
return "INTERNAL_PE";
case XMLEntityHandler.ENTITYTYPE_EXTERNAL_PE:
return "EXTERNAL_PE";
case XMLEntityHandler.ENTITYTYPE_INTERNAL:
return "INTERNAL";
case XMLEntityHandler.ENTITYTYPE_EXTERNAL:
return "EXTERNAL";
case XMLEntityHandler.ENTITYTYPE_UNPARSED:
return "UNPARSED";
case XMLEntityHandler.ENTITYTYPE_DOCUMENT:
return "DOCUMENT";
case XMLEntityHandler.ENTITYTYPE_EXTERNAL_SUBSET:
return "EXTERNAL_SUBSET";
default:
throw new XMLCError("Xerces parser bug: request for entity type");
}
}
/**
* Convert XMLEntityHandler.CONTEXT_* to a string
*/
private String getEntityContextString(int entityContent) {
switch (entityContent) {
case XMLEntityHandler.ENTITYREF_IN_ATTVALUE:
return "IN_ATTVALUE";
case XMLEntityHandler.ENTITYREF_IN_DEFAULTATTVALUE:
return "IN_DEFAULTATTVALUE";
case XMLEntityHandler.ENTITYREF_IN_CONTENT:
return "IN_CONTENT";
case XMLEntityHandler.ENTITYREF_IN_DTD_AS_MARKUP:
return "IN_DTD_AS_MARKUP";
case XMLEntityHandler.ENTITYREF_IN_ENTITYVALUE:
return "IN_ENTITYVALUE";
case XMLEntityHandler.ENTITYREF_IN_DTD_WITHIN_MARKUP:
return "IN_DTD_WITHIN_MARKUP";
case XMLEntityHandler.ENTITYREF_DOCUMENT:
return "DOCUMENT";
case XMLEntityHandler.ENTITYREF_EXTERNAL_SUBSET:
return "EXTERNAL_SUBSET";
default:
throw new XMLCError("Xerces parser bug: request for unknown entity context");
}
}
/**
* Convert XMLContentSpec.CONTEXTSPECNODE_* to a string
*/
private String getContentSpecTypeString(int contentSpecType) {
switch (contentSpecType) {
case XMLContentSpec.CONTENTSPECNODE_LEAF:
return "LEAF";
case XMLContentSpec.CONTENTSPECNODE_ZERO_OR_ONE:
return "ZERO_OR_ONE";
case XMLContentSpec.CONTENTSPECNODE_ZERO_OR_MORE:
return "ZERO_OR_MORE";
case XMLContentSpec.CONTENTSPECNODE_ONE_OR_MORE:
return "ONE_OR_MORE";
case XMLContentSpec.CONTENTSPECNODE_CHOICE:
return "CHOICE";
case XMLContentSpec.CONTENTSPECNODE_SEQ:
return "SEQ";
case XMLContentSpec.CONTENTSPECNODE_ANY:
return "ANY";
case XMLContentSpec.CONTENTSPECNODE_ANY_OTHER:
return "ANY_OTHER";
case XMLContentSpec.CONTENTSPECNODE_ANY_NS:
return "ANY_NS";
case XMLContentSpec.CONTENTSPECNODE_ANY_LAX:
return "ANY_LAX";
case XMLContentSpec.CONTENTSPECNODE_ANY_OTHER_LAX:
return "ANY_OTHER_LAX";
case XMLContentSpec.CONTENTSPECNODE_ANY_NS_LAX:
return "ANY_NS_LAX";
case XMLContentSpec.CONTENTSPECNODE_ANY_SKIP:
return "ANY_SKIP";
case XMLContentSpec.CONTENTSPECNODE_ANY_OTHER_SKIP:
return "ANY_OTHER_SKIP";
case XMLContentSpec.CONTENTSPECNODE_ANY_NS_SKIP:
return "ANY_NS_SKIP";
default:
throw new XMLCError("Xerces parser bug: request for unknown contentspec type");
}
}
/**
* Get a string from the string pool.
*/
private String getString(int index) {
return fStringPool.toString(index);
}
/**
* Get a formatted QName.
*/
private String formatQName(QName qname) {
return getString(qname.rawname);
}
/**
* @see EntityResolver#resolveEntity
*/
public void resolveEntity(String publicId,
String systemId,
InputSource source) {
if (fIsEnabled) {
fTracer.trace("resolveEntity: \""
+ publicId + "\" \""
+ systemId + "\" => "
+ InputSourceOps.getName(source));
}
}
/**
* @see org.enhydra.apache.xerces.framework.XMLDocumentHandler#startDocument
*/
public void startDocument() {
if (fIsEnabled) {
fTracer.trace("startDocument");
}
}
/**
* Handle end document.
* @see org.enhydra.apache.xerces.framework.XMLDocumentHandler#endDocument
*/
public void endDocument() {
if (fIsEnabled) {
fTracer.trace("endDocument");
}
}
/**
* @see org.enhydra.apache.xerces.framework.XMLDocumentHandler#xmlDecl
*/
public void xmlDecl(int version, int encoding, int standalone) throws Exception {
if (fIsEnabled) {
fTracer.trace("xmlDecl: " + getString(version)
+ " " + getString(encoding)
+ " " + getString(standalone));
}
}
/**
* @see org.enhydra.apache.xerces.framework.XMLDocumentHandler#textDecl
*/
public void textDecl(int version, int encoding) throws Exception {
if (fIsEnabled) {
fTracer.trace("textDecl: " + getString(version)
+ " " + getString(encoding));
}
}
/**
* Handle start of element.
* @see org.enhydra.apache.xerces.framework.XMLDocumentHandler#startElement
*/
public void startElement(QName element,
XMLAttrList attrList,
int attrListHandle) {
if (fIsEnabled) {
StringBuffer buf = new StringBuffer("startElement: " +
formatQName(element));
int attrIndex = attrListHandle;
while (attrIndex >= 0) {
if (attrList.isSpecified(attrIndex)) {
String uri = getString(attrList.getAttrURI(attrIndex));
buf.append(" ");
if (uri != null) {
buf.append("<");
buf.append(uri);
buf.append(">");
}
buf.append(getString(attrList.getAttrName(attrIndex)));
buf.append("=\"");
buf.append(getString(attrList.getAttValue(attrIndex)));
buf.append("\"");
}
attrIndex = attrList.getNextAttr(attrIndex);
}
fTracer.trace(buf.toString());
fTracer.enter();
}
}
/**
* Handle end element.
* @see org.enhydra.apache.xerces.framework.XMLDocumentHandler#endElement
*/
public void endElement(QName element) {
if (fIsEnabled) {
fTracer.leave();
fTracer.trace("endElement: " + formatQName(element));
}
}
/**
* Handle start of a namespace declaration scope.
*
* @see org.enhydra.apache.xerces.framework.XMLDocumentHandler#startNamespaceDeclScope
*/
public void startNamespaceDeclScope(int prefix, int uri) {
if (fIsEnabled) {
fTracer.trace("startNamespaceDeclScope: " + getString(prefix)
+ " " + getString(uri));
fTracer.enter();
}
}
/**
* Handle end of a namespace declaration scope.
*
* @see org.enhydra.apache.xerces.framework.XMLDocumentHandler#startNamespaceDeclScope
*/
public void endNamespaceDeclScope(int prefix) {
if (fIsEnabled) {
fTracer.leave();
fTracer.trace("endNamespaceDeclScope: " + getString(prefix));
}
}
/**
* Handle the start of an entity reference.
* @see org.enhydra.apache.xerces.framework.XMLDocumentHandler#startEntityReference
*/
public void startEntityReference(int entityName,
int entityType,
int entityContext,
boolean processed) {
if (fIsEnabled) {
fTracer.trace("startEntityReference: "
+ getString(entityName)
+ " " + getEntityTypeString(entityType)
+ " " + getEntityContextString(entityContext)
+ ((processed) ? "" : " (ignored)"));
fTracer.enter();
}
}
/**
* Handle the end of an entity reference.
* @see org.enhydra.apache.xerces.framework.XMLDocumentHandler#endEntityReference
*/
public void endEntityReference(int entityName,
int entityType,
int entityContext,
boolean processed) {
if (fIsEnabled) {
fTracer.leave();
fTracer.trace("endEntityReference: " + getString(entityName)
+ ((processed) ? "" : " (ignored)"));
}
}
/**
* Handle start of CDATA section.
* @see org.enhydra.apache.xerces.framework.XMLDocumentHandler#startCDATA
*/
public void startCDATA() {
if (fIsEnabled) {
fTracer.trace("startCDATA");
fTracer.enter();
}
}
/**
* Handle for end of CDATA section.
* @see org.enhydra.apache.xerces.framework.XMLDocumentHandler#endCDATA
*/
public void endCDATA() {
if (fIsEnabled) {
fTracer.leave();
fTracer.trace("endCDATA");
}
}
/**
* Handle processing instruction.
* @see org.enhydra.apache.xerces.framework.XMLDocumentHandler#processingInstruction
*/
public void processingInstruction(int target,
int data) {
if (fIsEnabled) {
fTracer.trace("processingInstruction: " + getString(target));
}
}
/**
* Handle a comment.
* @see org.enhydra.apache.xerces.framework.XMLDocumentHandler#comment
*/
public void comment(int comment) {
if (fIsEnabled) {
fTracer.trace("comment: " + getString(comment));
}
}
/**
* Handle characters.
* @see org.enhydra.apache.xerces.framework.XMLDocumentHandler#characters
*/
public void characters(char ch[],
int start,
int length) {
if (fIsEnabled) {
fTracer.trace("characters: \"" + new String(ch, start, length) + "\"");
}
}
/**
* Handle ignorable whitespace.
* @see org.enhydra.apache.xerces.framework.XMLDocumentHandler#ignorableWhitespace
*/
public void ignorableWhitespace(char ch[],
int start,
int length) {
if (fIsEnabled) {
fTracer.trace("ignorableWhitespace: " + length);
}
}
/**
* @see org.enhydra.apache.xerces.framework.XMLDocumentHandler.DTDHandler#startDTD
*/
public void startDTD(QName rootElement,
int publicId,
int systemId) {
if (fIsEnabled) {
fTracer.trace("startDTD: " + formatQName(rootElement)
+ " " + getString(publicId)
+ " " + getString(systemId));
fTracer.enter();
}
}
/**
* @see org.enhydra.apache.xerces.framework.XMLDocumentHandler.DTDHandler#internalSubset
*/
public void internalSubset(int internalSubset) {
if (fIsEnabled) {
fTracer.trace("internalSubset: " + getString(internalSubset));
}
}
/**
* @see org.enhydra.apache.xerces.framework.XMLDocumentHandler.DTDHandler#endDTD
*/
public void endDTD() {
if (fIsEnabled) {
fTracer.leave();
}
}
/**
*
*
* @see org.enhydra.apache.xerces.framework.XMLDocumentHandler.DTDHandler#elementDecl
*/
public void elementDecl(QName elementDecl,
int contentSpecType,
int contentSpecIndex,
XMLContentSpec.Provider contentSpecProvider) {
if (fIsEnabled) {
fTracer.trace("elementDecl: " + formatQName(elementDecl)
+ " " + getContentSpecTypeString(contentSpecType)
+ " " + XMLContentSpec.toString(contentSpecProvider,
fStringPool,
contentSpecIndex));
}
}
/**
* Get the attribute type as a string.
*/
private String getAttrTypeString(int attType,
boolean attList) {
switch (attType) {
case XMLAttributeDecl.TYPE_ENTITY:
return (attList ? "ENTITIES" : "ENTITY");
case XMLAttributeDecl.TYPE_ID:
return "ID";
case XMLAttributeDecl.TYPE_IDREF:
return (attList ? "IDREFS" : "IDREF");
case XMLAttributeDecl.TYPE_NMTOKEN:
return (attList ? "NMTOKENS" : "NMTOKEN");
case XMLAttributeDecl.TYPE_NOTATION:
return "NOTATION";
case XMLAttributeDecl.TYPE_CDATA:
return "string";
default:
return "invalid-attType";
}
}
/**
*
*
* @see org.enhydra.apache.xerces.framework.XMLDocumentHandler.DTDHandler#attlistDecl
*/
public void attlistDecl(QName elementDecl,
QName attributeDecl,
int attType,
boolean attList,
String enumString,
int attDefaultType,
int attDefaultValue) {
//FIXME: boolean attList not handled
if (fIsEnabled) {
fTracer.trace("attlistDecl: " + formatQName(elementDecl)
+ " " + formatQName(attributeDecl)
+ " " + getAttrTypeString(attType, attList)
+ " " + enumString
+ " " + getString(attDefaultType)
+ " " + getString(attDefaultValue));
}
}
/**
*
*
* @see org.enhydra.apache.xerces.framework.XMLDocumentHandler.DTDHandler#internalPEDecl
*/
public void internalPEDecl(int entityName,
int entityValue) {
if (fIsEnabled) {
fTracer.trace("internalPEDecl: " + getString(entityName)
+ " \"" + getString(entityValue) + "\"");
}
}
/**
*
*
* @see org.enhydra.apache.xerces.framework.XMLDocumentHandler.DTDHandler#externalPEDecl
*/
public void externalPEDecl(int entityName,
int publicId,
int systemId) {
if (fIsEnabled) {
fTracer.trace("externalPEDecl: " + getString(entityName)
+ " " + getString(publicId)
+ " " + getString(systemId));
}
}
/**
*
*
* @see org.enhydra.apache.xerces.framework.XMLDocumentHandler.DTDHandler#internalEntityDecl
*/
public void internalEntityDecl(int entityName,
int entityValue) {
if (fIsEnabled) {
fTracer.trace("internalEntityDecl: " + getString(entityName)
+ " \"" + getString(entityValue) + "\"");
}
}
/**
*
*
* @see org.enhydra.apache.xerces.framework.XMLDocumentHandler.DTDHandler#externalEntityDecl
*/
public void externalEntityDecl(int entityName,
int publicId,
int systemId) {
if (fIsEnabled) {
fTracer.trace("externalEntityDecl: " + getString(entityName)
+ " " + getString(publicId)
+ " " + getString(systemId));
}
}
/**
*
*
* @see org.enhydra.apache.xerces.framework.XMLDocumentHandler.DTDHandler#unparsedEntityDecl
*/
public void unparsedEntityDecl(int entityName,
int publicId,
int systemId,
int notationName) {
if (fIsEnabled) {
fTracer.trace("unparsedEntityDecl: " + getString(entityName)
+ " " + getString(publicId)
+ " " + getString(systemId)
+ " " + getString(notationName));
}
}
/**
*
*
* @see org.enhydra.apache.xerces.framework.XMLDocumentHandler.DTDHandler#notationDecl
*/
public void notationDecl(int notationName,
int publicId,
int systemId) {
if (fIsEnabled) {
fTracer.trace("notationDecl: " + getString(notationName)
+ " " + getString(publicId)
+ " " + getString(systemId));
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy