Bug 27610 - java.lang.ClassCastException (SAXTransformerFactory)
Summary: java.lang.ClassCastException (SAXTransformerFactory)
Status: RESOLVED FIXED
Alias: None
Product: classpath
Classification: Unclassified
Component: xml (show other bugs)
Version: unspecified
: P3 normal
Target Milestone: 0.93
Assignee: chris burdess
URL:
Keywords:
: 27687 (view as bug list)
Depends on:
Blocks:
 
Reported: 2006-05-14 18:21 UTC by Pat Mongkolwat
Modified: 2006-09-17 09:57 UTC (History)
2 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Pat Mongkolwat 2006-05-14 18:21:48 UTC
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
Comment 1 Pat Mongkolwat 2006-05-18 00:44:32 UTC
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.
Comment 2 chris burdess 2006-09-16 17:30:46 UTC
*** Bug 27687 has been marked as a duplicate of this bug. ***
Comment 3 cvs-commit@developer.classpath.org 2006-09-17 09:56:49 UTC
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



Comment 4 chris burdess 2006-09-17 09:57:54 UTC
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).