8

I have some code like:

XMLInputFactory xif = XMLInputFactory.newInstance()
TransformerFactory tf = TransformerFactory.newInstance("org.apache.xalan.processor.TransformerFactoryImpl", null)

Transformer t = tf.newTransformer()
DOMResult result = new DOMResult()
t.transform(new StAXSource(reader), result)

Which produces the following error:

Caught: javax.xml.transform.TransformerException: Can't transform a Source of type javax.xml.transform.stax.StAXSource

The reader object is of type com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl

ROMANIA_engineer
  • 54,432
  • 29
  • 203
  • 199
arlogb
  • 681
  • 1
  • 9
  • 19
  • So the problem here is that I should be actually using a TransformerFactory of type `org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl`. Unfortunately, Eclipse doesn't seem to provide that for me. It's also worth noting analogous code outside Eclipse works as expected. – arlogb May 29 '13 at 13:21

2 Answers2

6

So I was stupidly trying the wrong thing. This fixed it:

System.setProperty("javax.xml.transform.TransformerFactory",
"com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl");
arlogb
  • 681
  • 1
  • 9
  • 19
0

I stumbled upon Xml Transformer give me an error when trying to transform a StaxSource into a StreamResult, while looking to solve the very same issue as you.

The answer provided there seems to be working fine for me, i.e. use:

TransformerFactory.newDefaultInstance();

Instead of:

 XMLInputFactory.newInstance()
ratiaris
  • 327
  • 2
  • 10