[jdom-interest] Turning off DTD validation within JDOMSource

Laurent Bihanic laurent.bihanic at atosorigin.com
Thu May 2 09:31:34 PDT 2002


Hi Gary,

(Sorry for the late response.)

The problem you're probably having here is that you probably set a DocType on 
your JDOM documents. To behave as close as possible to a real XML parser, 
JDOMSource relies on SAXOutputter that tries (when the XSLT transformer 
requests) to provide the information present in the DTD. For that, it runs an 
XML parser on the DocType to generate DTD events towards the XSLT processor.

"When the XSLT transformer requests" actually means when the XSLT transformer 
registers a LexicalHandler and/or a DeclHandler on the JDOMSource-provided 
XMLReader, i.e. SAXOutputter.

There's currently no way to configure JDOMSource or SAXOutputter not to try to 
parse the DTD. But you may try one of the following:
  - Prevent the XSLT processor to register the listed handlers (not possible, 
I think!)
  - Reset the DocType of the document before calling transform()
  - Hack JDOMSource/SAXOutputter to add a flag to prevent DTD parsing

For the last option, have a look at the method dtdEvents() in SAXOutputter.

Laurent


Gary Lawrence Murphy wrote:
>>>>>>"G" == Gary Lawrence Murphy <garym at canada.com> writes:
>>>>>
> 
>     G> Transformer xslt = TransformerFactory.newInstance()
>     G> .newTransformer(new StreamSource(xsl)); xslt.transform(new
>     G> JDOMSource(dom), newdom);
> 
>     G> Is there some way to tell the JDOMSource (or the
>     G> TransformerImpl) that it should ignore the DTD?
> 
> According to the API docs, the following should work, but it doesn't:
> 
>     JDOMSource jds = new JDOMSource(dom);
>     jds.getXMLReader().setFeature(
>                       "http://xml.org/sax/features/validation",
>                       false); // ignore DTD
> 
> What is the correct way to do this?
> 




More information about the jdom-interest mailing list