zongaro 2002/09/27 09:47:10 Modified: java/src/org/apache/xalan/xsltc/dom Tag: XSLTC_DTM DOMImpl.java SAXImpl.java DocumentCache.java java/src/org/apache/xalan/xsltc/trax Tag: XSLTC_DTM TransformerImpl.java Log: XSLTCDTMManager checks whether any XMLReader associated with a SAXSource object has a DTDHandler or ErrorHandler before substituting a DTM implementation to listen for those events. That avoids disrupting any user-supplied handlers. However, the XSLTC TransformerFactoryImpl now re-uses instances of SAXParser. This means that when the XSLTCDTMManager checks whether the XMLReader has an associated DTDHandler or ErrorHandler, it might find the DTM from a previous transformation, and functionality might be limited. To distinguish the cases, I've added a boolean flag to the XSLTCDTMManager.getDTM methods that indicates whether any XMLReader was supplied by the user. If it's false, the XSLTCDTMManager ignores any previously set DTDHandler or ErrorHandler. Revision Changes Path No revision No revision 1.68.2.11 +3 -2 xml-xalan/java/src/org/apache/xalan/xsltc/dom/DOMImpl.java Index: DOMImpl.java =================================================================== RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/DOMImpl.java,v retrieving revision 1.68.2.10 retrieving revision 1.68.2.11 diff -u -r1.68.2.10 -r1.68.2.11 --- DOMImpl.java 23 Sep 2002 17:24:07 -0000 1.68.2.10 +++ DOMImpl.java 27 Sep 2002 16:47:09 -0000 1.68.2.11 @@ -2014,7 +2014,8 @@ public DOM getResultTreeFrag(int initSize) { return (SAXImpl) ((XSLTCDTMManager)m_mgr).getDTM(null, true, m_wsfilter, - false, false, initSize); + false, false, false, + initSize); } /** 1.1.2.12 +3 -2 xml-xalan/java/src/org/apache/xalan/xsltc/dom/Attic/SAXImpl.java Index: SAXImpl.java =================================================================== RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/Attic/SAXImpl.java,v retrieving revision 1.1.2.11 retrieving revision 1.1.2.12 diff -u -r1.1.2.11 -r1.1.2.12 --- SAXImpl.java 23 Sep 2002 17:24:07 -0000 1.1.2.11 +++ SAXImpl.java 27 Sep 2002 16:47:09 -0000 1.1.2.12 @@ -1885,7 +1885,8 @@ public DOM getResultTreeFrag(int initSize) { return (SAXImpl) ((XSLTCDTMManager)m_mgr).getDTM(null, true, m_wsfilter, - false, false, initSize); + false, false, false, + initSize); } /** 1.6.10.3 +6 -4 xml-xalan/java/src/org/apache/xalan/xsltc/dom/DocumentCache.java Index: DocumentCache.java =================================================================== RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/DocumentCache.java,v retrieving revision 1.6.10.2 retrieving revision 1.6.10.3 diff -u -r1.6.10.2 -r1.6.10.3 --- DocumentCache.java 24 Aug 2002 11:33:16 -0000 1.6.10.2 +++ DocumentCache.java 27 Sep 2002 16:47:09 -0000 1.6.10.3 @@ -138,13 +138,15 @@ */ public void loadDocument(String uri) { - DTMManager dtmManager = XSLTCDTMManager.newInstance( - org.apache.xpath.objects.XMLStringFactoryImpl.getFactory()); + XSLTCDTMManager dtmManager = + (XSLTCDTMManager)XSLTCDTMManager.newInstance( + org.apache.xpath.objects.XMLStringFactoryImpl + .getFactory()); try { final long stamp = System.currentTimeMillis(); _dom = (SAXImpl)dtmManager.getDTM( new SAXSource(_reader, new InputSource(uri)), - false, null, true, true); + false, null, true, true, false); _dom.setDocumentURI(uri); // The build time can be used for statistics for a better No revision No revision 1.37.2.7 +19 -10 xml-xalan/java/src/org/apache/xalan/xsltc/trax/TransformerImpl.java Index: TransformerImpl.java =================================================================== RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/trax/TransformerImpl.java,v retrieving revision 1.37.2.6 retrieving revision 1.37.2.7 diff -u -r1.37.2.6 -r1.37.2.7 --- TransformerImpl.java 18 Sep 2002 16:04:29 -0000 1.37.2.6 +++ TransformerImpl.java 27 Sep 2002 16:47:09 -0000 1.37.2.7 @@ -397,6 +397,7 @@ final SAXSource sax = (SAXSource)source; XMLReader reader = sax.getXMLReader(); final InputSource input = sax.getInputSource(); + final boolean hasUserReader = reader != null; // Create a reader if not set by user if (reader == null) { @@ -405,10 +406,13 @@ // Create a new internal DOM and set up its builder to trap // all content/lexical events - DTMManager dtmManager = XSLTCDTMManager.newInstance( - org.apache.xpath.objects.XMLStringFactoryImpl.getFactory()); + XSLTCDTMManager dtmManager = + (XSLTCDTMManager) XSLTCDTMManager.newInstance( + org.apache.xpath.objects.XMLStringFactoryImpl + .getFactory()); - dom = (SAXImpl)dtmManager.getDTM(sax, false, null, true, true); + dom = (SAXImpl)dtmManager.getDTM(sax, false, null, true, true, + hasUserReader); final DOMBuilder builder = ((SAXImpl)dom).getBuilder(); try { reader.setProperty(LEXICAL_HANDLER_PROPERTY, builder); @@ -424,11 +428,13 @@ final DOMSource domsrc = (DOMSource) source; // Create a new internal DTM and build it directly from DOM - DTMManager dtmManager = XSLTCDTMManager.newInstance( - org.apache.xpath.objects.XMLStringFactoryImpl.getFactory()); + XSLTCDTMManager dtmManager = + (XSLTCDTMManager)XSLTCDTMManager.newInstance( + org.apache.xpath.objects.XMLStringFactoryImpl + .getFactory()); dom = (DOMImpl)dtmManager.getDTM(domsrc, false, null, true, - true); + true, false); ((DOMImpl)dom).setDocumentURI(_sourceSystemId); } // Handle StreamSource input @@ -441,8 +447,10 @@ // Create a new internal DOM and set up its builder to trap // all content/lexical events - DTMManager dtmManager = XSLTCDTMManager.newInstance( - org.apache.xpath.objects.XMLStringFactoryImpl.getFactory()); + XSLTCDTMManager dtmManager = + (XSLTCDTMManager) XSLTCDTMManager.newInstance( + org.apache.xpath.objects.XMLStringFactoryImpl + .getFactory()); InputSource input; if (streamInput != null) { @@ -460,7 +468,8 @@ throw new TransformerException(err.toString()); } dom = (SAXImpl)dtmManager.getDTM(new SAXSource(reader, input), - false, null, true, true); + false, null, true, true, + false); ((SAXImpl)dom).setDocumentURI(_sourceSystemId); } else if (source instanceof XSLTCSource) {
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]