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>
 

Reply via email to