vhardy      2002/07/12 09:01:33

  Modified:    sources/org/apache/batik/apps/svgbrowser
                        XMLInputHandler.java
  Log:
  Added DocumentURIResolver to handler document() function properly (i.e., to handle 
relative uris inputs in the transformation
  
  Revision  Changes    Path
  1.2       +39 -7     
xml-batik/sources/org/apache/batik/apps/svgbrowser/XMLInputHandler.java
  
  Index: XMLInputHandler.java
  ===================================================================
  RCS file: 
/home/cvs/xml-batik/sources/org/apache/batik/apps/svgbrowser/XMLInputHandler.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- XMLInputHandler.java      11 Jul 2002 16:42:45 -0000      1.1
  +++ XMLInputHandler.java      12 Jul 2002 16:01:33 -0000      1.2
  @@ -32,14 +32,16 @@
   import org.w3c.dom.svg.SVGDocument;
   import org.w3c.dom.stylesheets.StyleSheet;
   
  -import javax.xml.transform.TransformerFactory;
  +import javax.xml.parsers.DocumentBuilder;
  +import javax.xml.parsers.DocumentBuilderFactory;
  +import javax.xml.transform.Source;
   import javax.xml.transform.Transformer;
  -import javax.xml.transform.stream.StreamSource;
  -import javax.xml.transform.dom.DOMSource;
  +import javax.xml.transform.TransformerFactory;
  +import javax.xml.transform.URIResolver;
   import javax.xml.transform.dom.DOMResult;
  +import javax.xml.transform.dom.DOMSource;
   import javax.xml.transform.stream.StreamResult;
  -import javax.xml.parsers.DocumentBuilder;
  -import javax.xml.parsers.DocumentBuilderFactory;
  +import javax.xml.transform.stream.StreamSource;
   
   import org.apache.batik.dom.util.DOMUtilities;
   import org.apache.batik.dom.util.HashTable;
  @@ -182,6 +184,10 @@
               = tFactory.newTransformer
               (new StreamSource(parsedXSLStyleSheetURI.toString()));
   
  +        // Set the URIResolver to properly handle document() and xsl:include
  +        transformer.setURIResolver
  +            (new DocumentURIResolver(parsedXSLStyleSheetURI.toString()));
  +
           // Now, apply the transformation to the input document.
           DOMImplementation impl = SVGDOMImplementation.getDOMImplementation();
           String svgNS = SVGDOMImplementation.SVG_NAMESPACE_URI;
  @@ -192,7 +198,8 @@
           //     but this was the only solution found to be able to 
           //     generate content in the proper namespaces.
           //
  -        // SVGOMDocument outDoc = (SVGOMDocument)impl.createDocument(svgNS, "svg", 
null);
  +        // SVGOMDocument outDoc = 
  +        //   (SVGOMDocument)impl.createDocument(svgNS, "svg", null);
           // outDoc.setURLObject(new URL(uri));
           // transformer.transform
           //     (new DOMSource(inDoc),
  @@ -213,6 +220,10 @@
               outDoc = f.createDocument(uri, 
                                         new StringReader(sw.toString()));
           } catch (Exception e) {
  +            System.err.println("======================================");
  +            System.err.println(sw.toString());
  +            System.err.println("======================================");
  +            
               throw new IllegalArgumentException
                   (Resources.getString(ERROR_RESULT_GENERATED_EXCEPTION));
           }
  @@ -301,4 +312,25 @@
           return null;
       }
   
  +    /**
  +     * Implements the URIResolver interface so that relative urls used in 
  +     * transformations are resolved properly.
  +     */
  +    public class DocumentURIResolver implements URIResolver {
  +        String documentURI;
  +
  +        public DocumentURIResolver(String documentURI) {
  +            this.documentURI = documentURI;
  +        }
  +
  +        public Source resolve(String href, String base) {
  +            if (base == null || "".equals(base)) {
  +                base = documentURI;
  +            }
  +
  +            ParsedURL purl = new ParsedURL(base, href);
  +
  +            return new StreamSource(purl.toString());
  +        }
  +    }
   }
  
  
  

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

Reply via email to