jkesselm    01/12/13 07:31:35

  Modified:    java/src/org/apache/xml/dtm/ref
                        IncrementalSAXSource_Xerces.java
  Log:
  Bugzilla5272 patch suggested by Sandy Gao.
  
  This startup sequence for incremental SAX parsing under Xerces2
  really is excessively complicated and excessively fragile as a result.
  Not to mention being underdocumented. We really need to push the
  Xerces folks to provide a simple incremental SAX API, similar to that
  in the Xerces1incremental prototype.
  
  Revision  Changes    Path
  1.7       +29 -18    
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.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- IncrementalSAXSource_Xerces.java  2001/11/02 21:02:15     1.6
  +++ IncrementalSAXSource_Xerces.java  2001/12/13 15:31:35     1.7
  @@ -80,24 +80,25 @@
   public class IncrementalSAXSource_Xerces
     implements IncrementalSAXSource
   {
  -     //
  -     // Reflection. To allow this to compile with both Xerces1 and Xerces2, which
  -     // require very different methods and objects, we need to avoid static 
  -     // references to those APIs. So until Xerces2 is pervasive and we're willing 
  -     // to make it a prerequisite, we will rely upon relection.
  -     //
  -     Method fParseSomeSetup=null; // Xerces1 method
  -     Method fParseSome=null; // Xerces1 method
  -     Object fPullParserConfig=null; // Xerces2 pull control object
  -     Method fConfigSetInput=null; // Xerces2 method
  -     Method fConfigParse=null; // Xerces2 method
  -     Method fSetInputSource=null; // Xerces2 pull control method
  -     Constructor fConfigInputSourceCtor=null; // Xerces2 initialization method
  -     Method fConfigSetByteStream=null; // Xerces2 initialization method
  -     Method fConfigSetCharStream=null; // Xerces2 initialization method
  -     Method fConfigSetEncoding=null; // Xerces2 initialization method
  -             
     //
  +  // Reflection. To allow this to compile with both Xerces1 and Xerces2, which
  +  // require very different methods and objects, we need to avoid static 
  +  // references to those APIs. So until Xerces2 is pervasive and we're willing 
  +  // to make it a prerequisite, we will rely upon relection.
  +  //
  +  Method fParseSomeSetup=null; // Xerces1 method
  +  Method fParseSome=null; // Xerces1 method
  +  Object fPullParserConfig=null; // Xerces2 pull control object
  +  Method fConfigSetInput=null; // Xerces2 method
  +  Method fConfigParse=null; // Xerces2 method
  +  Method fSetInputSource=null; // Xerces2 pull control method
  +  Constructor fConfigInputSourceCtor=null; // Xerces2 initialization method
  +  Method fConfigSetByteStream=null; // Xerces2 initialization method
  +  Method fConfigSetCharStream=null; // Xerces2 initialization method
  +  Method fConfigSetEncoding=null; // Xerces2 initialization method
  +  Method fReset=null; // Both Xerces1 and Xerces2, but diff. signatures
  +  
  +  //
     // Data
     //
     SAXParser fIncrementalParser;
  @@ -159,9 +160,11 @@
                        
fConfigSetCharStream=fXniInputSourceClass.getMethod("setCharacterStream",args6);
                        Class[] args7={String.class};
                        
fConfigSetEncoding=fXniInputSourceClass.getMethod("setEncoding",args7);
  -                                                                                    
                                 
  +
                        Class[] argsb={Boolean.TYPE};
                        fConfigParse=xniStdConfigClass.getMethod("parse",argsb);       
                 
  +                     Class[] noargs=new Class[0];
  +                     fReset=fIncrementalParser.getClass().getMethod("reset",noargs);
                }
                catch(Exception e)
                {
  @@ -356,6 +359,14 @@
                        fConfigSetCharStream.invoke(xmlsource,parmsa);
                        parmsa[0]=source.getEncoding();
                        fConfigSetEncoding.invoke(xmlsource,parmsa);
  +
  +                     // Bugzilla5272 patch suggested by Sandy Gao.
  +                     // Has to be reflection to run with Xerces2
  +                     // after compilation against Xerces1. or vice
  +                     // versa, due to return type mismatches.
  +                     Object[] noparms=new Object[0];
  +                     fReset.invoke(fIncrementalParser,noparms);
  +                     
                        parmsa[0]=xmlsource;
                        fConfigSetInput.invoke(fPullParserConfig,parmsa);
                        
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to