Problem transforming DITA to PDF (incompatable types)
Here should go questions about transforming XML with XSLT and FOP.
-
- Posts: 7
- Joined: Thu Nov 27, 2014 8:17 am
Problem transforming DITA to PDF (incompatable types)
I have an XSLT that is working fine outside of oXygen author (v 15.2). I suspect my problem has to do with my jar files conflicting with oXygen's jar files. Here's the error I am getting:
The code I use for transformation is:
I'm including fop 1.1 jar in my plugin. Here's a list of my included jar files:
Code: Select all
java.lang.ClassCastException: net.sourceforge.jeuclid.fop.JEuclidXMLHandler incompatible with org.apache.fop.render.XMLHandler
at org.apache.fop.render.XMLHandlerRegistry.discoverXMLHandlers(XMLHandlerRegistry.java:153)
at org.apache.fop.render.XMLHandlerRegistry.<init>(XMLHandlerRegistry.java:49)
at org.apache.fop.apps.FopFactory.<init>(FopFactory.java:180)
at org.apache.fop.apps.FopFactory.newInstance(FopFactory.java:190)
at com.ibm.tools.fs.io.XmlFile.transformToPDF(XmlFile.java:719)
at com.ibm.itso.gasm.gpt.oXygen.plugin.transforms.TransformDeliverableThread.run(TransformDeliverableThread.java:231)
Code: Select all
// Determine if there are options set for rendering pdf
System.setProperty("javax.xml.transform.TransformerFactory", "net.sf.saxon.TransformerFactoryImpl");
FopFactory fopFactory = FopFactory.newInstance();
if ( options != null ) {
// Determine if file or url
if ( !isOptsAURL ) fopFactory.setUserConfig((File)options);
else {
// Set in factory
URL optUrl = (URL) options;
fopFactory.setUserConfig(optUrl.getProtocol() + "://" + optUrl.getHost() + optUrl.getPath());
}
}
// Create driver and set output file
Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, fopFactory.newFOUserAgent(), new java.io.FileOutputStream(destination));
// transform file
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transform = tFactory.newTemplates(new StreamSource(xslt)).newTransformer();
for ( NameValuePair pair : params ) {
transform.setParameter(pair.getName(), pair.getValue());
}
transform.setParameter("versionParam", "2.0");
transform.setOutputProperty(OutputKeys.ENCODING, encoding);
transform.transform(new StreamSource(this),new SAXResult(fop.getDefaultHandler()));
System.clearProperty("javax.xml.transform.TransformerFactory");
fopFactory = null;
fop = null;
tFactory = null;
transform = null;
Code: Select all
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plugin SYSTEM "../plugin.dtd">
<plugin name="GASM Plug-in for oXygen" description="GASM Plug-in for oXygen" version="1.0.0" vendor="GASM" class="com.ibm.itso.gasm.gpt.oXygen.plugin.GasmPlugin" classLoaderType="preferReferencedResources" id="GASM Plug-in for oXygen">
<runtime>
<library name="lib/gasmplugin.jar"/>
<library name="lib/fop.jar"/>
<library name="lib/ibmpkcs.jar"/>
<library name="lib/jaxen-core.jar"/>
<library name="lib/jaxen-jdom.jar"/>
<library name="lib/jdom.jar"/>
<library name="lib/saxpath.jar"/>
<library name="lib/serializer-2.7.0.jar"/>
<library name="lib/tools.jar"/>
<library name="lib/xalan-2.7.0.jar"/>
<library name="lib/xercesImpl-2.7.1.jar"/>
<library name="lib/gson-2.2.2-javadoc.jar"/>
<library name="lib/gson-2.2.2-sources.jar"/>
<library name="lib/gson-2.2.2.jar"/>
</runtime>
<extension type="WorkspaceAccess" class="com.ibm.itso.gasm.gpt.oXygen.plugin.GasmWSPluginExtention" />
</plugin>
-
- Posts: 9434
- Joined: Fri Jul 09, 2004 5:18 pm
Re: Problem transforming DITA to PDF (incompatable types)
Hi,
Oxygen comes with lots of libraries (among which Xerces, Xalan, FOP 1.1) so ideally you would remove these libraries from your plugin (use them only in the compilation stage):
or as I see you have set up in the plugin.xml to prefer the local referenced resources classLoaderType="preferReferencedResources" you could continue adding JARs in it, for example also add in it a reference to your own copies of the jeuclid-core.jar and jeuclid-fop.jar libraries which right now are loaded on the parent class loader.
Regards,
Radu
Oxygen comes with lots of libraries (among which Xerces, Xalan, FOP 1.1) so ideally you would remove these libraries from your plugin (use them only in the compilation stage):
Code: Select all
<library name="lib/fop.jar"/>
....
<library name="lib/serializer-2.7.0.jar"/>
...
<library name="lib/xalan-2.7.0.jar"/>
....
<library name="lib/xercesImpl-2.7.1.jar"/>
Regards,
Radu
Radu Coravu
<oXygen/> XML Editor
http://www.oxygenxml.com
<oXygen/> XML Editor
http://www.oxygenxml.com
-
- Posts: 7
- Joined: Thu Nov 27, 2014 8:17 am
Re: Problem transforming DITA to PDF (incompatable types)
Actually, I tried removing the reference to FOP from my plugin and it worked. However, now it's not releasing the PDF file. So I can't open the PDF until I shutdown oXygen Author. Do you know a way around this?
-
- Posts: 9434
- Joined: Fri Jul 09, 2004 5:18 pm
Re: Problem transforming DITA to PDF (incompatable types)
Hi,
In the sample code you posted you are creating a new file output stream.
You should keep that created file output stream in a variable and make sure to close the stream at the end, after the generation is finished.
Regards,
Radu
In the sample code you posted you are creating a new file output stream.
You should keep that created file output stream in a variable and make sure to close the stream at the end, after the generation is finished.
Regards,
Radu
Radu Coravu
<oXygen/> XML Editor
http://www.oxygenxml.com
<oXygen/> XML Editor
http://www.oxygenxml.com
-
- Posts: 7
- Joined: Thu Nov 27, 2014 8:17 am
Re: Problem transforming DITA to PDF (incompatable types)
Good idea, I'll give that a try.Radu wrote:Hi,
In the sample code you posted you are creating a new file output stream.
You should keep that created file output stream in a variable and make sure to close the stream at the end, after the generation is finished.
Regards,
Radu
-
- Posts: 7
- Joined: Thu Nov 27, 2014 8:17 am
Re: Problem transforming DITA to PDF (incompatable types)
Radu wrote:Hi,
In the sample code you posted you are creating a new file output stream.
You should keep that created file output stream in a variable and make sure to close the stream at the end, after the generation is finished.
Regards,
Radu
That worked! Thanks!
Jump to
- Oxygen XML Editor/Author/Developer
- ↳ Feature Request
- ↳ Common Problems
- ↳ DITA (Editing and Publishing DITA Content)
- ↳ SDK-API, Frameworks - Document Types
- ↳ DocBook
- ↳ TEI
- ↳ XHTML
- ↳ Other Issues
- Oxygen XML Web Author
- ↳ Feature Request
- ↳ Common Problems
- Oxygen Content Fusion
- ↳ Feature Request
- ↳ Common Problems
- Oxygen JSON Editor
- ↳ Feature Request
- ↳ Common Problems
- Oxygen PDF Chemistry
- ↳ Feature Request
- ↳ Common Problems
- Oxygen Feedback
- ↳ Feature Request
- ↳ Common Problems
- Oxygen XML WebHelp
- ↳ Feature Request
- ↳ Common Problems
- XML
- ↳ General XML Questions
- ↳ XSLT and FOP
- ↳ XML Schemas
- ↳ XQuery
- NVDL
- ↳ General NVDL Issues
- ↳ oNVDL Related Issues
- XML Services Market
- ↳ Offer a Service