This is an automated email from the ASF dual-hosted git repository.

jlmonteiro pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/johnzon.git


The following commit(s) were added to refs/heads/master by this push:
     new d8357f8c JOHNZON-394 Make Johnzon JSON Pointer compatible by default
d8357f8c is described below

commit d8357f8c8b28b3ac563350f21c4fe472aee2b476
Author: Jean-Louis Monteiro <jlmonte...@tomitribe.com>
AuthorDate: Wed Jan 11 13:55:41 2023 +0100

    JOHNZON-394 Make Johnzon JSON Pointer compatible by default
    
    Signed-off-by: Jean-Louis Monteiro <jlmonte...@tomitribe.com>
---
 .../johnzon/core/DefaultJsonPointerFactory.java    | 38 -----------
 .../org/apache/johnzon/core/JsonPointerImpl.java   | 12 +---
 .../org/apache/johnzon/core/JsonProviderImpl.java  | 16 +----
 .../johnzon/core/spi/JsonPointerFactory.java       | 36 -----------
 .../org/apache/johnzon/core/JsonPointerTest.java   | 13 ----
 .../core}/StrictJsonPointerFactoryTest.java        | 11 ++--
 johnzon-jsonp-strict/pom.xml                       | 73 ----------------------
 .../jsonp/strict/StrictJsonPointerFactory.java     | 51 ---------------
 .../org.apache.johnzon.core.spi.JsonPointerFactory |  1 -
 pom.xml                                            |  1 -
 10 files changed, 9 insertions(+), 243 deletions(-)

diff --git 
a/johnzon-core/src/main/java/org/apache/johnzon/core/DefaultJsonPointerFactory.java
 
b/johnzon-core/src/main/java/org/apache/johnzon/core/DefaultJsonPointerFactory.java
deleted file mode 100644
index e2991345..00000000
--- 
a/johnzon-core/src/main/java/org/apache/johnzon/core/DefaultJsonPointerFactory.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.johnzon.core;
-
-import org.apache.johnzon.core.spi.JsonPointerFactory;
-
-import jakarta.json.JsonPointer;
-import jakarta.json.spi.JsonProvider;
-
-/**
- * This is not a standard factory but allows Johnzon to support an extended 
version of JSon Pointer.
- * By default, we support an extended usage of /- when used with 
replace/remove/get. But in the johnzon-jsonp-strict
- * module, it's overridden so we can pass the JSONP TCK in standalone 
environments or TomEE or else.
- */
-public class DefaultJsonPointerFactory implements JsonPointerFactory {
-
-    @Override
-    public JsonPointer createPointer(final JsonProvider provider, final String 
path) {
-        return new JsonPointerImpl(provider, path);
-    }
-
-}
diff --git 
a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonPointerImpl.java 
b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonPointerImpl.java
index b55ec8dc..57912d0b 100644
--- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonPointerImpl.java
+++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonPointerImpl.java
@@ -476,7 +476,7 @@ public class JsonPointerImpl implements JsonPointer {
             return jsonArray.size();
 
         } else if (!addOperation && referenceToken.equals("-")) {
-            final int arrayIndex = jsonArray.size() - minusShift();
+            final int arrayIndex = jsonArray.size();
             validateArraySize(referenceToken, jsonArray, arrayIndex, 
jsonArray.size());
             return arrayIndex;
         }
@@ -493,16 +493,6 @@ public class JsonPointerImpl implements JsonPointer {
         }
     }
 
-    /**
-     * This method can be overridden in sub classes.
-     * It's main goal is to support patch operation using "-" to replace, 
remove last element which is forbidden in JsonPointer
-     *
-     * @return the shift to apply on minus. For backward compatibility it's 1. 
We can have a strict JSONP compliancy with the dedicated module.
-     */
-    protected int minusShift() {
-        return 1;
-    }
-
     private void validateJsonPointer(JsonValue target, int size) throws 
