This is an automated email from the ASF dual-hosted git repository.
andy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git
The following commit(s) were added to refs/heads/main by this push:
new 9c0a01b9d3 kryo5 upgrade
9c0a01b9d3 is described below
commit 9c0a01b9d3be9584878de202f0a490cfb9ccb72d
Author: Claus Stadler <[email protected]>
AuthorDate: Fri Sep 5 22:01:54 2025 +0200
kryo5 upgrade
---
jena-geosparql/pom.xml | 4 ++--
.../jena/geosparql/kryo/EnvelopeSerializer.java | 10 ++++-----
.../geosparql/kryo/GeometrySerializerJtsWkb.java | 10 ++++-----
.../apache/jena/geosparql/kryo/NodeSerializer.java | 10 ++++-----
.../jena/geosparql/kryo/TripleSerializer.java | 10 ++++-----
.../index/v2/KryoRegistratorSpatialIndexV2.java | 11 +++++-----
.../index/v2/STRtreePerGraphSerializer.java | 10 ++++-----
.../geosparql/spatial/index/v2/STRtreeUtils.java | 3 ++-
.../spatial/index/v2/SpatialIndexIoKryo.java | 25 ++++++++++++++++------
.../jts/index/strtree/STRtreeSerializer.java | 10 ++++-----
.../spatial/index/v2/SimpleGraphSerializer.java | 10 ++++-----
.../spatial/index/v2/TestNodeSerializer.java | 8 +++----
pom.xml | 6 +++---
13 files changed, 70 insertions(+), 57 deletions(-)
diff --git a/jena-geosparql/pom.xml b/jena-geosparql/pom.xml
index 1367f63de8..4b1bdee716 100644
--- a/jena-geosparql/pom.xml
+++ b/jena-geosparql/pom.xml
@@ -65,8 +65,8 @@
</dependency>
<dependency>
- <groupId>com.esotericsoftware</groupId>
- <artifactId>kryo-shaded</artifactId>
+ <groupId>com.esotericsoftware.kryo</groupId>
+ <artifactId>kryo5</artifactId>
</dependency>
<!-- Non-free; testing only -->
diff --git
a/jena-geosparql/src/main/java/org/apache/jena/geosparql/kryo/EnvelopeSerializer.java
b/jena-geosparql/src/main/java/org/apache/jena/geosparql/kryo/EnvelopeSerializer.java
index eaeec35e14..c3bdc571fa 100644
---
a/jena-geosparql/src/main/java/org/apache/jena/geosparql/kryo/EnvelopeSerializer.java
+++
b/jena-geosparql/src/main/java/org/apache/jena/geosparql/kryo/EnvelopeSerializer.java
@@ -20,10 +20,10 @@ package org.apache.jena.geosparql.kryo;
import org.locationtech.jts.geom.Envelope;
-import com.esotericsoftware.kryo.Kryo;
-import com.esotericsoftware.kryo.Serializer;
-import com.esotericsoftware.kryo.io.Input;
-import com.esotericsoftware.kryo.io.Output;
+import com.esotericsoftware.kryo.kryo5.Kryo;
+import com.esotericsoftware.kryo.kryo5.Serializer;
+import com.esotericsoftware.kryo.kryo5.io.Input;
+import com.esotericsoftware.kryo.kryo5.io.Output;
public class EnvelopeSerializer extends Serializer<Envelope> {
@Override
@@ -35,7 +35,7 @@ public class EnvelopeSerializer extends Serializer<Envelope> {
}
@Override
- public Envelope read(Kryo kryo, Input input, Class<Envelope> type) {
+ public Envelope read(Kryo kryo, Input input, Class<? extends Envelope>
type) {
double xMin = input.readDouble();
double xMax = input.readDouble();
double yMin = input.readDouble();
diff --git
a/jena-geosparql/src/main/java/org/apache/jena/geosparql/kryo/GeometrySerializerJtsWkb.java
b/jena-geosparql/src/main/java/org/apache/jena/geosparql/kryo/GeometrySerializerJtsWkb.java
index 00d66ae7ba..bc5b0dccc3 100644
---
a/jena-geosparql/src/main/java/org/apache/jena/geosparql/kryo/GeometrySerializerJtsWkb.java
+++
b/jena-geosparql/src/main/java/org/apache/jena/geosparql/kryo/GeometrySerializerJtsWkb.java
@@ -23,10 +23,10 @@ import org.locationtech.jts.io.ParseException;
import org.locationtech.jts.io.WKBReader;
import org.locationtech.jts.io.WKBWriter;
-import com.esotericsoftware.kryo.Kryo;
-import com.esotericsoftware.kryo.Serializer;
-import com.esotericsoftware.kryo.io.Input;
-import com.esotericsoftware.kryo.io.Output;
+import com.esotericsoftware.kryo.kryo5.Kryo;
+import com.esotericsoftware.kryo.kryo5.Serializer;
+import com.esotericsoftware.kryo.kryo5.io.Input;
+import com.esotericsoftware.kryo.kryo5.io.Output;
/** Geometry de-/serialization via the WKB facilities of JTS. */
public class GeometrySerializerJtsWkb
@@ -57,7 +57,7 @@ public class GeometrySerializerJtsWkb
}
@Override
- public Geometry read(Kryo kryo, Input input, Class<Geometry> type) {
+ public Geometry read(Kryo kryo, Input input, Class<? extends Geometry>
type) {
byte[] bytes = kryo.readObject(input, byte[].class);
Geometry geometry;
try {
diff --git
a/jena-geosparql/src/main/java/org/apache/jena/geosparql/kryo/NodeSerializer.java
b/jena-geosparql/src/main/java/org/apache/jena/geosparql/kryo/NodeSerializer.java
index 74f950d73e..db3b8bfffb 100644
---
a/jena-geosparql/src/main/java/org/apache/jena/geosparql/kryo/NodeSerializer.java
+++
b/jena-geosparql/src/main/java/org/apache/jena/geosparql/kryo/NodeSerializer.java
@@ -43,10 +43,10 @@ import org.apache.jena.vocabulary.RDF;
import org.apache.jena.vocabulary.RDFS;
import org.apache.jena.vocabulary.XSD;
-import com.esotericsoftware.kryo.Kryo;
-import com.esotericsoftware.kryo.Serializer;
-import com.esotericsoftware.kryo.io.Input;
-import com.esotericsoftware.kryo.io.Output;
+import com.esotericsoftware.kryo.kryo5.Kryo;
+import com.esotericsoftware.kryo.kryo5.Serializer;
+import com.esotericsoftware.kryo.kryo5.io.Input;
+import com.esotericsoftware.kryo.kryo5.io.Output;
/**
* An RDF 1.2 node serializer for kryo.
@@ -262,7 +262,7 @@ public class NodeSerializer
}
@Override
- public Node read(Kryo kryo, Input input, Class<Node> cls) {
+ public Node read(Kryo kryo, Input input, Class<? extends Node> cls) {
Node result;
String v1, v2;
Triple t;
diff --git
a/jena-geosparql/src/main/java/org/apache/jena/geosparql/kryo/TripleSerializer.java
b/jena-geosparql/src/main/java/org/apache/jena/geosparql/kryo/TripleSerializer.java
index d4582211d8..860514aa45 100644
---
a/jena-geosparql/src/main/java/org/apache/jena/geosparql/kryo/TripleSerializer.java
+++
b/jena-geosparql/src/main/java/org/apache/jena/geosparql/kryo/TripleSerializer.java
@@ -20,10 +20,10 @@ package org.apache.jena.geosparql.kryo;
import org.apache.jena.graph.Node;
import org.apache.jena.graph.Triple;
-import com.esotericsoftware.kryo.Kryo;
-import com.esotericsoftware.kryo.Serializer;
-import com.esotericsoftware.kryo.io.Input;
-import com.esotericsoftware.kryo.io.Output;
+import com.esotericsoftware.kryo.kryo5.Kryo;
+import com.esotericsoftware.kryo.kryo5.Serializer;
+import com.esotericsoftware.kryo.kryo5.io.Input;
+import com.esotericsoftware.kryo.kryo5.io.Output;
/** Kryo serializer for {@link Triple}. Depends on registered {@link Node}
serializers. */
public class TripleSerializer extends Serializer<Triple> {
@@ -35,7 +35,7 @@ public class TripleSerializer extends Serializer<Triple> {
}
@Override
- public Triple read(Kryo kryo, Input input, Class<Triple> objClass) {
+ public Triple read(Kryo kryo, Input input, Class<? extends Triple>
objClass) {
Node s = (Node)kryo.readClassAndObject(input);
Node p = (Node)kryo.readClassAndObject(input);
Node o = (Node)kryo.readClassAndObject(input);
diff --git
a/jena-geosparql/src/main/java/org/apache/jena/geosparql/spatial/index/v2/KryoRegistratorSpatialIndexV2.java
b/jena-geosparql/src/main/java/org/apache/jena/geosparql/spatial/index/v2/KryoRegistratorSpatialIndexV2.java
index a11738f4af..77d82d0ade 100644
---
a/jena-geosparql/src/main/java/org/apache/jena/geosparql/spatial/index/v2/KryoRegistratorSpatialIndexV2.java
+++
b/jena-geosparql/src/main/java/org/apache/jena/geosparql/spatial/index/v2/KryoRegistratorSpatialIndexV2.java
@@ -20,6 +20,7 @@ package org.apache.jena.geosparql.spatial.index.v2;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
import org.apache.jena.geosparql.kryo.EnvelopeSerializer;
import org.apache.jena.geosparql.kryo.NodeSerializer;
@@ -40,9 +41,9 @@ import org.locationtech.jts.index.strtree.STRtreeSerializer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.esotericsoftware.kryo.Kryo;
-import com.esotericsoftware.kryo.Serializer;
-import com.esotericsoftware.kryo.serializers.MapSerializer;
+import com.esotericsoftware.kryo.kryo5.Kryo;
+import com.esotericsoftware.kryo.kryo5.Serializer;
+import com.esotericsoftware.kryo.kryo5.serializers.MapSerializer;
/**
* The class is used to configure the kryo serialization
@@ -58,10 +59,10 @@ public class KryoRegistratorSpatialIndexV2 {
LOGGER.debug("Registering kryo serializers for spatial index v2.");
// Java
- Serializer<?> mapSerializer = new MapSerializer();
+ Serializer<?> mapSerializer = new MapSerializer<>();
kryo.register(Map.class, mapSerializer);
kryo.register(HashMap.class, mapSerializer);
- kryo.register(LinkedHashMap.class, mapSerializer);
+ kryo.register(ConcurrentHashMap.class, mapSerializer);
// Jena
NodeSerializer.register(kryo);
diff --git
a/jena-geosparql/src/main/java/org/apache/jena/geosparql/spatial/index/v2/STRtreePerGraphSerializer.java
b/jena-geosparql/src/main/java/org/apache/jena/geosparql/spatial/index/v2/STRtreePerGraphSerializer.java
index 38ba56c7ee..db7840f0c2 100644
---
a/jena-geosparql/src/main/java/org/apache/jena/geosparql/spatial/index/v2/STRtreePerGraphSerializer.java
+++
b/jena-geosparql/src/main/java/org/apache/jena/geosparql/spatial/index/v2/STRtreePerGraphSerializer.java
@@ -22,10 +22,10 @@ import java.util.Map;
import org.apache.jena.graph.Node;
import org.locationtech.jts.index.strtree.STRtree;
-import com.esotericsoftware.kryo.Kryo;
-import com.esotericsoftware.kryo.Serializer;
-import com.esotericsoftware.kryo.io.Input;
-import com.esotericsoftware.kryo.io.Output;
+import com.esotericsoftware.kryo.kryo5.Kryo;
+import com.esotericsoftware.kryo.kryo5.Serializer;
+import com.esotericsoftware.kryo.kryo5.io.Input;
+import com.esotericsoftware.kryo.kryo5.io.Output;
public class STRtreePerGraphSerializer
extends Serializer<STRtreePerGraph>
@@ -37,7 +37,7 @@ public class STRtreePerGraphSerializer
}
@Override
- public STRtreePerGraph read(Kryo kryo, Input input, Class<STRtreePerGraph>
type) {
+ public STRtreePerGraph read(Kryo kryo, Input input, Class<? extends
STRtreePerGraph> type) {
boolean isBuilt = input.readBoolean();
@SuppressWarnings("unchecked")
Map<Node, STRtree> treeMap = (Map<Node,
STRtree>)kryo.readClassAndObject(input);
diff --git
a/jena-geosparql/src/main/java/org/apache/jena/geosparql/spatial/index/v2/STRtreeUtils.java
b/jena-geosparql/src/main/java/org/apache/jena/geosparql/spatial/index/v2/STRtreeUtils.java
index d43bcb8c86..22fb3ce948 100644
---
a/jena-geosparql/src/main/java/org/apache/jena/geosparql/spatial/index/v2/STRtreeUtils.java
+++
b/jena-geosparql/src/main/java/org/apache/jena/geosparql/spatial/index/v2/STRtreeUtils.java
@@ -22,6 +22,7 @@ import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
import org.apache.jena.atlas.iterator.Iter;
import org.apache.jena.atlas.iterator.IteratorCloseable;
@@ -54,7 +55,7 @@ public class STRtreeUtils {
// XXX This method overlaps function-wise with SpatialIndexerComputation.
Consolidate?
public static STRtreePerGraph buildSpatialIndexTree(DatasetGraph
datasetGraph, String srsURI) throws SpatialIndexException {
- Map<Node, STRtree> treeMap = new LinkedHashMap<>();
+ Map<Node, STRtree> treeMap = new ConcurrentHashMap<>();
// Process default graph.
// LOGGER.info("building spatial index for default graph ...");
diff --git
a/jena-geosparql/src/main/java/org/apache/jena/geosparql/spatial/index/v2/SpatialIndexIoKryo.java
b/jena-geosparql/src/main/java/org/apache/jena/geosparql/spatial/index/v2/SpatialIndexIoKryo.java
index 834c1cc8a6..b2190d7a8a 100644
---
a/jena-geosparql/src/main/java/org/apache/jena/geosparql/spatial/index/v2/SpatialIndexIoKryo.java
+++
b/jena-geosparql/src/main/java/org/apache/jena/geosparql/spatial/index/v2/SpatialIndexIoKryo.java
@@ -24,6 +24,7 @@ import java.lang.reflect.InvocationTargetException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Objects;
+import java.util.Set;
import org.apache.jena.atlas.RuntimeIOException;
import org.apache.jena.atlas.io.IOX;
@@ -37,10 +38,10 @@ import org.locationtech.jts.geom.Geometry;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.esotericsoftware.kryo.Kryo;
-import com.esotericsoftware.kryo.Serializer;
-import com.esotericsoftware.kryo.io.Input;
-import com.esotericsoftware.kryo.io.Output;
+import com.esotericsoftware.kryo.kryo5.Kryo;
+import com.esotericsoftware.kryo.kryo5.Serializer;
+import com.esotericsoftware.kryo.kryo5.io.Input;
+import com.esotericsoftware.kryo.kryo5.io.Output;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
@@ -51,6 +52,12 @@ public class SpatialIndexIoKryo {
// The current version of the index only stores the envelopes so this
feature is not needed.
private static boolean enableGeometrySerde = false;
+ /** Kryo4-based serialization is now obsolete. */
+ private static final Set<String> OBSOLETE_VERSIONS = Set.of("2.0.0");
+
+ /** The version of the index that is created by this class. */
+ public static final String VERSION = "3.0.0";
+
public static SpatialIndex loadOrBuildSpatialIndex(Dataset dataset, Path
spatialIndexFile) throws SpatialIndexException {
SpatialIndex spatialIndex = loadOrBuildSpatialIndex(dataset, null,
spatialIndexFile);
return spatialIndex;
@@ -149,7 +156,7 @@ public class SpatialIndexIoKryo {
public static void writeToOutputStream(OutputStream os,
SpatialIndexPerGraph index) {
SpatialIndexHeader header = new SpatialIndexHeader();
header.setType(SpatialIndexHeader.TYPE_VALUE);
- header.setVersion("2.0.0");
+ header.setVersion(VERSION);
header.setSrsUri(index.getSrsInfo().getSrsURI());
GeometrySerializerJtsWkb geometrySerializer = null;
@@ -207,8 +214,12 @@ public class SpatialIndexIoKryo {
}
String version = header.getVersion();
- if (!"2.0.0".equals(version)) {
- throw new SpatialIndexException("The version of the spatial
index does not match the version of this loader class.");
+ if (!VERSION.equals(version)) {
+ if (OBSOLETE_VERSIONS.contains(version)) {
+ throw new SpatialIndexException("Spatial index version " +
version + " is no longer supported. Move or delete this file to allow for
creation of a new index in its place: " + spatialIndexFile);
+ } else {
+ throw new SpatialIndexException("Spatial index version " +
version + " is not supported (expected version: " + VERSION + "). Offending
file: " + spatialIndexFile);
+ }
}
srsUri = header.getSrsUri();
diff --git
a/jena-geosparql/src/main/java/org/locationtech/jts/index/strtree/STRtreeSerializer.java
b/jena-geosparql/src/main/java/org/locationtech/jts/index/strtree/STRtreeSerializer.java
index 127a2f8e9c..121568b738 100644
---
a/jena-geosparql/src/main/java/org/locationtech/jts/index/strtree/STRtreeSerializer.java
+++
b/jena-geosparql/src/main/java/org/locationtech/jts/index/strtree/STRtreeSerializer.java
@@ -23,10 +23,10 @@ import java.util.List;
import org.locationtech.jts.geom.Envelope;
-import com.esotericsoftware.kryo.Kryo;
-import com.esotericsoftware.kryo.Serializer;
-import com.esotericsoftware.kryo.io.Input;
-import com.esotericsoftware.kryo.io.Output;
+import com.esotericsoftware.kryo.kryo5.Kryo;
+import com.esotericsoftware.kryo.kryo5.Serializer;
+import com.esotericsoftware.kryo.kryo5.io.Input;
+import com.esotericsoftware.kryo.kryo5.io.Output;
/*
* This file is an adapted copy of
org.locationtech.jts.index.strtree.IndexSerde from
@@ -53,7 +53,7 @@ public class STRtreeSerializer
extends Serializer<STRtree>
{
@Override
- public STRtree read(Kryo kryo, Input input, Class<STRtree> type) {
+ public STRtree read(Kryo kryo, Input input, Class<? extends STRtree> type)
{
int nodeCapacity = input.readInt();
boolean notEmpty = (input.readByte() & 0x01) == 1;
if (notEmpty) {
diff --git
a/jena-geosparql/src/test/java/org/apache/jena/geosparql/spatial/index/v2/SimpleGraphSerializer.java
b/jena-geosparql/src/test/java/org/apache/jena/geosparql/spatial/index/v2/SimpleGraphSerializer.java
index 8235ad3020..7addfc5df1 100644
---
a/jena-geosparql/src/test/java/org/apache/jena/geosparql/spatial/index/v2/SimpleGraphSerializer.java
+++
b/jena-geosparql/src/test/java/org/apache/jena/geosparql/spatial/index/v2/SimpleGraphSerializer.java
@@ -22,10 +22,10 @@ import org.apache.jena.graph.Triple;
import org.apache.jena.sparql.graph.GraphFactory;
import org.apache.jena.util.iterator.ExtendedIterator;
-import com.esotericsoftware.kryo.Kryo;
-import com.esotericsoftware.kryo.Serializer;
-import com.esotericsoftware.kryo.io.Input;
-import com.esotericsoftware.kryo.io.Output;
+import com.esotericsoftware.kryo.kryo5.Kryo;
+import com.esotericsoftware.kryo.kryo5.Serializer;
+import com.esotericsoftware.kryo.kryo5.io.Input;
+import com.esotericsoftware.kryo.kryo5.io.Output;
/** Only used for testing Node_Graph serialization. */
public class SimpleGraphSerializer
@@ -43,7 +43,7 @@ public class SimpleGraphSerializer
}
@Override
- public Graph read(Kryo kryo, Input input, Class<Graph> type) {
+ public Graph read(Kryo kryo, Input input, Class<? extends Graph> type) {
Graph result = GraphFactory.createDefaultGraph();
for (;;) {
Triple t = kryo.readObjectOrNull(input, Triple.class);
diff --git
a/jena-geosparql/src/test/java/org/apache/jena/geosparql/spatial/index/v2/TestNodeSerializer.java
b/jena-geosparql/src/test/java/org/apache/jena/geosparql/spatial/index/v2/TestNodeSerializer.java
index 69b546540c..eacf583c68 100644
---
a/jena-geosparql/src/test/java/org/apache/jena/geosparql/spatial/index/v2/TestNodeSerializer.java
+++
b/jena-geosparql/src/test/java/org/apache/jena/geosparql/spatial/index/v2/TestNodeSerializer.java
@@ -37,10 +37,10 @@ import org.apache.jena.vocabulary.RDF;
import org.junit.Assert;
import org.junit.Test;
-import com.esotericsoftware.kryo.Kryo;
-import com.esotericsoftware.kryo.Serializer;
-import com.esotericsoftware.kryo.io.Input;
-import com.esotericsoftware.kryo.io.Output;
+import com.esotericsoftware.kryo.kryo5.Kryo;
+import com.esotericsoftware.kryo.kryo5.Serializer;
+import com.esotericsoftware.kryo.kryo5.io.Input;
+import com.esotericsoftware.kryo.kryo5.io.Output;
public class TestNodeSerializer {
diff --git a/pom.xml b/pom.xml
index 940437f1cb..c17e0c48ef 100644
--- a/pom.xml
+++ b/pom.xml
@@ -113,7 +113,7 @@
<ver.org.openjdk.jmh>1.37</ver.org.openjdk.jmh>
<!-- GeoSPARQL related -->
- <ver.kryo>4.0.3</ver.kryo>
+ <ver.kryo>5.6.2</ver.kryo>
<ver.jaxb-api>2.3.1</ver.jaxb-api>
<ver.jakarta-xml-bind>4.0.4</ver.jakarta-xml-bind>
<ver.jcommander>1.82</ver.jcommander>
@@ -745,8 +745,8 @@
<!-- jena-geosparql, jena-fuseki-geosparql related -->
<dependency>
- <groupId>com.esotericsoftware</groupId>
- <artifactId>kryo-shaded</artifactId>
+ <groupId>com.esotericsoftware.kryo</groupId>
+ <artifactId>kryo5</artifactId>
<version>${ver.kryo}</version>
</dependency>