Hello, I got an exception below at runtime. Exception in thread "main" java.lang.ClassCastException at org.dcm4che2.tool.dcm2xml.Dcm2Xml.getTransformerHandler (Dcm2Xml.java:279) at org.dcm4che2.tool.dcm2xml.Dcm2Xml.convert (Dcm2Xml.java:262) at org.dcm4che2.tool.dcm2xml.Dcm2Xml.main (Dcm2Xml.java:205) : import javax.xml.transform.sax.SAXTransformerFactory; import javax.xml.transform.sax.TransformerHandler; : private TransformerHandler getTransformerHandler() throws TransformerConfigurationException, IOException { SAXTransformerFactory tf = (SAXTransformerFactory) TransformerFactory.newInstance(); if (xslt == null) { return tf.newTransformerHandler(); } if (xsltInc) { tf.setAttribute( "http://xml.apache.org/xalan/features/incremental", Boolean.TRUE); } TransformerHandler th = tf.newTransformerHandler(new StreamSource(xslt.openStream(), xslt.toExternalForm())); Transformer t = th.getTransformer(); if (xsltParams != null) { for (int i = 0; i+1 < xsltParams.length; i++,i++) { t.setParameter(xsltParams[i], xsltParams[i+1]); } } return th; } : Line 279 has: SAXTransformerFactory tf = (SAXTransformerFactory) TransformerFactory.newInstance(); Line 262 has: TransformerHandler th = getTransformerHandler(); Thanks, Pat
Clarification of the reported bug: SAXTransformerFactory tf = (SAXTransformerFactory) SAXTransformerFactory.newInstance(); The above line returns implementation of the base class (gnu.xml.transform.TransformerFactoryImpl) instead of the correct class (org.apache.xalan.processor.TransformerFactoryImpl). It fails in classpath (ClassCastException) but in SUN JDK it returns the correct implementation of the SAXTransformerFactory class.
*** Bug 27687 has been marked as a duplicate of this bug. ***
Subject: Bug 27610 CVSROOT: /cvsroot/classpath Module name: classpath Changes by: Chris Burdess <dog> 06/09/17 09:54:34 Modified files: . : ChangeLog gnu/xml/dom/ls : SAXEventSink.java gnu/xml/transform: TransformerFactoryImpl.java Added files: gnu/xml/transform: SAXTemplatesHandler.java SAXTransformerHandler.java Log message: 2006-09-17 Chris Burdess <dog@gnu.org> Fixes PR 27610 27687. * gnu/xml/dom/ls/SAXEventSink.java: Permit limited subclassing. * gnu/xml/transform/SAXTemplatesHandler.java, * gnu/xml/transform/SAXTransformerHandler.java: New files. * gnu/xml/transform/TransformerFactoryImpl.java: Implement SAXTransformerFactory. CVSWeb URLs: http://cvs.savannah.gnu.org/viewcvs/classpath/ChangeLog?cvsroot=classpath&r1=1.8551&r2=1.8552 http://cvs.savannah.gnu.org/viewcvs/classpath/gnu/xml/dom/ls/SAXEventSink.java?cvsroot=classpath&r1=1.6&r2=1.7 http://cvs.savannah.gnu.org/viewcvs/classpath/gnu/xml/transform/TransformerFactoryImpl.java?cvsroot=classpath&r1=1.3&r2=1.4 http://cvs.savannah.gnu.org/viewcvs/classpath/gnu/xml/transform/SAXTemplatesHandler.java?cvsroot=classpath&rev=1.1 http://cvs.savannah.gnu.org/viewcvs/classpath/gnu/xml/transform/SAXTransformerHandler.java?cvsroot=classpath&rev=1.1
As of 0.93 the default TransformerFactory will implement SAXTransformerFactory. However not that your code may still not work as it attempts to set Xalan-specific attributes under certain conditions (when xsltInc is true), which will cause an error with Classpath (as per the JAXP specification).