santiagopg    2002/07/23 09:33:42

  Modified:    java/src/org/apache/xalan/xsltc/trax
                        TemplatesHandlerImpl.java TemplatesImpl.java
                        TransformerFactoryImpl.java TransformerImpl.java
  Log:
  Fixed for Bugzilla 10625. URIResolvers were being dropped in several places.
  
  Revision  Changes    Path
  1.13      +67 -9     
xml-xalan/java/src/org/apache/xalan/xsltc/trax/TemplatesHandlerImpl.java
  
  Index: TemplatesHandlerImpl.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/trax/TemplatesHandlerImpl.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- TemplatesHandlerImpl.java 26 Jun 2002 22:55:07 -0000      1.12
  +++ TemplatesHandlerImpl.java 23 Jul 2002 16:33:41 -0000      1.13
  @@ -57,6 +57,7 @@
    * <http://www.apache.org/>.
    *
    * @author Morten Jorgensen
  + * @author Santiago Pericas-Geertsen
    *
    */
   
  @@ -66,18 +67,32 @@
   import javax.xml.transform.sax.*;
   
   import org.xml.sax.Locator;
  +import org.xml.sax.InputSource;
  +
  +import org.apache.xalan.xsltc.compiler.*;
   import org.apache.xalan.xsltc.Translet;
   import org.apache.xalan.xsltc.runtime.AbstractTranslet;
  -import org.apache.xalan.xsltc.compiler.*;
  -import org.apache.xalan.xsltc.compiler.util.Util;
   
   /**
    * Implementation of a JAXP1.1 TemplatesHandler
    */
  -public class TemplatesHandlerImpl extends Parser implements TemplatesHandler 
{
  -
  +public class TemplatesHandlerImpl extends Parser 
  +    implements TemplatesHandler, SourceLoader 
  +{
  +    /**
  +     * System ID for this stylesheet.
  +     */
       private String _systemId;
  -    private int    _indentNumber;
  +
  +    /**
  +     * Number of spaces to add for output indentation.
  +     */
  +    private int _indentNumber;
  +
  +    /**
  +     * This URIResolver is passed to all Transformers.
  +     */
  +    private URIResolver _uriResolver = null;
   
       // Temporary
       private boolean _oldOutputSystem;
  @@ -125,6 +140,13 @@
       }
   
       /**
  +     * Store URIResolver needed for Transformers.
  +     */
  +    public void setURIResolver(URIResolver resolver) {
  +     _uriResolver = resolver;
  +    }
  +
  +    /**
        * Implements javax.xml.transform.sax.TemplatesHandler.getTemplates()
        * When a TemplatesHandler object is used as a ContentHandler or
        * DocumentHandler for the parsing of transformation instructions, it
  @@ -137,6 +159,11 @@
        try {
            final XSLTC xsltc = getXSLTC();
   
  +         // Set a document loader (for xsl:include/import) if defined
  +         if (_uriResolver != null) {
  +             xsltc.setSourceLoader(this);
  +         }
  +
            // Set the translet class name if not already set
            String transletName = TransformerFactoryImpl._defaultTransletName;
            if (_systemId != null) {
  @@ -171,8 +198,16 @@
                // Check that the transformation went well before returning
                final byte[][] bytecodes = xsltc.getBytecodes();
                if (bytecodes != null) {
  -                 return new TemplatesImpl(xsltc.getBytecodes(), 
transletName, 
  -                      getOutputProperties(), _indentNumber, 
_oldOutputSystem);
  +                 final TemplatesImpl templates = 
  +                     new TemplatesImpl(xsltc.getBytecodes(), transletName, 
  +                         getOutputProperties(), _indentNumber, 
  +                         _oldOutputSystem);
  +
  +                 // Set URIResolver on templates object
  +                 if (_uriResolver != null) {
  +                     templates.setURIResolver(_uriResolver);
  +                 }
  +                 return templates;
                }
            }
        }
  @@ -183,12 +218,35 @@
       }
   
       /**
  -     * recieve an object for locating the origin of SAX document events.
  +     * Recieve an object for locating the origin of SAX document events.
        * Most SAX parsers will use this method to inform content handler
        * of the location of the parsed document. 
        */
       public void setDocumentLocator(Locator locator) {
        setSystemId(locator.getSystemId());
  +    }
  +
  +    /**
  +     * This method implements XSLTC's SourceLoader interface. It is used to
  +     * glue a TrAX URIResolver to the XSLTC compiler's Input and Import 
classes.
  +     *
  +     * @param href The URI of the document to load
  +     * @param context The URI of the currently loaded document
  +     * @param xsltc The compiler that resuests the document
  +     * @return An InputSource with the loaded document
  +     */
  +    public InputSource loadSource(String href, String context, XSLTC xsltc) {
  +     try {
  +         // A _uriResolver must be set if this method is called
  +         final Source source = _uriResolver.resolve(href, context);
  +         if (source != null) {
  +             return Util.getInputSource(xsltc, source);
  +         }
  +     }
  +     catch (TransformerException e) {
  +         // Falls through
  +     }
  +     return null;
       }
   }
   
  
  
  
  1.19      +23 -6     
