Running FOP with a DTD catalog

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Running FOP with a DTD catalog

Jan Driesen

Hello everybody,

 

 

I am trying to process files with a DTD reference from the (Windows) command line.

C:\[...]\fop-2.2\fop.bat -xml "C:\Users\[...]\inputfile.xml" -xsl transformation.xslt -pdf outputfile.pdf -catalog

 

In order to do so, I use the -catalog option for FOP(2.2). I have a CatalogManager.properties in my running folder (using verbose=4), pointing to the catalog file.

When running FOP, output reports the mapping to the correct DTD entries, so I am sure that catalog is being read.

 

After that, FOP errors out:

 

SEVERE: Exception

org.apache.fop.apps.FOPException: I/O error reported by XML parser processing file:/C:/Users/[...]/inputfile.xml: C:\Users\[...]\validation.dtd (The system cannot find the file specified)

        at org.apache.fop.cli.InputHandler.transformTo(InputHandler.java:296)

        at org.apache.fop.cli.InputHandler.renderTo(InputHandler.java:116)

        at org.apache.fop.cli.Main.startFOP(Main.java:186)

        at org.apache.fop.cli.Main.main(Main.java:217)

Caused by: net.sf.saxon.trans.XPathException: I/O error reported by XML parser processing file:/C:/Users/[...]/inputfile.xml: C:\Users\[...]\validation.dtd (The system cannot find the file specified)

        at net.sf.saxon.event.Sender.sendSAXSource(Sender.java:476)

        at net.sf.saxon.event.Sender.send(Sender.java:177)

        at net.sf.saxon.Controller.transform(Controller.java:1846)

        at net.sf.saxon.s9api.XsltTransformer.transform(XsltTransformer.java:553)

        at net.sf.saxon.jaxp.TransformerImpl.transform(TransformerImpl.java:183)

        at org.apache.fop.cli.InputHandler.transformTo(InputHandler.java:293)

        ... 3 more

Caused by: java.io.FileNotFoundException: C:\Users\[...]\validation.dtd (The system cannot find the file specified)

        at java.io.FileInputStream.open0(Native Method)

        at java.io.FileInputStream.open(Unknown Source)

        at java.io.FileInputStream.<init>(Unknown Source)

        at java.io.FileInputStream.<init>(Unknown Source)

        at sun.net.www.protocol.file.FileURLConnection.connect(Unknown Source)

        at sun.net.www.protocol.file.FileURLConnection.getInputStream(Unknown Source)

 

Indeed the (public) DTD is not in the same folder, but the catalog file which points to the location of the DTD's should solve that. As you can see from the error, I am currently testing this with Saxon.

When running Saxon on its own to isolate the xml->fo part, I can make the catalog work as well by running:

"C:\[..]\java.exe" -cp C:\[...]\saxon9he.jar;C:\[...]\resolver.jar -Dxml.catalog.files="C:\[...]\CatalogueFile.xml" net.sf.saxon.Transform -r:org.apache.xml.resolver.tools.CatalogResolver -x:org.apache.xml.resolver.tools.ResolvingXMLReader -y:org.apache.xml.resolver.tools.ResolvingXMLReader -xsl:inputfile.xml -s:transformation.xslt -o:outputfile.fo

 

I have the impression that fop is not forwarding catalog setting to Saxon... Can any of you make some suggestions on how to set this up or what to test?

 

 

Thanks,

 

 

Jan Driesen