mrglavas 2004/08/13 08:46:37 Modified: java/src/org/apache/xerces/xinclude XIncludeHandler.java Log: Sharing the symbol table with child pipelines. Also, SAX is expecting
internalized strings for all XML names since the string-interning feature is always on. We weren't doing that for attributes added during fixup: xml:base, xml:lang and xmlns:*. This should now be fixed. Revision Changes Path 1.32 +41 -9 xml-xerces/java/src/org/apache/xerces/xinclude/XIncludeHandler.java Index: XIncludeHandler.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/xinclude/XIncludeHandler.java,v retrieving revision 1.31 retrieving revision 1.32 diff -u -r1.31 -r1.32 --- XIncludeHandler.java 13 Aug 2004 02:02:17 -0000 1.31 +++ XIncludeHandler.java 13 Aug 2004 15:46:36 -0000 1.32 @@ -31,6 +31,7 @@ import org.apache.xerces.util.IntStack; import org.apache.xerces.util.ParserConfigurationSettings; import org.apache.xerces.util.SecurityManager; +import org.apache.xerces.util.SymbolTable; import org.apache.xerces.util.URI; import org.apache.xerces.util.XMLAttributesImpl; import org.apache.xerces.util.XMLResourceIdentifierImpl; @@ -135,22 +136,22 @@ public final static String CURRENT_BASE_URI = "currentBaseURI"; // used for adding [base URI] attributes - public final static String XINCLUDE_BASE = "base"; + public final static String XINCLUDE_BASE = "base".intern(); public final static QName XML_BASE_QNAME = new QName( XMLSymbols.PREFIX_XML, XINCLUDE_BASE, - XMLSymbols.PREFIX_XML + ":" + XINCLUDE_BASE, + (XMLSymbols.PREFIX_XML + ":" + XINCLUDE_BASE).intern(), NamespaceContext.XML_URI); // used for adding [language] attributes - public final static String XINCLUDE_LANG = "lang"; + public final static String XINCLUDE_LANG = "lang".intern(); public final static QName XML_LANG_QNAME = new QName( - XMLSymbols.PREFIX_XML, - XINCLUDE_LANG, - XMLSymbols.PREFIX_XML + ":" + XINCLUDE_LANG, - NamespaceContext.XML_URI); + XMLSymbols.PREFIX_XML, + XINCLUDE_LANG, + (XMLSymbols.PREFIX_XML + ":" + XINCLUDE_LANG).intern(), + NamespaceContext.XML_URI); public final static QName NEW_NS_ATTR_QNAME = new QName( @@ -186,6 +187,10 @@ protected static final String ALLOW_UE_AND_NOTATION_EVENTS = Constants.SAX_FEATURE_PREFIX + Constants.ALLOW_DTD_EVENTS_AFTER_ENDDTD_FEATURE; + + /** Property identifier: symbol table. */ + protected static final String SYMBOL_TABLE = + Constants.XERCES_PROPERTY_PREFIX + Constants.SYMBOL_TABLE_PROPERTY; /** Property identifier: error reporter. */ protected static final String ERROR_REPORTER = @@ -244,6 +249,7 @@ protected XMLLocator fDocLocation; protected XIncludeNamespaceSupport fNamespaceContext; + protected SymbolTable fSymbolTable; protected XMLErrorReporter fErrorReporter; protected XMLEntityResolver fEntityResolver; protected SecurityManager fSecurityManager; @@ -368,6 +374,21 @@ } catch (XMLConfigurationException e) { } + + // Get symbol table. + try { + SymbolTable value = + (SymbolTable)componentManager.getProperty(SYMBOL_TABLE); + if (value != null) { + fSymbolTable = value; + if (fChildConfig != null) { + fChildConfig.setProperty(SYMBOL_TABLE, value); + } + } + } + catch (XMLConfigurationException e) { + fSymbolTable = null; + } // Get error reporter. try { @@ -523,6 +544,13 @@ */ public void setProperty(String propertyId, Object value) throws XMLConfigurationException { + if (propertyId.equals(SYMBOL_TABLE)) { + fSymbolTable = (SymbolTable)value; + if (fChildConfig != null) { + fChildConfig.setProperty(propertyId, value); + } + return; + } if (propertyId.equals(ERROR_REPORTER)) { setErrorReporter((XMLErrorReporter)value); if (fChildConfig != null) { @@ -1327,7 +1355,8 @@ ObjectFactory.findClassLoader(), true); - // use the same error reporter, entity resolver, and security manager. + // use the same symbol table, error reporter, entity resolver, and security manager. + if (fSymbolTable != null) fChildConfig.setProperty(SYMBOL_TABLE, fSymbolTable); if (fErrorReporter != null) fChildConfig.setProperty(ERROR_REPORTER, fErrorReporter); if (fEntityResolver != null) fChildConfig.setProperty(ENTITY_RESOLVER, fEntityResolver); if (fSecurityManager != null) fChildConfig.setProperty(SECURITY_MANAGER, fSecurityManager); @@ -1689,6 +1718,9 @@ QName ns = (QName)NEW_NS_ATTR_QNAME.clone(); ns.localpart = prefix; ns.rawname += prefix; + ns.rawname = (fSymbolTable != null) ? + fSymbolTable.addSymbol(ns.rawname) : + ns.rawname.intern(); attributes.addAttribute( ns, XMLSymbols.fCDATASymbol, --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]