Skip to content

Exception in thread "main" java.lang.NoClassDefFoundError: oracle/xdb/XMLType #266

@MikiDi

Description

@MikiDi

Hi,

For my rml config running docker run ... rmlio/rmlmapper-java:v8.0.0 (Oracle DB) fails with the following:

09:40:44.798 [main] DEBUG b.u.i.k.functions.agent.AgentFactory.createFromFnO(59) - AgentImpl initialised!
Exception in thread "main" java.lang.NoClassDefFoundError: oracle/xdb/XMLType
        at oracle.jdbc.driver.NamedTypeAccessor.getString(NamedTypeAccessor.java:407)
        at oracle.jdbc.driver.GeneratedStatement.getString(GeneratedStatement.java:232)
        at oracle.jdbc.driver.GeneratedScrollableResultSet.getString(GeneratedScrollableResultSet.java:398)
        at oracle.jdbc.driver.GeneratedResultSet.getString(GeneratedResultSet.java:648)
        at be.ugent.idlab.knows.dataio.access.RDBAccess.getCSVInputStream(RDBAccess.java:215)
        at be.ugent.idlab.knows.dataio.access.RDBAccess.getInputStream(RDBAccess.java:158)
        at be.ugent.idlab.knows.dataio.iterators.CSVWSourceIterator.bootstrap(CSVWSourceIterator.java:50)
        at be.ugent.idlab.knows.dataio.iterators.CSVWSourceIterator.<init>(CSVWSourceIterator.java:39)
        at be.ugent.idlab.knows.dataio.iterators.CSVSourceIterator.<init>(CSVSourceIterator.java:22)
        at be.ugent.rml.records.TabularSourceFactory.getRecordsForCSV(TabularSourceFactory.java:79)
        at be.ugent.rml.records.TabularSourceFactory.getRecords(TabularSourceFactory.java:33)
        at be.ugent.rml.records.RecordsFactory.getRecords(RecordsFactory.java:143)
        at be.ugent.rml.records.RecordsFactory.createRecords(RecordsFactory.java:74)
        at be.ugent.rml.Executor.getRecords(Executor.java:359)
        at be.ugent.rml.Executor.executeWithFunction(Executor.java:168)
        at be.ugent.rml.Executor.execute(Executor.java:155)
        at be.ugent.rml.cli.Main.run(Main.java:440)
        at be.ugent.rml.cli.Main.main(Main.java:49)
Caused by: java.lang.ClassNotFoundException: oracle.xdb.XMLType
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source)
        at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
        ... 18 more

I first suspected this had to with Oracle licensing, that prohibits adding the required dependency directly (see issue #146 (comment) for example). However, going by the Readme this issue has been resolved since v6.1.0.

After some more investigation I added the xdb6 jarfile. This makes my setup run as it's supposed to!

docker run --rm ^
  ...
  -v "%cd%"/oracledriver:/oracle-driver ^
  --entrypoint java ^
  rmlio/rmlmapper-java:v8.0.0 ^
  -cp "/rmlmapper.jar:/oracle-driver/xdb6-18.3.0.0.jar" be.ugent.rml.cli.Main ^
  ...

From my experience I cannot judge if adding xdb6 always is a hard requirement when using RML on an Oracle DB, or if it is specific to my case. Mainly flagging here in case this rings a bell to maintainers, in which case adding a notice about this in the readme would be a good improvement.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions