You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@xalan.apache.org by Guoliang Cao <ca...@ispsoft.com> on 2001/03/01 21:40:55 UTC

How to get URIResolver process xsl:include?

Hi,

I'm using these code to transform a document with my customized
URIResolver. It throws some exception. Seems it's not using the assigned
URIResolver when it processes xsl:include element. If the code is
wrong,  please send me your good code. Really thanks.

xalan version:  2.0.0,  xerces version:  comes with xalan.

import javax.xml.transform.*;
import javax.xml.transform.sax.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.*;

import org.apache.xerces.dom.*;
import org.w3c.dom.*;
import java.io.StringReader;

public class SAXTransformer
{
    public static void main(String[] args)
    {

      try {
      TransformerFactory tFactory = TransformerFactory.newInstance();
      tFactory.setURIResolver(
          new URIResolver()
          {
              public Source resolve(String publicId, String systemId)
              {
                  System.out.println("resolving "+systemId);
                  if (systemId.indexOf("Test1")>=0)
                  {
                      return new StreamSource(new StringReader("<just
for test/>"));
                  }

                  return null;
              }
          }
      );

      Templates templates = tFactory.newTemplates(new
StreamSource("/Test.xsl"));

      Transformer transformer = templates.newTransformer();
      Document doc = new DocumentImpl();
      transformer.transform(new StreamSource("/Test.xml"), new
DOMResult(doc));

      System.out.println(doc.getDocumentElement().getNodeName());
      }
      catch (Exception e)
      {
        e.printStackTrace();
      }
    }
}

--------------  output -----------------------
resolving /cao/upx/xmlstylesheet/workflow/Test.xsl
javax.xml.transform.TransformerConfigurationException: File
"file:///C:/cao/upx//cao/upx/xmlstylesheet/workflow/Test1" not found.
 at
org.apache.xalan.processor.TransformerFactoryImpl.newTemplates(TransformerFactoryImpl.java:821)

 at SAXTransformer.main(SAXTransformer.java:34)
---------
javax.xml.transform.TransformerException: File
"file:///C:/cao/upx//cao/upx/xmlstylesheet/workflow/Test1" not found.
 at
org.apache.xalan.processor.TransformerFactoryImpl.newTemplates(TransformerFactoryImpl.java:819)

 at SAXTransformer.main(SAXTransformer.java:34)
---------
org.xml.sax.SAXParseException: File
"file:///C:/cao/upx//cao/upx/xmlstylesheet/workflow/Test1" not found.
 at
org.apache.xerces.framework.XMLParser.reportError(XMLParser.java:975)
 at
org.apache.xerces.readers.DefaultEntityHandler.startReadingFromDocument(DefaultEntityHandler.java:512)

 at
org.apache.xerces.framework.XMLParser.parseSomeSetup(XMLParser.java:303)

 at org.apache.xerces.framework.XMLParser.parse(XMLParser.java:860)
 at
org.apache.xalan.processor.ProcessorInclude.parse(ProcessorInclude.java:303)

 at
org.apache.xalan.processor.ProcessorInclude.startElement(ProcessorInclude.java:189)

 at
org.apache.xalan.processor.StylesheetHandler.startElement(StylesheetHandler.java:632)

 at
org.apache.xerces.parsers.SAXParser.startElement(SAXParser.java:1371)
 at
org.apache.xerces.validators.common.XMLValidator.callStartElement(XMLValidator.java:705)

 at
org.apache.xerces.framework.XMLDocumentScanner.scanElement(XMLDocumentScanner.java:1852)

 at
org.apache.xerces.framework.XMLDocumentScanner$ContentDispatcher.dispatch(XMLDocumentScanner.java:1233)

 at
org.apache.xerces.framework.XMLDocumentScanner.parseSome(XMLDocumentScanner.java:380)

 at org.apache.xerces.framework.XMLParser.parse(XMLParser.java:861)
 at
org.apache.xalan.processor.TransformerFactoryImpl.newTemplates(TransformerFactoryImpl.java:801)

 at SAXTransformer.main(SAXTransformer.java:34)



Re: How to get URIResolver process xsl:include?

Posted by Guoliang Cao <ca...@ispsoft.com>.
I'm wondering if anyone is using self-created URIResolver to do transformation. I still can't get it work.
If the URIResolver is used when processing "xsl:include ...",   it'll at least tell me "resolving ....".
But it didn't.

Please comment on this code.

Thanks,

Guoliang

> Hi,
>
> I'm using these code to transform a document with my customized
> URIResolver. It throws some exception. Seems it's not using the assigned
> URIResolver when it processes xsl:include element. If the code is
> wrong,  please send me your good code. Really thanks.
>
> xalan version:  2.0.0,  xerces version:  comes with xalan.
>
> import javax.xml.transform.*;
> import javax.xml.transform.sax.*;
> import javax.xml.transform.dom.*;
> import javax.xml.transform.stream.*;
>
> import org.apache.xerces.dom.*;
> import org.w3c.dom.*;
> import java.io.StringReader;
>
> public class SAXTransformer
> {
>     public static void main(String[] args)
>     {
>
>       try {
>       TransformerFactory tFactory = TransformerFactory.newInstance();
>       tFactory.setURIResolver(
>           new URIResolver()
>           {
>               public Source resolve(String publicId, String systemId)
>               {
>                   System.out.println("resolving "+systemId);
>                   if (systemId.indexOf("Test1")>=0)
>                   {
>                       return new StreamSource(new StringReader("<just
> for test/>"));
>                   }
>
>                   return null;
>               }
>           }
>       );
>
>       Templates templates = tFactory.newTemplates(new
> StreamSource("/Test.xsl"));
>
>       Transformer transformer = templates.newTransformer();
>       Document doc = new DocumentImpl();
>       transformer.transform(new StreamSource("/Test.xml"), new
> DOMResult(doc));
>
>       System.out.println(doc.getDocumentElement().getNodeName());
>       }
>       catch (Exception e)
>       {
>         e.printStackTrace();
>       }
>     }
> }
>
> --------------  output -----------------------
> resolving /cao/upx/xmlstylesheet/workflow/Test.xsl
> javax.xml.transform.TransformerConfigurationException: File
> "file:///C:/cao/upx//cao/upx/xmlstylesheet/workflow/Test1" not found.
>  at
> org.apache.xalan.processor.TransformerFactoryImpl.newTemplates(TransformerFactoryImpl.java:821)
>
>  at SAXTransformer.main(SAXTransformer.java:34)
> ---------
> javax.xml.transform.TransformerException: File
> "file:///C:/cao/upx//cao/upx/xmlstylesheet/workflow/Test1" not found.
>  at
> org.apache.xalan.processor.TransformerFactoryImpl.newTemplates(TransformerFactoryImpl.java:819)
>
>  at SAXTransformer.main(SAXTransformer.java:34)
> ---------
> org.xml.sax.SAXParseException: File
> "file:///C:/cao/upx//cao/upx/xmlstylesheet/workflow/Test1" not found.
>  at
> org.apache.xerces.framework.XMLParser.reportError(XMLParser.java:975)
>  at
> org.apache.xerces.readers.DefaultEntityHandler.startReadingFromDocument(DefaultEntityHandler.java:512)
>
>  at
> org.apache.xerces.framework.XMLParser.parseSomeSetup(XMLParser.java:303)
>
>  at org.apache.xerces.framework.XMLParser.parse(XMLParser.java:860)
>  at
> org.apache.xalan.processor.ProcessorInclude.parse(ProcessorInclude.java:303)
>
>  at
> org.apache.xalan.processor.ProcessorInclude.startElement(ProcessorInclude.java:189)
>
>  at
> org.apache.xalan.processor.StylesheetHandler.startElement(StylesheetHandler.java:632)
>
>  at
> org.apache.xerces.parsers.SAXParser.startElement(SAXParser.java:1371)
>  at
> org.apache.xerces.validators.common.XMLValidator.callStartElement(XMLValidator.java:705)
>
>  at
> org.apache.xerces.framework.XMLDocumentScanner.scanElement(XMLDocumentScanner.java:1852)
>
>  at
> org.apache.xerces.framework.XMLDocumentScanner$ContentDispatcher.dispatch(XMLDocumentScanner.java:1233)
>
>  at
> org.apache.xerces.framework.XMLDocumentScanner.parseSome(XMLDocumentScanner.java:380)
>
>  at org.apache.xerces.framework.XMLParser.parse(XMLParser.java:861)
>  at
> org.apache.xalan.processor.TransformerFactoryImpl.newTemplates(TransformerFactoryImpl.java:801)
>
>  at SAXTransformer.main(SAXTransformer.java:34)
>
>   ------------------------------------------------------------------------
> <?xml version="1.0"?>
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>                 xmlns:lxslt="http://xml.apache.org/xslt"
>                 version="1.0">
>
>     <xsl:include href="Test1"/>
>
> </xsl:stylesheet>
>
>   ------------------------------------------------------------------------
> <?xml version="1.0"?>
> <doc>
>   <name first="David" last="Marston"/>
>   <name first="David" last="Bertoni"/>
>   <name first="Donald" last="Leslie"/>
>   <name first="Emily" last="Farmer"/>
>   <name first="Jack" last="Donohue"/>
>   <name first="Myriam" last="Midy"/>
>   <name first="Paul" last="Dick"/>
>   <name first="Robert" last="Weir"/>
>   <name first="Scott" last="Boag"/>
>   <name first="Shane" last="Curcuru"/>
> </doc>
>
>   ------------------------------------------------------------------------
>                           Name: SAXTransformer.java
>    SAXTransformer.java    Type: JavaScript Program (application/x-javascript)
>                       Encoding: 7bit