ilene       2003/06/17 12:08:37

  Modified:    java/src/org/apache/xalan/xsltc/dom LoadDocument.java
  Log:
  Patch for bugzilla #15828.
  
  Arguments to URIResolver.resolve method for document function, in XSLTC are 
now
  
  href: argument passed to document function
  base: URI of stylesheet
  
  Revision  Changes    Path
  1.19      +21 -26    
xml-xalan/java/src/org/apache/xalan/xsltc/dom/LoadDocument.java
  
  Index: LoadDocument.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/LoadDocument.java,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- LoadDocument.java 17 Jun 2003 19:05:54 -0000      1.18
  +++ LoadDocument.java 17 Jun 2003 19:08:37 -0000      1.19
  @@ -62,7 +62,6 @@
   
   package org.apache.xalan.xsltc.dom;
   
  -import java.io.File;
   import java.io.FileNotFoundException;
   
   import javax.xml.parsers.SAXParser;
  @@ -77,6 +76,7 @@
   import org.apache.xml.dtm.DTMAxisIterator;
   import org.apache.xml.dtm.ref.DTMDefaultBase;
   import org.apache.xml.dtm.ref.EmptyIterator;
  +import org.apache.xml.utils.SystemIDResolver;
   
   import org.xml.sax.InputSource;
   import org.xml.sax.XMLReader;
  @@ -137,12 +137,14 @@
       throws TransletException {
           try {
               if (arg instanceof String) {
  -                if (((String)arg).length() == 0) {
  -                    return document(xslURI, "", translet, dom);
  -                } else {
  -                    return document((String)arg, getBaseFromURI(xslURI),
  -                                    translet, dom);
  -                }
  +                String baseURI = xslURI;
  +                if (!SystemIDResolver.isAbsoluteURI(xslURI))
  +                   baseURI = 
SystemIDResolver.getAbsoluteURIFromRelative(xslURI);
  +                
  +                String href = (String)arg;
  +                if (href.length() == 0) 
  +                    href = "";   
  +                return document(href, baseURI, translet, dom);
               } else if (arg instanceof DTMAxisIterator) {
                   return document((DTMAxisIterator)arg, null, translet, dom);
               } else {
  @@ -150,6 +152,7 @@
                   throw new IllegalArgumentException(err);
               }      
           } catch (Exception e) {
  +            System.out.println("xslURI: " + xslURI);
               throw new TransletException(e);
           }
       }
  @@ -159,31 +162,21 @@
                       AbstractTranslet translet, DOM dom)
       throws Exception 
       {
  +        try {
           final String originalUri = uri;
           MultiDOM multiplexer = (MultiDOM)dom;
   
  -        // Return an empty iterator if the URI is clearly invalid
  -        // (to prevent some unncessary MalformedURL exceptions).
  -        if (uri == null || uri.equals("")) {
  -            return(EmptyIterator.getInstance());
  -        }
  -
           // Prepend URI base to URI (from context)
           if (base != null && !base.equals("")) {
  -            if (!uri.startsWith(base)     &&   // unless URI contains base
  -                !uri.startsWith("/")      &&   // unless URI is abs. file 
path
  -                !uri.startsWith("http:/") &&   // unless URI is abs. http URL
  -                !uri.startsWith("file:/")) {   // unless URI is abs. file URL
  -                uri = base + uri;
  -            }
  +            uri = SystemIDResolver.getAbsoluteURI(uri, base);
           }
   
  -        // Check if this is a local file name
  -        final File file = new File(uri);
  -        if (file.exists()) {
  -            uri = file.toURL().toExternalForm();
  +        // Return an empty iterator if the URI is clearly invalid
  +        // (to prevent some unncessary MalformedURL exceptions).
  +        if (uri == null || uri.equals("")) {
  +            return(EmptyIterator.getInstance());
           }
  -    
  +        
           // Check if this DOM has already been added to the multiplexer
           int mask = multiplexer.getDocumentMask(uri);
           if (mask != -1) {
  @@ -202,8 +195,7 @@
           mask = multiplexer.nextMask(); // peek
   
           if (cache != null) {
  -            //newdom = cache.retrieveDocument(originalUri, mask, translet);
  -            newdom = cache.retrieveDocument(uri, mask, translet);
  +            newdom = cache.retrieveDocument(base, originalUri, translet);
               if (newdom == null) {
                   final Exception e = new FileNotFoundException(originalUri);
                   throw new TransletException(e);
  @@ -244,6 +236,9 @@
   
           // Return a singleton iterator containing the root node
           return new SingletonIterator(((SAXImpl)newdom).getDocument(), true);
  +        } catch (Exception e) {
  +            throw e;
  +        }
       }
   
   
  
  
  

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

Reply via email to