You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by jk...@apache.org on 2001/10/18 14:57:51 UTC
cvs commit: xml-xalan/java/src/org/apache/xml/dtm/ref DTMManagerDefault.java IncrementalSAXSource_Xerces.java CoroutineSAXParser.java CoroutineSAXParser_Xerces.java
jkesselm 01/10/18 05:57:51
Modified: java/src/org/apache/xml/dtm/ref DTMManagerDefault.java
IncrementalSAXSource_Xerces.java
Removed: java/src/org/apache/xml/dtm/ref CoroutineSAXParser.java
CoroutineSAXParser_Xerces.java
Log:
CoroutineParser API was replaced by IncrementalSAXSource; dropping obsolete code.
Revision Changes Path
1.26 +13 -3 xml-xalan/java/src/org/apache/xml/dtm/ref/DTMManagerDefault.java
Index: DTMManagerDefault.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xml/dtm/ref/DTMManagerDefault.java,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -r1.25 -r1.26
--- DTMManagerDefault.java 2001/10/10 18:42:07 1.25
+++ DTMManagerDefault.java 2001/10/18 12:57:51 1.26
@@ -258,6 +258,14 @@
if (haveXercesParser)
incremental = true; // No matter what. %REVIEW%
+ //*********** JJK DEBUGGING KLUGE -- GONK GONK GONK
+ //*********** JJK DEBUGGING KLUGE -- GONK GONK GONK
+ //*********** JJK DEBUGGING KLUGE -- GONK GONK GONK
+ m_incremental=true;
+ //*********** JJK DEBUGGING KLUGE -- GONK GONK GONK
+ //*********** JJK DEBUGGING KLUGE -- GONK GONK GONK
+ //*********** JJK DEBUGGING KLUGE -- GONK GONK GONK
+
// If the reader is null, but they still requested an incremental build,
// then we still want to set up the IncrementalSAXSource stuff.
if (this.m_incremental && incremental /* || ((null == reader) && incremental) */)
@@ -269,9 +277,11 @@
// IncrementalSAXSource_Xerces to avoid threading.
// System.out.println("Using IncrementalSAXSource_Xerces to avoid threading");
try {
- // should be ok, it's in the same package - no need for thread class loader
- Class c=Class.forName( "org.apache.xml.dtm.ref.IncrementalSAXSource_Xerces" );
- coParser=(IncrementalSAXSource)c.newInstance();
+ // should be ok, it's in the same package - no need for thread class loader,
+ // AND theoretically no need for reflection...
+ // Class c=Class.forName( "org.apache.xml.dtm.ref.IncrementalSAXSource_Xerces" );
+ // coParser=(IncrementalSAXSource)c.newInstance();
+ coParser=org.apache.xml.dtm.ref.IncrementalSAXSource_Xerces.createIncrementalSAXSource();
} catch( Exception ex ) {
ex.printStackTrace();
coParser=null;
1.4 +68 -14 xml-xalan/java/src/org/apache/xml/dtm/ref/IncrementalSAXSource_Xerces.java
Index: IncrementalSAXSource_Xerces.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xml/dtm/ref/IncrementalSAXSource_Xerces.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- IncrementalSAXSource_Xerces.java 2001/07/28 00:25:59 1.3
+++ IncrementalSAXSource_Xerces.java 2001/10/18 12:57:51 1.4
@@ -67,7 +67,7 @@
import org.apache.xalan.res.XSLMessages;
-/** <p>IncrementalSAXSource_Xerces takes advantage of the fact that Xerces
+/** <p>IncrementalSAXSource_Xerces takes advantage of the fact that Xerces1
* incremental mode is already a coroutine of sorts, and just wraps our
* IncrementalSAXSource API around it.</p>
*
@@ -78,12 +78,19 @@
public class IncrementalSAXSource_Xerces
implements IncrementalSAXSource
{
- SAXParser fIncrementalParser;
+ //
+ // Reflection. To allow this to compile with Xerces2, which doesn't support
+ // the old parseSome() incremental API, we need to avoid static references
+ // to those. Until Xerces2 is pervasive and we're willing to make it a
+ // prerequisite, we will support it only via the filtering solution.
+ //
+ java.lang.reflect.Method fParseSomeSetup=null;
+ java.lang.reflect.Method fParseSome=null;
//
// Data
//
-
+ SAXParser fIncrementalParser;
private boolean fParseInProgress=false;
//
@@ -93,26 +100,54 @@
/** Create a IncrementalSAXSource_Xerces, and create a SAXParsre
* to go with it
* */
- public IncrementalSAXSource_Xerces() {
- fIncrementalParser=new SAXParser();
+ public IncrementalSAXSource_Xerces()
+ throws NoSuchMethodException
+ {
+ this(new SAXParser());
}
/** Create a IncrementalSAXSource_Xerces wrapped around
- * an existing SAXParser
+ * an existing SAXParser. Currently this works only for recent
+ * releases of Xerces-1. At some point we expect to cut over
+ * and make it work only for Xerces-2, but that involves some
+ * compile-time inheritance dependencies which we aren't yet
+ * ready to buy into.
+ *
+ * @exception if the SAXParser class doesn't support the Xerces
+ * incremental parse operations. In that case, caller should
+ * fall back upon the IncrementalSAXSource_Filter approach.
* */
- public IncrementalSAXSource_Xerces(SAXParser parser) {
+ public IncrementalSAXSource_Xerces(SAXParser parser)
+ throws NoSuchMethodException
+ {
fIncrementalParser=parser;
+ Class[] parms={InputSource.class};
+ fParseSomeSetup=parser.getClass().getMethod("parseSomeSetup",parms);
+ parms=new Class[0];
+ fParseSome=parser.getClass().getMethod("parseSome",parms);
}
//
// Factories
//
- static public IncrementalSAXSource createIncrementalSAXSource() {
- return new IncrementalSAXSource_Xerces();
+ static public IncrementalSAXSource createIncrementalSAXSource()
+ {
+ return createIncrementalSAXSource(new SAXParser());
}
+
static public IncrementalSAXSource
createIncrementalSAXSource(SAXParser parser) {
- return new IncrementalSAXSource_Xerces(parser);
+ try
+ {
+ return new IncrementalSAXSource_Xerces(parser);
+ }
+ catch(NoSuchMethodException e)
+ {
+ // Xerces version mismatch. Fall back on the filtering solution
+ IncrementalSAXSource_Filter iss=new IncrementalSAXSource_Filter();
+ iss.setXMLReader(parser);
+ return iss;
+ }
}
//
@@ -163,7 +198,7 @@
try
{
- ok = fIncrementalParser.parseSomeSetup(source);
+ ok = parseSomeSetup(source);
}
catch(Exception ex)
{
@@ -197,7 +232,7 @@
Object arg;
try {
- boolean keepgoing = fIncrementalParser.parseSome();
+ boolean keepgoing = parseSome();
arg = keepgoing ? Boolean.TRUE : Boolean.FALSE;
} catch (SAXException ex) {
arg = ex;
@@ -208,6 +243,25 @@
}
return arg;
}
+
+ // Private methods -- conveniences to hide the reflection details
+ private boolean parseSomeSetup(InputSource source)
+ throws SAXException, IOException, IllegalAccessException,
+ java.lang.reflect.InvocationTargetException
+ {
+ Object[] parm={source};
+ Object ret=fParseSomeSetup.invoke(fIncrementalParser,parm);
+ return ((Boolean)ret).booleanValue();
+ }
+ static final Object[] noparms=new Object[0]; // Would null work???
+ private boolean parseSome()
+ throws SAXException, IOException, IllegalAccessException,
+ java.lang.reflect.InvocationTargetException
+ {
+ Object ret=fParseSome.invoke(fIncrementalParser,noparms);
+ return ((Boolean)ret).booleanValue();
+ }
+
//================================================================
/** Simple unit test. Attempt coroutine parsing of document indicated
@@ -224,8 +278,8 @@
System.out.println("ERROR: Couldn't allocate coroutine number.\n");
return;
}
- IncrementalSAXSource_Xerces parser=
- new IncrementalSAXSource_Xerces();
+ IncrementalSAXSource parser=
+ createIncrementalSAXSource();
// Use a serializer as our sample output
org.apache.xml.serialize.XMLSerializer trace;
---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org