Ruifeng Ma
Ruifeng Ma

Reputation: 2787

Java XML transformer developed in JDK1.7.0 not working in Java 1.8 runtime

Below code was developed in a JDK 1.7.0 environment a long time ago, but when application is run as a jar in a Java 1.8 runtime environment, there is always an exception when generating the transformer.

Source xsl = new StreamSource(ResultsHTMLTransformer.class.getResourceAsStream(styleSheetPath));
Transformer transformer = TransformerFactory.newInstance().newTransformer(xsl);

The exception is as below. I am confused on how this could happen. Shouldn't Java 1.8 be backward compatible with previous versions?

ERROR:  'The first argument to the non-static Java function 'replace' is not a valid object reference.'
FATAL ERROR:  'Cannot convert data-type 'void' to 'reference'.'
           :Cannot convert data-type 'void' to 'reference'.
javax.xml.transform.TransformerConfigurationException: Cannot convert data-type 'void' to 'reference'.
    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.newTemplates(TransformerFactoryImpl.java:1015)
    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.newTransformer(TransformerFactoryImpl.java:789)
    at com.ibm.test.report.ResultsHTMLTransformer.transformXMLtoHTML(ResultsHTMLTransformer.java:38)
    at com.ibm.test.report.KitchenReport.main(KitchenReport.java:63)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)

Caused by: Cannot convert data-type 'void' to 'reference'.
    at com.sun.org.apache.xalan.internal.xsltc.compiler.CastExpr.typeCheck(CastExpr.java:189)
    at com.sun.org.apache.xalan.internal.xsltc.compiler.CastExpr.<init>(CastExpr.java:145)
    at com.sun.org.apache.xalan.internal.xsltc.compiler.Param.typeCheck(Param.java:160)
    at com.sun.org.apache.xalan.internal.xsltc.compiler.SyntaxTreeNode.typeCheckContents(SyntaxTreeNode.java:487)
    at com.sun.org.apache.xalan.internal.xsltc.compiler.Template.typeCheck(Template.java:294)
    at com.sun.org.apache.xalan.internal.xsltc.compiler.SyntaxTreeNode.typeCheckContents(SyntaxTreeNode.java:487)
    at com.sun.org.apache.xalan.internal.xsltc.compiler.Stylesheet.typeCheck(Stylesheet.java:653)
    at com.sun.org.apache.xalan.internal.xsltc.compiler.Parser.createAST(Parser.java:412)
    at com.sun.org.apache.xalan.internal.xsltc.compiler.XSLTC.compile(XSLTC.java:483)
    at com.sun.org.apache.xalan.internal.xsltc.compiler.XSLTC.compile(XSLTC.java:568)
    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl.newTemplates(TransformerFactoryImpl.java:974)
    ... 8 more

Upvotes: 0

Views: 1903

Answers (1)

Ruifeng Ma
Ruifeng Ma

Reputation: 2787

Just realized that the application was developed using IBM JDK, while the environment I deployed it has OpenJDK installed. Once I deployed it to an environment with IBM JRE, it worked fine.

There might be some compatibility issues here, but can't be sure, as this is so basic a java function.

Below is output of java -version of IBM JDK.

Java(TM) SE Runtime Environment (build pwa6470_27sr1-20140411_01(SR1))
IBM J9 VM (build 2.7, JRE 1.7.0 Windows 7 amd64-64 Compressed References 20140410_195893 (JIT enabled, AOT enabled)
J9VM - R27_Java727_SR1_20140410_1931_B195893
JIT  - tr.r13.java_20140410_61421
GC   - R27_Java727_SR1_20140410_1931_B195893_CMPRSS
J9CL - 20140410_195893)
JCL - 20140409_01 based on Oracle 7u55-b13

Upvotes: 1

Related Questions