I attached a simple test program and data files.  When I ran it, I got the
following stack trace, I figured that TrAXFilter.parse() resets the
XMLReader's EntityResolver to that of the downflow filters, which is really
the default resolver.  Thus, my setEntityResolver() is ignored.

Thanks,
Yueming

** Transformation error
   File "file:///C:/work/consulting/src/xslt/xalanbug/foo.dtd" not found.
org.xml.sax.SAXParseException: File
"file:///C:/work/consulting/src/xslt/xalanbug/foo.dtd" not found.
        at
org.apache.xerces.framework.XMLParser.reportError(XMLParser.java:1202)
        at
org.apache.xerces.readers.DefaultEntityHandler.startReadingFromExternalEntit
y(DefaultEntityHandler.java:788)
        at
org.apache.xerces.readers.DefaultEntityHandler.startReadingFromExternalSubse
t(DefaultEntityHandler.java:566)
        at
org.apache.xerces.framework.XMLDTDScanner.scanDoctypeDecl(XMLDTDScanner.java
:1139)
        at
org.apache.xerces.framework.XMLDocumentScanner.scanDoctypeDecl(XMLDocumentSc
anner.java:2145)
        at
org.apache.xerces.framework.XMLDocumentScanner.access$0(XMLDocumentScanner.j
ava:2100)
        at
org.apache.xerces.framework.XMLDocumentScanner$PrologDispatcher.dispatch(XML
DocumentScanner.java:831)
        at
org.apache.xerces.framework.XMLDocumentScanner.parseSome(XMLDocumentScanner.
java:381)
        at org.apache.xerces.framework.XMLParser.parse(XMLParser.java:1081)
        at
org.apache.xalan.transformer.TrAXFilter.parse(TrAXFilter.java:134)
        at
org.apache.xalan.transformer.TransformerIdentityImpl.transform(TransformerId
entityImpl.java:452)
        at FilterChain.main(FilterChain.java:75)


----- Original Message -----
From: "Gary L Peskin" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>; "'Yueming Xu'" <[EMAIL PROTECTED]>
Sent: Monday, October 22, 2001 9:50 AM
Subject: RE: How to setEntityResolver when XMLFilter is used?


> Do you have a stack trace from the error that occurs when the DTD file
> cannot be found?  This might provide a clue.  I just really don't have
> the time at the moment to try to recreate this here and think about
> what's going wrong.  But a stack trace might provide a quick hint.
>
> Gary
>
> -----Original Message-----
> From: Yueming Xu [mailto:[EMAIL PROTECTED]]
> Sent: Wednesday, October 17, 2001 12:47 PM
> To: [EMAIL PROTECTED]
> Subject: How to setEntityResolver when XMLFilter is used?
>
>
> In the following code, I tried to use my DummyEntityResolver, so it
> won't check for the existence of the DTD file for the incoming XML.
> However, it does not work.  It always tries to resolve the DTD file.
> What is wrong with this code?
>
> Thanks,
> Yueming
>
> // Setup reusable templates
> TransformerFactory tFactory =TransformerFactory.newInstance();
> Templates template1 = tFactory.newTemplates(new
> StreamSource(stylesheet1));
> Templates template2 = tFactory.newTemplates(new
> StreamSource(stylesheet2));
>
> // Set up to read the input file
> SAXParserFactory spf = SAXParserFactory.newInstance();
> spf.setNamespaceAware( true );
> spf.setValidating( false );
> SAXParser parser = spf.newSAXParser();
> XMLReader reader = parser.getXMLReader();
> reader.setEntityResolver(new DummyEntityResolver());
>
> // Set up the output stream
> StreamResult result = new StreamResult("result.txt");
> // Set up the input stream
> BufferedInputStream bis =
> new BufferedInputStream(new FileInputStream(datafile));
> SAXTransformerFactory stf = (SAXTransformerFactory) tFactory;
> XMLFilter filter1 = stf.newXMLFilter(template1);
> XMLFilter filter2 = stf.newXMLFilter(template2);
> filter1.setParent(reader);
> filter2.setParent(filter1);
>
> Transformer transformer = stf.newTransformer();
> SAXSource transformSource = new SAXSource(filter2, new
> InputSource(bis));
> transformer.transform(transformSource, result);
<?xml version="1.0" encoding="ISO-8859-1"?>

<xsl:stylesheet 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; 
  version="1.0"
  >
  <xsl:output method="text" omit-xml-declaration="yes"/> 
  <xsl:strip-space elements="*"/>

  <xsl:template match="/">
    <xsl:value-of select="Article"/>
  </xsl:template>

</xsl:stylesheet>


<?xml version="1.0"?>
<!DOCTYPE Article SYSTEM "foo.dtd">
<Article>
  Test Article
</Article>

FilterChain.java

Reply via email to