diff --git a/core/src/main/java/com/datastax/dse/driver/internal/core/data/geometry/DefaultGeometry.java b/core/src/main/java/com/datastax/dse/driver/internal/core/data/geometry/DefaultGeometry.java
index 885d9bd48b7..9b1148dff69 100644
--- a/core/src/main/java/com/datastax/dse/driver/internal/core/data/geometry/DefaultGeometry.java
+++ b/core/src/main/java/com/datastax/dse/driver/internal/core/data/geometry/DefaultGeometry.java
@@ -176,7 +176,7 @@ public boolean equals(Object o) {
return false;
}
DefaultGeometry that = (DefaultGeometry) o;
- return this.getOgcGeometry().equals(that.getOgcGeometry());
+ return this.getOgcGeometry().equals((Object) that.getOgcGeometry());
}
@Override
diff --git a/core/src/test/java/com/datastax/dse/driver/internal/core/data/geometry/DefaultLineStringTest.java b/core/src/test/java/com/datastax/dse/driver/internal/core/data/geometry/DefaultLineStringTest.java
index 38dc84549c4..4bbaa629d60 100644
--- a/core/src/test/java/com/datastax/dse/driver/internal/core/data/geometry/DefaultLineStringTest.java
+++ b/core/src/test/java/com/datastax/dse/driver/internal/core/data/geometry/DefaultLineStringTest.java
@@ -22,7 +22,11 @@
import com.datastax.dse.driver.api.core.data.geometry.LineString;
import com.datastax.dse.driver.api.core.data.geometry.Point;
+import com.datastax.oss.driver.shaded.guava.common.collect.Streams;
import com.esri.core.geometry.ogc.OGCLineString;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import org.junit.Test;
@@ -101,8 +105,25 @@ public void should_parse_valid_geo_json() {
}
@Test
- public void should_convert_to_geo_json() {
- assertThat(lineString.asGeoJson()).isEqualTo(json);
+ public void should_convert_to_geo_json() throws Exception {
+
+ ObjectMapper mapper = new ObjectMapper();
+ JsonNode root = mapper.readTree(lineString.asGeoJson());
+ assertThat(root.get("type").toString()).isEqualTo("\"LineString\"");
+
+ double expected[][] = {{30.0, 10.0}, {10.0, 30.0}, {40.0, 40.0}};
+ JsonNode coordinatesNode = root.get("coordinates");
+ assertThat(coordinatesNode.isArray()).isTrue();
+ ArrayNode coordinatesArray = (ArrayNode) coordinatesNode;
+ assertThat(coordinatesArray.size()).isEqualTo(3);
+ for (int i = 0; i < expected.length; ++i) {
+
+ JsonNode elemNode = coordinatesArray.get(i);
+ assertThat(elemNode.isArray()).isTrue();
+ ArrayNode elemArray = (ArrayNode) elemNode;
+ double[] arr = Streams.stream(elemArray.elements()).mapToDouble(JsonNode::asDouble).toArray();
+ assertThat(arr).isEqualTo(expected[i]);
+ }
}
@Test
diff --git a/core/src/test/java/com/datastax/dse/driver/internal/core/data/geometry/DefaultPointTest.java b/core/src/test/java/com/datastax/dse/driver/internal/core/data/geometry/DefaultPointTest.java
index 1e3a7366741..d4d867d8bc3 100644
--- a/core/src/test/java/com/datastax/dse/driver/internal/core/data/geometry/DefaultPointTest.java
+++ b/core/src/test/java/com/datastax/dse/driver/internal/core/data/geometry/DefaultPointTest.java
@@ -21,7 +21,11 @@
import static org.assertj.core.api.Fail.fail;
import com.datastax.dse.driver.api.core.data.geometry.Point;
+import com.datastax.oss.driver.shaded.guava.common.collect.Streams;
import com.esri.core.geometry.ogc.OGCPoint;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import org.junit.Test;
@@ -83,8 +87,19 @@ public void should_parse_valid_geo_json() {
}
@Test
- public void should_convert_to_geo_json() {
- assertThat(point.asGeoJson()).isEqualTo(json);
+ public void should_convert_to_geo_json() throws Exception {
+
+ ObjectMapper mapper = new ObjectMapper();
+ JsonNode root = mapper.readTree(point.asGeoJson());
+ assertThat(root.get("type").toString()).isEqualTo("\"Point\"");
+
+ double expected[] = {1.1, 2.2};
+ JsonNode coordinatesNode = root.get("coordinates");
+ assertThat(coordinatesNode.isArray()).isTrue();
+ ArrayNode coordinatesArray = (ArrayNode) coordinatesNode;
+ double[] arr =
+ Streams.stream(coordinatesArray.elements()).mapToDouble(JsonNode::asDouble).toArray();
+ assertThat(arr).isEqualTo(expected);
}
@Test
diff --git a/core/src/test/java/com/datastax/dse/driver/internal/core/data/geometry/DefaultPolygonTest.java b/core/src/test/java/com/datastax/dse/driver/internal/core/data/geometry/DefaultPolygonTest.java
index d86e9cdc269..20795074806 100644
--- a/core/src/test/java/com/datastax/dse/driver/internal/core/data/geometry/DefaultPolygonTest.java
+++ b/core/src/test/java/com/datastax/dse/driver/internal/core/data/geometry/DefaultPolygonTest.java
@@ -23,7 +23,11 @@
import com.datastax.dse.driver.api.core.data.geometry.LineString;
import com.datastax.dse.driver.api.core.data.geometry.Point;
import com.datastax.dse.driver.api.core.data.geometry.Polygon;
+import com.datastax.oss.driver.shaded.guava.common.collect.Streams;
import com.esri.core.geometry.ogc.OGCPolygon;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import org.junit.Test;
@@ -109,8 +113,43 @@ public void should_parse_valid_geo_json() {
}
@Test
- public void should_convert_to_geo_json() {
- assertThat(polygon.asGeoJson()).isEqualTo(json);
+ public void should_convert_to_geo_json() throws Exception {
+
+ ObjectMapper mapper = new ObjectMapper();
+ JsonNode root = mapper.readTree(polygon.asGeoJson());
+ assertThat(root.get("type").toString()).isEqualTo("\"Polygon\"");
+
+ /*
+ Note that the order of values in expected differs from the order of insertion when creating
+ the Polygon. OGC expects the "exterior" ring of the polygon to be listed in counter-clockwise
+ order... and that's what this sequence represents (draw it out on a graph if you don't believe me).
+
+ Weirdly this is the opposite of the order used for this test when we were using ESRI 1.2.1.
+ That fact (combined with the fact that only ESRI classes are used for serialization here) makes me
+ think that the earlier version was just doing it wrong... or at least doing it in a way that
+ didn't agree with the spec. Either way it is clearly correct that we should go counter-clockwise...
+ so that's what we're doing.
+ */
+ double expected[][] = {{30.0, 10.0}, {40.0, 40.0}, {20.0, 40.0}, {10.0, 20.0}, {30.0, 10.0}};
+ JsonNode coordinatesNode = root.get("coordinates");
+ assertThat(coordinatesNode.isArray()).isTrue();
+ ArrayNode coordinatesArray = (ArrayNode) coordinatesNode;
+
+ // There's an extra layer here, presumably indicating the bounds of the polygon
+ assertThat(coordinatesArray.size()).isEqualTo(1);
+ JsonNode polygonNode = coordinatesArray.get(0);
+ assertThat(polygonNode.isArray()).isTrue();
+ ArrayNode polygonArray = (ArrayNode) polygonNode;
+
+ assertThat(polygonArray.size()).isEqualTo(5);
+ for (int i = 0; i < expected.length; ++i) {
+
+ JsonNode elemNode = polygonArray.get(i);
+ assertThat(elemNode.isArray()).isTrue();
+ ArrayNode elemArray = (ArrayNode) elemNode;
+ double[] arr = Streams.stream(elemArray.elements()).mapToDouble(JsonNode::asDouble).toArray();
+ assertThat(arr).isEqualTo(expected[i]);
+ }
}
@Test
diff --git a/core/src/test/java/com/datastax/dse/driver/internal/core/insights/PlatformInfoFinderTest.java b/core/src/test/java/com/datastax/dse/driver/internal/core/insights/PlatformInfoFinderTest.java
index 2a098363d46..470a19b51e3 100644
--- a/core/src/test/java/com/datastax/dse/driver/internal/core/insights/PlatformInfoFinderTest.java
+++ b/core/src/test/java/com/datastax/dse/driver/internal/core/insights/PlatformInfoFinderTest.java
@@ -82,7 +82,6 @@ public void should_find_dependencies_from_file() {
expected.put("com.github.jnr:jffi", withUnverifiedRuntimeVersion("1.2.16"));
expected.put("io.netty:netty-buffer", withUnverifiedRuntimeVersion("4.0.56.Final"));
expected.put("org.ow2.asm:asm-commons", withUnverifiedRuntimeVersion("5.0.3"));
- expected.put("org.json:json", withUnverifiedRuntimeVersion("20090211"));
expected.put("org.ow2.asm:asm-util", withUnverifiedRuntimeVersion("5.0.3"));
expected.put("com.github.jnr:jnr-ffi", withUnverifiedRuntimeVersion("2.1.7"));
@@ -91,7 +90,7 @@ public void should_find_dependencies_from_file() {
new PlatformInfoFinder(this::nullUrlProvider).fetchDependenciesFromFile(inputStream);
// then
- assertThat(stringStringMap).hasSize(28);
+ assertThat(stringStringMap).hasSize(27);
assertThat(stringStringMap).isEqualTo(expected);
}
diff --git a/core/src/test/resources/insights/test-dependencies.txt b/core/src/test/resources/insights/test-dependencies.txt
index e9186a35e6b..b780fe556b8 100644
--- a/core/src/test/resources/insights/test-dependencies.txt
+++ b/core/src/test/resources/insights/test-dependencies.txt
@@ -27,5 +27,4 @@ The following files have been resolved:
org.ow2.asm:asm-analysis:jar:5.0.3:compile
com.github.jnr:jnr-x86asm:jar:1.0.2:compile
io.netty:netty-codec:jar:4.0.56.Final:compile
- org.json:json:jar:20090211:compile
com.github.jnr:jffi:jar:native:1.2.16:runtime
\ No newline at end of file
diff --git a/osgi-tests/src/test/java/com/datastax/oss/driver/internal/osgi/support/BundleOptions.java b/osgi-tests/src/test/java/com/datastax/oss/driver/internal/osgi/support/BundleOptions.java
index 93cc7718b77..06dcb6559a0 100644
--- a/osgi-tests/src/test/java/com/datastax/oss/driver/internal/osgi/support/BundleOptions.java
+++ b/osgi-tests/src/test/java/com/datastax/oss/driver/internal/osgi/support/BundleOptions.java
@@ -191,11 +191,10 @@ public static CompositeOption esriBundles() {
CoreOptions.wrappedBundle(
mavenBundle("com.esri.geometry", "esri-geometry-api").versionAsInProject())
.exports("com.esri.core.geometry.*")
- .imports("org.json", "org.codehaus.jackson")
+ .imports("com.fasterxml.jackson.*", "com.fasterxml.jackson.databind.*")
.bundleSymbolicName("com.esri.core.geometry")
.overwriteManifest(WrappedUrlProvisionOption.OverwriteMode.FULL),
- mavenBundle("org.json", "json").versionAsInProject(),
- mavenBundle("org.codehaus.jackson", "jackson-core-asl").versionAsInProject(),
+ mavenBundle("com.fasterxml.jackson.core", "jackson-core").versionAsInProject(),
systemProperty("cassandra.geo").value("true"));
}
diff --git a/pom.xml b/pom.xml
index 511d2eb3098..eabfa85ce5b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -58,7 +58,7 @@
2.1.12
4.1.18
4.1.130.Final
- 1.2.1
+ 2.2.4
1.0.3
- 20230227
2.13.5
${jackson.version}
@@ -162,11 +161,6 @@
esri-geometry-api
${esri.version}
-
- org.json
- json
- ${json.version}
-
org.apache.tinkerpop
gremlin-core
diff --git a/upgrade_guide/README.md b/upgrade_guide/README.md
index 56d55aaab36..47f5be30746 100644
--- a/upgrade_guide/README.md
+++ b/upgrade_guide/README.md
@@ -19,6 +19,15 @@ under the License.
## Upgrade guide
+### 4.19.3
+
+#### Ordering of points in DefaultPolygon
+
+This version includes an update to the ESRI dependency which appears to be more strict about following the OGC
+requirement that points of a polygon should be returned in counter-clockwise order. It's possible that
+previous versions of the driver could have returned these points in a different order so if your application
+relies on the ordering of points in a polygon make sure to test this behaviour when upgrading.
+
### 4.18.1
#### Keystore reloading in DefaultSslEngineFactory