jpmml / r2pmml

R library for converting R models to PMML
GNU Affero General Public License v3.0
73 stars 18 forks source link

vanila example is crashing #40

Closed synikitin closed 6 years ago

synikitin commented 6 years ago

Hello,

With this setup

platform       x86_64-apple-darwin15.6.0   
arch           x86_64                      
os             darwin15.6.0                
system         x86_64, darwin15.6.0        
status                                     
major          3                           
minor          4.3                         
year           2017                        
month          11                          
day            30                          
svn rev        73796                       
language       R                           
version.string R version 3.4.3 (2017-11-30)
nickname       Kite-Eating Tree  

java 9.0.4
Java(TM) SE Runtime Environment (build 9.0.4+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.4+11, mixed mode)          

I try to run the vanilla code from the examples:

library("randomForest")
library("r2pmml")

data(iris)

# Train a model using raw Iris data
iris.rf = randomForest(Species ~ ., data = iris, ntree = 7)
print(iris.rf)

# Export the model to PMML
r2pmml(iris.rf, "iris_rf.pmml")

and get the following errors:

Mar 20, 2018 10:08:49 AM org.jpmml.rexp.Main run
INFO: Parsing RDS..
Mar 20, 2018 10:08:49 AM org.jpmml.rexp.Main run
INFO: Parsed RDS in 17 ms.
Mar 20, 2018 10:08:49 AM org.jpmml.rexp.Main run
INFO: Initializing default Converter
Mar 20, 2018 10:08:49 AM org.jpmml.rexp.Main run
INFO: Initialized org.jpmml.rexp.RandomForestConverter
Mar 20, 2018 10:08:49 AM org.jpmml.rexp.Main run
INFO: Converting..
Mar 20, 2018 10:08:49 AM org.jpmml.rexp.Main run
INFO: Converted in 143 ms.
Mar 20, 2018 10:08:49 AM org.jpmml.rexp.Main run
INFO: Marshalling PMML..
Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/JAXBContext
    at org.jpmml.model.JAXBUtil.getContext(JAXBUtil.java:126)
    at org.jpmml.model.MetroJAXBUtil.marshalPMML(MetroJAXBUtil.java:25)
    at org.jpmml.rexp.Main.run(Main.java:163)
    at org.jpmml.rexp.Main.main(Main.java:97)
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.JAXBContext
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:185)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496)
    ... 4 more
Error in .convert(tempfile, file, converter, converter_classpath, verbose) : 
  1

Any idea why execution is crashing?

vruusmann commented 6 years ago

INFO: Marshalling PMML.. Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/JAXBContext

You're using Java 9, which is missing some internal Java XML Binding (JAXB) libraries. This example (and all other examples) would work flawlessly on Java 8.

This issue is a re-manifestation of https://github.com/jpmml/jpmml-model/issues/17. The latest JPMML-Model library version 1.4.1 has been updated for Java 9 support (apparently, I've forgot to mark the referenced issue as resolved). All other Java PMML conversion libraries (JPMML-Converter, JPMML-R and its R2PMML frontend) will be "magically" fixed once this JPMML-Model library version is propagated to them.

In the meantime, download Java 8, and make it the default one in your computer - if you type java --version into command prompt, then it should report some 1.8.0_16X version.