owlcs / owlapi

OWL API main repository
822 stars 315 forks source link

jaxb-ap dropped in OWLAPI 5.1 causes failure running on Java 11 #1150

Closed sszuev closed 5 days ago

sszuev commented 1 month ago

scratch project with following pom:

    <dependencies>
        <dependency>
            <groupId>net.sourceforge.owlapi</groupId>
            <artifactId>owlapi-api</artifactId>
            <version>5.5.0</version>
        </dependency>
        <dependency>
            <groupId>net.sourceforge.owlapi</groupId>
            <artifactId>owlapi-impl</artifactId>
            <version>5.5.0</version>
        </dependency>
        <dependency>
            <groupId>net.sourceforge.owlapi</groupId>
            <artifactId>owlapi-rio</artifactId>
            <version>5.5.0</version>
        </dependency>
        <dependency>
            <groupId>net.sourceforge.owlapi</groupId>
            <artifactId>owlapi-apibinding</artifactId>
            <version>5.5.0</version>
        </dependency>
    </dependencies>

and main class:

import org.semanticweb.owlapi.apibinding.OWLManager;
import org.semanticweb.owlapi.formats.NTriplesDocumentFormat;
import org.semanticweb.owlapi.io.StringDocumentSource;
import org.semanticweb.owlapi.model.IRI;
import org.semanticweb.owlapi.model.OWLOntology;
public class Main {
    public static void main(String[] args) throws Exception {
        var nt ="_:Bc5b286a7X2Dabe6X2D4b50X2Daa2bX2D9e5c5d4d86c8 <http://www.w3.org/2000/01/rdf-schema#comment> \"test\" .";
        OWLOntology owl = OWLManager.createOWLOntologyManager().loadOntologyFromOntologyDocument(
                new StringDocumentSource(nt, IRI.create("x"), new NTriplesDocumentFormat(), "ttl")
        );
        owl.saveOntology(System.out);
    }
}

exception:

Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/adapters/HexBinaryAdapter
    at org.eclipse.rdf4j.rio.helpers.AbstractRDFParser.createNode(AbstractRDFParser.java:413)
    at org.eclipse.rdf4j.rio.ntriples.NTriplesParser.parseNode(NTriplesParser.java:273)
    at org.eclipse.rdf4j.rio.ntriples.NTriplesParser.parseSubject(NTriplesParser.java:190)
    at org.eclipse.rdf4j.rio.ntriples.NTriplesParser.parseStatement(NTriplesParser.java:138)
    at org.eclipse.rdf4j.rio.ntriples.NTriplesParser.parse(NTriplesParser.java:120)
    at org.semanticweb.owlapi.rio.RioParserImpl.parseDocumentSource(RioParserImpl.java:186)
    at org.semanticweb.owlapi.rio.RioParserImpl.parse(RioParserImpl.java:134)
    at uk.ac.manchester.cs.owl.owlapi.OWLOntologyFactoryImpl.loadOWLOntology(OWLOntologyFactoryImpl.java:195)
    at uk.ac.manchester.cs.owl.owlapi.OWLOntologyManagerImpl.load(OWLOntologyManagerImpl.java:1105)
    at uk.ac.manchester.cs.owl.owlapi.OWLOntologyManagerImpl.loadOntology(OWLOntologyManagerImpl.java:1055)
    at uk.ac.manchester.cs.owl.owlapi.OWLOntologyManagerImpl.loadOntologyFromOntologyDocument(OWLOntologyManagerImpl.java:1005)
    at cc.datafabric.platform.Main.main(Main.java:15)
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.adapters.HexBinaryAdapter
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
    ... 12 more
ignazio1977 commented 1 month ago

rdf4j-rio-api depends on HexBinaryAdapter, which is on the XML classes dropped from the Java 11 (IIRC) VM, so that requires manually adding dependencies such as

<dependency>
  <groupId>javax.xml.bind</groupId>
  <artifactId>jaxb-api</artifactId>
  <version>2.3.0</version>
</dependency>
<dependency>
  <groupId>com.sun.xml.bind</groupId>
  <artifactId>jaxb-core</artifactId>
  <version>2.3.0</version>
</dependency>
<dependency>
  <groupId>com.sun.xml.bind</groupId>
  <artifactId>jaxb-impl</artifactId>
  <version>2.3.0</version>
</dependency>

as a workaround you can add these to your project, but they should be included in the next owlapi 5.5 release.

That, or update to a rio version that does not have that dependency. Looks like it's only used to hash blank node ids, which I'm pretty sure can be done without JAXB classes. I'll see what updates are available.

ignazio1977 commented 5 days ago

fixed in release 5.5.1