NullPointerException, JsonException {
         if (target == null) {
             throw new NullPointerException("target must not be null");
diff --git 
a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonProviderImpl.java 
b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonProviderImpl.java
index 317dbbf5..dc664fe1 100644
--- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonProviderImpl.java
+++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonProviderImpl.java
@@ -18,8 +18,6 @@
  */
 package org.apache.johnzon.core;
 
-import org.apache.johnzon.core.spi.JsonPointerFactory;
-
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.io.Reader;
@@ -29,9 +27,7 @@ import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.util.Collection;
 import java.util.Map;
-import java.util.ServiceLoader;
 import java.util.function.Supplier;
-import java.util.stream.StreamSupport;
 
 import jakarta.json.JsonArray;
 import jakarta.json.JsonArrayBuilder;
@@ -56,8 +52,6 @@ import jakarta.json.stream.JsonGeneratorFactory;
 import jakarta.json.stream.JsonParser;
 import jakarta.json.stream.JsonParserFactory;
 
-import static java.util.Comparator.comparing;
-
 public class JsonProviderImpl extends JsonProvider implements Serializable {
     private final Supplier<BufferStrategy.BufferProvider<char[]>> 
bufferProvider = new Cached<>(() ->
         
BufferStrategyFactory.valueOf(System.getProperty(AbstractJsonFactory.BUFFER_STRATEGY,
 "QUEUE"))
@@ -69,14 +63,6 @@ public class JsonProviderImpl extends JsonProvider 
implements Serializable {
     private final JsonWriterFactory writerFactory = new 
JsonWriterFactoryImpl(null);
     private final Supplier<JsonBuilderFactory> builderFactory = new 
Cached<>(() ->
             new JsonBuilderFactoryImpl(null, bufferProvider.get(), 
RejectDuplicateKeysMode.DEFAULT));
-    private final JsonPointerFactory jsonPointerFactory;
-
-    public JsonProviderImpl() {
-        jsonPointerFactory = 
StreamSupport.stream(ServiceLoader.load(JsonPointerFactory.class).spliterator(),
 false)
-                .min(comparing(JsonPointerFactory::ordinal))
-                .orElseGet(DefaultJsonPointerFactory::new);
-    }
-
     @Override
     public JsonParser createParser(final InputStream in) {
         return parserFactory.createParser(in);
@@ -216,7 +202,7 @@ public class JsonProviderImpl extends JsonProvider 
implements Serializable {
 
     @Override
     public JsonPointer createPointer(String path) {
-        return jsonPointerFactory.createPointer(this, path);
+        return new JsonPointerImpl(this, path);
     }
 
     @Override
diff --git 
a/johnzon-core/src/main/java/org/apache/johnzon/core/spi/JsonPointerFactory.java
 
b/johnzon-core/src/main/java/org/apache/johnzon/core/spi/JsonPointerFactory.java
deleted file mode 100644
index 0b62f4ed..00000000
--- 
a/johnzon-core/src/main/java/org/apache/johnzon/core/spi/JsonPointerFactory.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.johnzon.core.spi;
-
-import jakarta.json.JsonPointer;
-import jakarta.json.spi.JsonProvider;
-
-/**
- * Factory to create JsonPointer instances. We have a default one in Johnzon, 
but the aim is tom being able to
- * override it in some edge cases. It uses a usual service loader mechanism to 
load and sort the factories using
- * the ordinal.
- */
-public interface JsonPointerFactory {
-
-    JsonPointer createPointer(JsonProvider provider, String path);
-
-    default int ordinal() {
-        return 0;
-    }
-}
diff --git 
a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonPointerTest.java 
b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonPointerTest.java
index 1c75e8c7..ca9e7049 100644
--- a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonPointerTest.java
+++ b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonPointerTest.java
@@ -506,19 +506,6 @@ public class JsonPointerTest {
         assertEquals("[[\"bar\",\"qux\",\"baz\",\"xyz\"]]", result.toString());
     }
 
-    @Test
-    public void testRemoveLastArrayElementSimpleWithPatch() {
-        JsonPointerImpl jsonPointer = new 
JsonPointerImpl(JsonProvider.provider(), "/-");
-        JsonStructure target = Json.createArrayBuilder()
-                                   .add("bar")
-                                   .add("qux")
-                                   .add("baz")
-                                   .build();
-
-        JsonStructure result = jsonPointer.remove(target);
-        assertEquals("[\"bar\",\"qux\"]", result.toString());
-    }
-
     @Test(expected = JsonException.class)
     public void testRemoveLastArrayElementFromEmptySimple() {
         final JsonPointerImpl jsonPointer = new 
JsonPointerImpl(JsonProvider.provider(), "/-");
diff --git 
a/johnzon-jsonp-strict/src/test/java/org/apache/johnzon/jsonp/strict/StrictJsonPointerFactoryTest.java
 
b/johnzon-core/src/test/java/org/apache/johnzon/core/StrictJsonPointerFactoryTest.java
similarity index 94%
rename from 
johnzon-jsonp-strict/src/test/java/org/apache/johnzon/jsonp/strict/StrictJsonPointerFactoryTest.java
rename to 
johnzon-core/src/test/java/org/apache/johnzon/core/StrictJsonPointerFactoryTest.java
index 37feedb2..a3e5597d 100644
--- 
a/johnzon-jsonp-strict/src/test/java/org/apache/johnzon/jsonp/strict/StrictJsonPointerFactoryTest.java
+++ 
b/johnzon-core/src/test/java/org/apache/johnzon/core/StrictJsonPointerFactoryTest.java
@@ -16,19 +16,22 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.johnzon.jsonp.strict;
-
-import org.apache.johnzon.core.JsonPointerImpl;
-import org.junit.Test;
+package org.apache.johnzon.core;
 
 import jakarta.json.Json;
 import jakarta.json.JsonException;
 import jakarta.json.JsonPointer;
 import jakarta.json.JsonStructure;
 import jakarta.json.spi.JsonProvider;
+import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
 
+/**
+ * This test class was originally located in the johnzon-jsonp-strict module 
to bring full JSON Pointer
+ * compatibility. Since in version 2.0 it's the default in Johnzon to be 
compliant, this test migrated to core
+ * as it does provide some interesting code coverage
+ */
 public class StrictJsonPointerFactoryTest {
     @Test
     public void validMinusUsage() {
diff --git a/johnzon-jsonp-strict/pom.xml b/johnzon-jsonp-strict/pom.xml
deleted file mode 100644
index 10b11d36..00000000
--- a/johnzon-jsonp-strict/pom.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing,
-    software distributed under the License is distributed on an
-    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-    KIND, either express or implied.  See the License for the
-    specific language governing permissions and limitations
-    under the License.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; xsi:schemaLocation=" 
http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd";>
-  <parent>
-    <artifactId>johnzon</artifactId>
-    <groupId>org.apache.johnzon</groupId>
-    <version>2.0.0-SNAPSHOT</version>
-  </parent>
-  <modelVersion>4.0.0</modelVersion>
-
-  <artifactId>johnzon-jsonp-strict</artifactId>
-  <name>Johnzon :: JSON-P Strict JSON Pointer Implementation (spec 
compliant)</name>
-  <packaging>bundle</packaging>
-
-  <properties>
-    
<staging.directory>${project.parent.reporting.outputDirectory}</staging.directory>
-  </properties>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.johnzon</groupId>
-      <artifactId>johnzon-core</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-shade-plugin</artifactId>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.felix</groupId>
-        <artifactId>maven-bundle-plugin</artifactId>
-        <configuration>
-          <instructions>
-            <Import-Package>
-              *
-            </Import-Package>
-            <Require-Capability>
-              
osgi.extender;filter:="(osgi.extender=osgi.serviceloader.registrar)"
-            </Require-Capability>
-            <_contract>
-              !JavaAnnotation,
-              !JavaCDI,
-              !JavaJAXRS,
-              JavaJSONP
-            </_contract>
-            
<Provide-Capability>osgi.serviceloader;osgi.serviceloader=org.apache.johnzon.core.spi.JsonPointerFactory</Provide-Capability>
-          </instructions>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-</project>
diff --git 
a/johnzon-jsonp-strict/src/main/java/org/apache/johnzon/jsonp/strict/StrictJsonPointerFactory.java
 
b/johnzon-jsonp-strict/src/main/java/org/apache/johnzon/jsonp/strict/StrictJsonPointerFactory.java
deleted file mode 100644
index f9b11f2d..00000000
--- 
a/johnzon-jsonp-strict/src/main/java/org/apache/johnzon/jsonp/strict/StrictJsonPointerFactory.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.johnzon.jsonp.strict;
-
-import org.apache.johnzon.core.JsonPointerImpl;
-import org.apache.johnzon.core.spi.JsonPointerFactory;
-
-import jakarta.json.JsonPointer;
-import jakarta.json.spi.JsonProvider;
-
-/**
- * This aims at replacing the {@link 
org.apache.johnzon.core.DefaultJsonPointerFactory} in order to force Johnzon
- * to comply with the specification and pass the TCK.
- */
-public class StrictJsonPointerFactory implements JsonPointerFactory {
-
-    @Override
-    public JsonPointer createPointer(final JsonProvider provider, final String 
path) {
-        return new StrictJsonPointerImpl(provider, path);
-    }
-
-    /**
-     * This overrides the default shift and puts Johnzon into a standard 
behavior to pass the TCK
-     */
-    private static class StrictJsonPointerImpl extends JsonPointerImpl {
-        public StrictJsonPointerImpl(final JsonProvider provider, final String 
path) {
-            super(provider, path);
-        }
-
-        protected int minusShift() {
-            return 0;
-        }
-    }
-
-}
diff --git 
a/johnzon-jsonp-strict/src/main/resources/META-INF/services/org.apache.johnzon.core.spi.JsonPointerFactory
 
b/johnzon-jsonp-strict/src/main/resources/META-INF/services/org.apache.johnzon.core.spi.JsonPointerFactory
deleted file mode 100644
index 088626a7..00000000
--- 
a/johnzon-jsonp-strict/src/main/resources/META-INF/services/org.apache.johnzon.core.spi.JsonPointerFactory
+++ /dev/null
@@ -1 +0,0 @@
-org.apache.johnzon.jsonp.strict.StrictJsonPointerFactory
diff --git a/pom.xml b/pom.xml
index 9ef2aa96..521f2d10 100644
--- a/pom.xml
+++ b/pom.xml
@@ -68,7 +68,6 @@
     <module>johnzon-jsonschema</module>
     <module>johnzon-osgi</module>
     <module>johnzon-jsonlogic</module>
-    <module>johnzon-jsonp-strict</module>
   </modules>
 
   <dependencyManagement>

Reply via email to