xml-xalan/java/src/org/apache/xalan/xsltc/trax/TemplatesImpl.java
  
  Index: TemplatesImpl.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/trax/TemplatesImpl.java,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- TemplatesImpl.java        22 Jul 2002 15:45:06 -0000      1.18
  +++ TemplatesImpl.java        23 Jul 2002 16:33:41 -0000      1.19
  @@ -123,6 +123,11 @@
        */
       private int _indentNumber;
   
  +    /**
  +     * This URIResolver is passed to all Transformers.
  +     */
  +    private URIResolver _uriResolver = null;
  +
       // Temporary
       private boolean _oldOutputSystem;
   
  @@ -168,6 +173,13 @@
       }
   
       /**
  +     * Store URIResolver needed for Transformers.
  +     */
  +    public void setURIResolver(URIResolver resolver) {
  +     _uriResolver = resolver;
  +    }
  +
  +    /**
        * The TransformerFactory must pass us the translet bytecodes using this
        * method before we can create any translet instances
        */
  @@ -317,9 +329,15 @@
        * @throws TransformerConfigurationException
        */
       public Transformer newTransformer()
  -     throws TransformerConfigurationException {
  -        return new TransformerImpl(getTransletInstance(), _outputProperties,
  -         _indentNumber, _oldOutputSystem);
  +     throws TransformerConfigurationException 
  +    {
  +     final TransformerImpl transformer =
  +         new TransformerImpl(getTransletInstance(), _outputProperties,
  +                             _indentNumber, _oldOutputSystem);
  +     if (_uriResolver != null) {
  +         transformer.setURIResolver(_uriResolver);
  +     }
  +     return transformer;
       }
   
       /**
  @@ -330,8 +348,7 @@
        */
       public Properties getOutputProperties() { 
        try {
  -         Transformer transformer = newTransformer();
  -         return transformer.getOutputProperties();
  +         return newTransformer().getOutputProperties();
        }
        catch (TransformerConfigurationException e) {
            return null;
  
  
  
  1.44      +162 -161  
xml-xalan/java/src/org/apache/xalan/xsltc/trax/TransformerFactoryImpl.java
  
  Index: TransformerFactoryImpl.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/trax/TransformerFactoryImpl.java,v
  retrieving revision 1.43
  retrieving revision 1.44
  diff -u -r1.43 -r1.44
  --- TransformerFactoryImpl.java       20 Jul 2002 23:46:13 -0000      1.43
  +++ TransformerFactoryImpl.java       23 Jul 2002 16:33:41 -0000      1.44
  @@ -58,6 +58,7 @@
    *
    * @author G. Todd Miller 
    * @author Morten Jorgensen
  + * @author Santiago Pericas-Geertsen
    *
    */
   
  @@ -87,35 +88,45 @@
   import org.apache.xalan.xsltc.compiler.XSLTC;
   import org.apache.xalan.xsltc.compiler.SourceLoader;
   import org.apache.xalan.xsltc.compiler.CompilerException;
  -import org.apache.xalan.xsltc.compiler.util.Util;
   import org.apache.xalan.xsltc.compiler.util.ErrorMsg;
   
   /**
    * Implementation of a JAXP1.1 TransformerFactory for Translets.
    */
   public class TransformerFactoryImpl
  -    extends SAXTransformerFactory implements SourceLoader, ErrorListener {
  -
  -    // This error listener is used only for this factory and is not passed to
  -    // the Templates or Transformer objects that we create!!!
  +    extends SAXTransformerFactory implements SourceLoader, ErrorListener 
  +{
  +    /**
  +     * This error listener is used only for this factory and is not passed to
  +     * the Templates or Transformer objects that we create.
  +     */
       private ErrorListener _errorListener = this; 
   
  -    // This URIResolver is passed to all created Templates and Transformers
  +    /**
  +     * This URIResolver is passed to all created Templates and Transformers
  +     */
       private URIResolver _uriResolver = null;
   
  -    // As Gregor Samsa awoke one morning from uneasy dreams he found himself
  -    // transformed in his bed into a gigantic insect. He was lying on his 
hard,
  -    // as it were armour plated, back, and if he lifted his head a little he
  -    // could see his big, brown belly divided into stiff, arched segments, on
  -    // top of which the bed quilt could hardly keep in position and was about
  -    // to slide off completely. His numerous legs, which were pitifully thin
  -    // compared to the rest of his bulk, waved helplessly before his eyes.
  -    // "What has happened to me?", he thought. It was no dream....
  +    /** 
  +     * As Gregor Samsa awoke one morning from uneasy dreams he found himself
  +     * transformed in his bed into a gigantic insect. He was lying on his 
hard,
  +     * as it were armour plated, back, and if he lifted his head a little he
  +     * could see his big, brown belly divided into stiff, arched segments, on
  +     * top of which the bed quilt could hardly keep in position and was about
  +     * to slide off completely. His numerous legs, which were pitifully thin
  +     * compared to the rest of his bulk, waved helplessly before his eyes.
  +     * "What has happened to me?", he thought. It was no dream....
  +     */
       protected static String _defaultTransletName = "GregorSamsa";
   
  -    // Cache for the newTransformer() method - see method for details
  +    /**
  +     * Cache for the newTransformer() method - see method for details
  +     */
       private Transformer _copyTransformer = null;
  -    // XSL document for the default transformer
  +
  +    /**
  +     * XSL document for the default transformer
  +     */
       private static final String COPY_TRANSLET_CODE =
        "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\";>"+
        "<xsl:template match=\"/\">"+
  @@ -123,11 +134,15 @@
        "</xsl:template>"+
        "</xsl:stylesheet>";
   
  -    // This Hashtable is used to store parameters for locating
  -    // <?xml-stylesheet ...?> processing instructions in XML documents.
  +    /**
  +     * This Hashtable is used to store parameters for locating
  +     * <?xml-stylesheet ...?> processing instructions in XML docs.
  +     */
       private Hashtable _piParams = null;
   
  -    // The above hashtable stores objects of this class only:
  +    /**
  +     * The above hashtable stores objects of this class.
  +     */
       private class PIParamWrapper {
        public String _media = null;
        public String _title = null;
  @@ -140,18 +155,29 @@
        }
       }
   
  -    // This flags are passed to the compiler
  +    /**
  +     * Set to <code>true</code> when debugging is enabled.
  +     */
       private boolean _debug = false;
  +
  +    /**
  +     * Set to <code>true</code> when templates are not inlined.
  +     */
       private boolean _disableInlining = false;
  +
  +    /**
  +     * Number of indent spaces when indentation is turned on.
  +     */
  +    private int _indentNumber = -1;
  +
  +    // Temporary
       private boolean _oldOutputSystem = false;
  -    private int     _indentNumber    = -1;
   
       /**
        * javax.xml.transform.sax.TransformerFactory implementation.
        * Contains nothing yet
        */
       public TransformerFactoryImpl() {
  -     // Don't need anything here so far...
       }
   
       /**
  @@ -164,7 +190,8 @@
        * @throws IllegalArgumentException
        */
       public void setErrorListener(ErrorListener listener) 
  -     throws IllegalArgumentException {
  +     throws IllegalArgumentException 
  +    {
        if (listener == null) {
            ErrorMsg err = new ErrorMsg(ErrorMsg.ERROR_LISTENER_NULL_ERR,
                                        "TransformerFactory");
  @@ -192,9 +219,13 @@
        * @throws IllegalArgumentException
        */
       public Object getAttribute(String name) 
  -     throws IllegalArgumentException { 
  +     throws IllegalArgumentException 
  +    { 
        // Return value for attribute 'translet-name'
  -     if (name.equals("translet-name")) return(_defaultTransletName);
  +     if (name.equals("translet-name")) {
  +         return _defaultTransletName;
  +     }
  +
        // Throw an exception for all other attributes
        ErrorMsg err = new ErrorMsg(ErrorMsg.JAXP_INVALID_ATTR_ERR, name);
        throw new IllegalArgumentException(err.toString());
  @@ -289,10 +320,12 @@
            StreamResult.FEATURE
        };
   
  -     // Inefficient, but it really does not matter in a function like this
  -     for (int i=0; i<features.length; i++)
  -         if (name.equals(features[i])) return true;
  -
  +     // Inefficient, but array is small
  +     for (int i =0; i < features.length; i++) {
  +         if (name.equals(features[i])) {
  +             return true;
  +         }
  +     }
        // Feature not supported
        return false;
       }
  @@ -306,7 +339,7 @@
        * Templates and Transformer objects created using this factory
        */    
       public URIResolver getURIResolver() {
  -     return(_uriResolver);
  +     return _uriResolver;
       } 
   
       /**
  @@ -340,13 +373,16 @@
        */
       public Source getAssociatedStylesheet(Source source, String media,
                                          String title, String charset)
  -     throws TransformerConfigurationException {
  +     throws TransformerConfigurationException 
  +    {
        // First create a hashtable that maps Source refs. to parameters
  -     if (_piParams == null) _piParams = new Hashtable();
  +     if (_piParams == null) {
  +         _piParams = new Hashtable();
  +     }
        // Store the parameters for this Source in the Hashtable
        _piParams.put(source, new PIParamWrapper(media, title, charset));
        // Return the same Source - we'll locate the stylesheet later
  -     return(source);
  +     return source;
       }
   
       /**
  @@ -357,11 +393,12 @@
        * @throws TransformerConfigurationException
        */    
       public Transformer newTransformer()
  -     throws TransformerConfigurationException { 
  -
  +     throws TransformerConfigurationException 
  +    { 
        if (_copyTransformer != null) {
  -         if (_uriResolver != null)
  +         if (_uriResolver != null) {
                _copyTransformer.setURIResolver(_uriResolver);
  +         }
            return _copyTransformer;
        }
   
  @@ -405,10 +442,13 @@
        * @throws TransformerConfigurationException
        */
       public Transformer newTransformer(Source source) throws
  -     TransformerConfigurationException {
  +     TransformerConfigurationException 
  +    {
        final Templates templates = newTemplates(source);
        final Transformer transformer = templates.newTransformer();
  -     if (_uriResolver != null) transformer.setURIResolver(_uriResolver);
  +     if (_uriResolver != null) {
  +         transformer.setURIResolver(_uriResolver);
  +     }
        return(transformer);
       }
   
  @@ -418,7 +458,7 @@
       private void passWarningsToListener(Vector messages) 
        throws TransformerException 
       {
  -     if (_errorListener == null || messages == null ) {
  +     if (_errorListener == null || messages == null) {
            return;
        }
        // Pass messages to listener, one by one
  @@ -435,13 +475,12 @@
        */
       private void passErrorsToListener(Vector messages) {
        try {
  -         // Nothing to do if there is no registered error listener
  -         if (_errorListener == null) return;
  -         // Nothing to do if there are not warning messages
  -         if (messages == null) return;
  +         if (_errorListener == null || messages == null) {
  +             return;
  +         }
            // Pass messages to listener, one by one
            final int count = messages.size();
  -         for (int pos=0; pos<count; pos++) {
  +         for (int pos = 0; pos < count; pos++) {
                String message = messages.elementAt(pos).toString();
                _errorListener.error(new TransformerException(message));
            }
  @@ -452,70 +491,6 @@
       }
   
       /**
  -     * Creates a SAX2 InputSource object from a TrAX Source object
  -     */
  -    private InputSource getInputSource(XSLTC xsltc, Source source)
  -     throws TransformerConfigurationException {
  -
  -     InputSource input = null;
  -     String systemId = source.getSystemId();
  -     if (systemId == null) systemId = "";
  -
  -     try {
  -
  -         // Try to get InputSource from SAXSource input
  -         if (source instanceof SAXSource) {
  -             final SAXSource sax = (SAXSource)source;
  -             input = sax.getInputSource();
  -             // Pass the SAX parser to the compiler
  -             xsltc.setXMLReader(sax.getXMLReader());
  -         }
  -         // handle  DOMSource  
  -         else if (source instanceof DOMSource) {
  -             final DOMSource domsrc = (DOMSource)source;
  -             final Document dom = (Document)domsrc.getNode();
  -             final DOM2SAX dom2sax = new DOM2SAX(dom);
  -             xsltc.setXMLReader(dom2sax);  
  -             // try to get SAX InputSource from DOM Source.
  -             input = SAXSource.sourceToInputSource(source);
  -             if (input == null){
  -                     input = new InputSource(domsrc.getSystemId());
  -             }
  -         }
  -         // Try to get InputStream or Reader from StreamSource
  -         else if (source instanceof StreamSource) {
  -             final StreamSource stream = (StreamSource)source;
  -             final InputStream istream = stream.getInputStream();
  -             final Reader reader = stream.getReader();
  -             // Create InputSource from Reader or InputStream in Source
  -             if (istream != null)
  -                 input = new InputSource(istream);
  -             else if (reader != null)
  -                 input = new InputSource(reader);
  -             else
  -                 input = new InputSource(systemId);
  -         }
  -         else {
  -             ErrorMsg err = new ErrorMsg(ErrorMsg.JAXP_UNKNOWN_SOURCE_ERR);
  -             throw new TransformerConfigurationException(err.toString());
  -         }
  -         input.setSystemId(systemId);
  -     }
  -     catch (NullPointerException e) {
  -         ErrorMsg err = new ErrorMsg(ErrorMsg.JAXP_NO_SOURCE_ERR,
  -                                     "TransformerFactory.newTemplates()");
  -         throw new TransformerConfigurationException(err.toString());
  -     }
  -     catch (SecurityException e) {
  -         ErrorMsg err = new ErrorMsg(ErrorMsg.FILE_ACCESS_ERR, systemId);
  -         throw new TransformerConfigurationException(err.toString());
  -     }
  -     finally {
  -         return(input);
  -     }
  -    }
  -
  -    /**
        * javax.xml.transform.sax.TransformerFactory implementation.
        * Process the Source into a Templates object, which is a a compiled
        * representation of the source.
  @@ -525,7 +500,8 @@
        * @throws TransformerConfigurationException
        */
       public Templates newTemplates(Source source)
  -     throws TransformerConfigurationException {
  +     throws TransformerConfigurationException 
  +    {
        // Create and initialize a stylesheet compiler
        final XSLTC xsltc = new XSLTC();
        if (_debug) xsltc.setDebug(true);
  @@ -533,7 +509,9 @@
        xsltc.init();
   
        // Set a document loader (for xsl:include/import) if defined
  -     if (_uriResolver != null) xsltc.setSourceLoader(this);
  +     if (_uriResolver != null) {
  +         xsltc.setSourceLoader(this);
  +     }
   
        // Pass parameters to the Parser to make sure it locates the correct
        // <?xml-stylesheet ...?> PI in an XML input document
  @@ -541,12 +519,13 @@
            // Get the parameters for this Source object
            PIParamWrapper p = (PIParamWrapper)_piParams.get(source);
            // Pass them on to the compiler (which will pass then to the parser)
  -         if (p != null) 
  +         if (p != null) {
                xsltc.setPIParameters(p._media, p._title, p._charset);
  +         }
        }
   
        // Compile the stylesheet
  -     final InputSource input = getInputSource(xsltc, source);
  +     final InputSource input = Util.getInputSource(xsltc, source);
        byte[][] bytecodes = xsltc.compile(null, input);
        final String transletName = xsltc.getClassName();
   
  @@ -566,13 +545,16 @@
        // Check that the transformation went well before returning
        if (bytecodes == null) {
            // Pass compiler errors to the error listener
  -         if (_errorListener != null)
  +         if (_errorListener != null) {
                passErrorsToListener(xsltc.getErrors());
  -         else
  +         }
  +         else {
                xsltc.printErrors();
  +         }
            ErrorMsg err = new ErrorMsg(ErrorMsg.JAXP_COMPILE_ERR);
            throw new TransformerConfigurationException(err.toString());
        }
  +
        return new TemplatesImpl(bytecodes, transletName, 
            xsltc.getOutputProperties(), _indentNumber, _oldOutputSystem);
       }
  @@ -586,10 +568,14 @@
        * @throws TransformerConfigurationException
        */
       public TemplatesHandler newTemplatesHandler() 
  -     throws TransformerConfigurationException { 
  +     throws TransformerConfigurationException 
  +    { 
        final TemplatesHandlerImpl handler = 
            new TemplatesHandlerImpl(_indentNumber, _oldOutputSystem);
        handler.init();
  +     if (_uriResolver != null) {
  +         handler.setURIResolver(_uriResolver);
  +     }
        return handler;
       }
   
  @@ -602,10 +588,13 @@
        * @throws TransformerConfigurationException
        */
       public TransformerHandler newTransformerHandler() 
  -     throws TransformerConfigurationException {
  +     throws TransformerConfigurationException 
  +    {
        final Transformer transformer = newTransformer();
  -     final TransformerImpl internal = (TransformerImpl)transformer;
  -     return(new TransformerHandlerImpl(internal));
  +     if (_uriResolver != null) {
  +         transformer.setURIResolver(_uriResolver);
  +     }
  +     return new TransformerHandlerImpl((TransformerImpl) transformer);
       }
   
       /**
  @@ -619,10 +608,13 @@
        * @throws TransformerConfigurationException
        */
       public TransformerHandler newTransformerHandler(Source src) 
  -     throws TransformerConfigurationException { 
  +     throws TransformerConfigurationException 
  +    { 
        final Transformer transformer = newTransformer(src);
  -     final TransformerImpl internal = (TransformerImpl)transformer;
  -     return(new TransformerHandlerImpl(internal));
  +     if (_uriResolver != null) {
  +         transformer.setURIResolver(_uriResolver);
  +     }
  +     return new TransformerHandlerImpl((TransformerImpl) transformer);
       }
   
       /**
  @@ -636,13 +628,13 @@
        * @throws TransformerConfigurationException
        */    
       public TransformerHandler newTransformerHandler(Templates templates) 
  -     throws TransformerConfigurationException  {
  +     throws TransformerConfigurationException  
  +    {
        final Transformer transformer = templates.newTransformer();
        final TransformerImpl internal = (TransformerImpl)transformer;
  -     return(new TransformerHandlerImpl(internal));
  +     return new TransformerHandlerImpl(internal);
       }
   
  -
       /**
        * javax.xml.transform.sax.SAXTransformerFactory implementation.
        * Create an XMLFilter that uses the given source as the
  @@ -653,9 +645,10 @@
        * @throws TransformerConfigurationException
        */
       public XMLFilter newXMLFilter(Source src) 
  -     throws TransformerConfigurationException {
  +     throws TransformerConfigurationException 
  +    {
        Templates templates = newTemplates(src);
  -     if (templates == null ) return null; 
  +     if (templates == null) return null; 
        return newXMLFilter(templates);
       }
   
  @@ -669,17 +662,18 @@
        * @throws TransformerConfigurationException
        */
       public XMLFilter newXMLFilter(Templates templates) 
  -     throws TransformerConfigurationException {
  +     throws TransformerConfigurationException 
  +    {
        try {
                    return new 
org.apache.xalan.xsltc.trax.TrAXFilter(templates);
        }
  -     catch(TransformerConfigurationException e1) {
  -                 if(_errorListener != null) {
  +     catch (TransformerConfigurationException e1) {
  +                 if (_errorListener != null) {
                   try {
                    _errorListener.fatalError(e1);
                    return null;
                }
  -             catch( TransformerException e2) {
  +             catch (TransformerException e2) {
                    new TransformerConfigurationException(e2);
                }
                    }
  @@ -688,28 +682,6 @@
       }
   
       /**
  -     * This method implements XSLTC's SourceLoader interface. It is used to
  -     * glue a TrAX URIResolver to the XSLTC compiler's Input and Import 
classes.
  -     *
  -     * @param href The URI of the document to load
  -     * @param context The URI of the currently loaded document
  -     * @param xsltc The compiler that resuests the document
  -     * @return An InputSource with the loaded document
  -     */
  -    public InputSource loadSource(String href, String context, XSLTC xsltc) {
  -     try {
  -         final Source source = _uriResolver.resolve(href, context);
  -         if (source != null) {
  -             return getInputSource(xsltc, source);
  -         }
  -     }
  -     catch (TransformerException e) {
  -         // Falls through
  -     }
  -     return null;
  -    }
  -
  -    /**
        * Receive notification of a recoverable error. 
        * The transformer must continue to provide normal parsing events after
        * invoking this method. It should still be possible for the application
  @@ -721,12 +693,14 @@
        * the transformation (always does in our case).
        */
       public void error(TransformerException e)
  -     throws TransformerException {
  +     throws TransformerException 
  +    {
        System.err.println("ERROR: "+e.getMessageAndLocation());
        Throwable wrapped = e.getException();
  -     if (wrapped != null)
  +     if (wrapped != null) {
            System.err.println("     : "+wrapped.getMessage());
  -     throw(e);       
  +     }
  +     throw e;        
       }
   
       /**
  @@ -743,12 +717,14 @@
        * the transformation (always does in our case).
        */
       public void fatalError(TransformerException e)
  -     throws TransformerException {
  +     throws TransformerException 
  +    {
        System.err.println("FATAL: "+e.getMessageAndLocation());
        Throwable wrapped = e.getException();
  -     if (wrapped != null)
  +     if (wrapped != null) {
            System.err.println("     : "+wrapped.getMessage());
  -     throw(e);
  +     }
  +     throw e;
       }
   
       /**
  @@ -765,11 +741,36 @@
        * the transformation (never does in our case).
        */
       public void warning(TransformerException e)
  -     throws TransformerException {
  +     throws TransformerException 
  +    {
        System.err.println("WARNING: "+e.getMessageAndLocation());
        Throwable wrapped = e.getException();
  -     if (wrapped != null)
  +     if (wrapped != null) {
            System.err.println("       : "+wrapped.getMessage());
  +     }
       }
   
  +    /**
  +     * This method implements XSLTC's SourceLoader interface. It is used to
  +     * glue a TrAX URIResolver to the XSLTC compiler's Input and Import 
classes.
  +     *
  +     * @param href The URI of the document to load
  +     * @param context The URI of the currently loaded document
  +     * @param xsltc The compiler that resuests the document
  +     * @return An InputSource with the loaded document
  +     */
  +    public InputSource loadSource(String href, String context, XSLTC xsltc) {
  +     try {
  +         if (_uriResolver != null) {
  +             final Source source = _uriResolver.resolve(href, context);
  +             if (source != null) {
  +                 return Util.getInputSource(xsltc, source);
  +             }
  +         }
  +     }
  +     catch (TransformerException e) {
  +         // Falls through
  +     }
  +     return null;
  +    }
   }
  
  
  
  1.53      +24 -16    
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.52
  retrieving revision 1.53
  diff -u -r1.52 -r1.53
  --- TransformerImpl.java      8 Jul 2002 18:33:08 -0000       1.52
  +++ TransformerImpl.java      23 Jul 2002 16:33:41 -0000      1.53
  @@ -120,6 +120,11 @@
       private String           _encoding = null;
       private ContentHandler   _handler  = null;
   
  +    /**
  +     * SystemId set in input source.
  +     */
  +    private String _sourceSystemId = null;
  +
       private ErrorListener _errorListener = this;
       private URIResolver   _uriResolver = null;
       private Properties    _properties, _propertiesClone;
  @@ -460,13 +465,15 @@
            DOMImpl dom = null;
            DTDMonitor dtd = null;
   
  +         // Get systemId from source
  +         _sourceSystemId = source.getSystemId();
  +
            // Handle SAXSource input
            if (source instanceof SAXSource) {
                // Get all info from the input SAXSource object
                final SAXSource   sax    = (SAXSource)source;
                XMLReader   reader = sax.getXMLReader();
                final InputSource input  = sax.getInputSource();
  -             final String      systemId = sax.getSystemId();
   
                // if reader was not set with setXMLReader by user,
                // then we must create one ourselves.
  @@ -494,11 +501,11 @@
   
                // Parse the input and build the internal DOM
                reader.parse(input);
  -             dom.setDocumentURI(systemId);
  +             dom.setDocumentURI(_sourceSystemId);
            }
            // Handle DOMSource input
            else if (source instanceof DOMSource) {
  -             final DOMSource   domsrc = (DOMSource)source;
  +             final DOMSource domsrc = (DOMSource) source;
                final org.w3c.dom.Node node = domsrc.getNode();
   
                boolean isComplete = true;
  @@ -506,9 +513,8 @@
                    isComplete = false;
                }
   
  -             final DOM2SAX     dom2sax = new DOM2SAX(node);
  +             final DOM2SAX dom2sax = new DOM2SAX(node);
                final InputSource input = null; 
  -             final String      systemId = domsrc.getSystemId(); 
   
                // Create a DTD monitor to trap all DTD/declarative events
                dtd = new DTDMonitor();
  @@ -528,7 +534,7 @@
                if (!isComplete) {
                    builder.endDocument();
                }
  -             dom.setDocumentURI(systemId);
  +             dom.setDocumentURI(_sourceSystemId);
            }
            // Handle StreamSource input
            else if (source instanceof StreamSource) {
  @@ -536,7 +542,6 @@
                final StreamSource stream = (StreamSource)source;
                final InputStream  streamInput = stream.getInputStream();
                final Reader streamReader = stream.getReader();
  -             final String systemId = stream.getSystemId();
   
                // With a StreamSource we need to create our own parser
                final SAXParserFactory factory = SAXParserFactory.newInstance();
  @@ -569,20 +574,23 @@
                InputSource input;
                if (streamInput != null) {
                    input = new InputSource(streamInput);
  -                 input.setSystemId(systemId); 
  -             } else if (streamReader != null) {
  +                 input.setSystemId(_sourceSystemId); 
  +             } 
  +             else if (streamReader != null) {
                    input = new InputSource(streamReader);
  -                 input.setSystemId(systemId); 
  -             } else if (systemId != null) {
  -                 input = new InputSource(systemId);
  -             } else {
  +                 input.setSystemId(_sourceSystemId); 
  +             } 
  +             else if (_sourceSystemId != null) {
  +                 input = new InputSource(_sourceSystemId);
  +             } 
  +             else {
                    ErrorMsg err = new ErrorMsg(ErrorMsg.JAXP_NO_SOURCE_ERR);
                    throw new TransformerException(err.toString());
                }
   
                // Parse the input and build the internal DOM
                reader.parse(input);
  -             dom.setDocumentURI(systemId);
  +             dom.setDocumentURI(_sourceSystemId);
            }
            // Handle XSLTC-internal Source input
            else if (source instanceof XSLTCSource) {
  @@ -1047,7 +1055,7 @@
        */
       public DOMImpl retrieveDocument(String uri, int mask, Translet translet) 
{
        try {
  -         return(getDOM(_uriResolver.resolve(uri, ""), mask));
  +         return getDOM(_uriResolver.resolve(uri, _sourceSystemId), mask);
        }
        catch (TransformerException e) {
            if (_errorListener != null)
  
  
  

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

Reply via email to