[johnzon] branch master updated: [JOHNZON-333] align both writePrimitives methods of MappingGeneratorImpl
This is an automated email from the ASF dual-hosted git repository. rmannibucau 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 f96fcea [JOHNZON-333] align both writePrimitives methods of MappingGeneratorImpl f96fcea is described below commit f96fceae0316cdf5f7cf406def46486d48c4805c Author: Romain Manni-Bucau AuthorDate: Tue Jan 26 08:56:04 2021 +0100 [JOHNZON-333] align both writePrimitives methods of MappingGeneratorImpl --- .../apache/johnzon/jsonb/DefaultMappingTest.java | 2 +- .../org/apache/johnzon/jsonb/JsonbWriteTest.java | 22 + .../java/org/apache/johnzon/mapper/Mapper.java | 37 ++ .../johnzon/mapper/MappingGeneratorImpl.java | 6 +++- 4 files changed, 37 insertions(+), 30 deletions(-) diff --git a/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/DefaultMappingTest.java b/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/DefaultMappingTest.java index c930b44..5c7f4e2 100644 --- a/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/DefaultMappingTest.java +++ b/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/DefaultMappingTest.java @@ -151,7 +151,7 @@ public class DefaultMappingTest { @Test public void simpleValues() { -assertEquals("\"\"strValue\"\"", JSONB.toJson("\"strValue\"")); +assertEquals("\"\\\"strValue\\\"\"", JSONB.toJson("\"strValue\"")); assertEquals("\"true\"", JSONB.toJson("true")); assertEquals("\"false\"", JSONB.toJson("false")); assertEquals("\"null\"", JSONB.toJson("null")); diff --git a/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/JsonbWriteTest.java b/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/JsonbWriteTest.java index 36b41a5..60fbfdb 100644 --- a/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/JsonbWriteTest.java +++ b/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/JsonbWriteTest.java @@ -23,6 +23,7 @@ import org.junit.Test; import javax.json.bind.Jsonb; import javax.json.bind.JsonbBuilder; import javax.json.bind.JsonbConfig; +import javax.json.bind.adapter.JsonbAdapter; import javax.json.bind.annotation.JsonbCreator; import javax.json.bind.annotation.JsonbDateFormat; import javax.json.bind.annotation.JsonbProperty; @@ -44,6 +45,27 @@ import static org.junit.Assert.assertEquals; public class JsonbWriteTest { @Test +public void rawAdapter() throws Exception { +try (final Jsonb jsonb = JsonbBuilder.create(new JsonbConfig() +.withAdapters(new JsonbAdapter() { +@Override +public String adaptToJson(final SimpleProperty obj) { +return obj.getValue(); +} + +@Override +public SimpleProperty adaptFromJson(final String obj) { +throw new UnsupportedOperationException(); +} +}))) { +final SimpleProperty property = new SimpleProperty(); +property.setValue("ok"); +final String json = jsonb.toJson(property, Throwable.class); +assertEquals("\"ok\"", json); +} +} + +@Test public void throwable() throws Exception { try (final Jsonb jsonb = JsonbBuilder.create(new JsonbConfig() .withPropertyOrderStrategy(PropertyOrderStrategy.LEXICOGRAPHICAL))){ diff --git a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mapper.java b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mapper.java index 775e7b6..3e7aaf7 100644 --- a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mapper.java +++ b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/Mapper.java @@ -168,45 +168,26 @@ public class Mapper implements Closeable { } public void writeObject(final Object object, final Writer stream) { -if (JsonValue.class.isInstance(object) -|| Boolean.class.isInstance(object) || String.class.isInstance(object) || Number.class.isInstance(object) -|| object == null) { -try { -final String valueOf = String.valueOf(object); -if (object instanceof String) { -stream.write('"'); -stream.write(valueOf); -stream.write('"'); -} else { -stream.write(valueOf); -} +if (object == null) { +try (final Writer w = stream) { +w.write("null"); } catch (final IOException e) { throw new MapperException(e); -} finally { -if (config.isClose()) { -try { -stream.close(); -} catch (final IOException e) { -// no-op -
[johnzon] branch master updated: JOHNZON-333 respect RFC 7159 Section 7 (Strings)
This is an automated email from the ASF dual-hosted git repository. struberg 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 b8529a3 JOHNZON-333 respect RFC 7159 Section 7 (Strings) b8529a3 is described below commit b8529a3b8c45c759ccdd3d9ae2f27d67a5bb2d87 Author: Mark Struberg AuthorDate: Mon Jan 25 22:44:26 2021 +0100 JOHNZON-333 respect RFC 7159 Section 7 (Strings) "test" as Java Object should result in a String "\"test\"". Because the quotes are part of the JSON notation of a string. This is nothing we may 'enforce' - this is clearly requrested by the JSON RFC. And the JSON-B Spec points to the RFC. --- .../apache/johnzon/jaxrs/ConfigurableJohnzonProvider.java | 4 .../johnzon/jaxrs/WildcardConfigurableJohnzonProvider.java | 4 .../main/java/org/apache/johnzon/jsonb/JohnzonBuilder.java | 3 --- .../java/org/apache/johnzon/jsonb/DefaultMappingTest.java | 14 +- .../src/main/java/org/apache/johnzon/mapper/Mapper.java| 8 +++- .../main/java/org/apache/johnzon/mapper/MapperBuilder.java | 12 +--- .../main/java/org/apache/johnzon/mapper/MapperConfig.java | 8 +--- .../java/org/apache/johnzon/mapper/MapperConfigTest.java | 2 +- .../test/java/org/apache/johnzon/mapper/MapperTest.java| 3 +-- .../src/test/java/org/superbiz/ExtendMappingTest.java | 2 +- 10 files changed, 21 insertions(+), 39 deletions(-) diff --git a/johnzon-jaxrs/src/main/java/org/apache/johnzon/jaxrs/ConfigurableJohnzonProvider.java b/johnzon-jaxrs/src/main/java/org/apache/johnzon/jaxrs/ConfigurableJohnzonProvider.java index edcf545..ab616cc 100644 --- a/johnzon-jaxrs/src/main/java/org/apache/johnzon/jaxrs/ConfigurableJohnzonProvider.java +++ b/johnzon-jaxrs/src/main/java/org/apache/johnzon/jaxrs/ConfigurableJohnzonProvider.java @@ -282,10 +282,6 @@ public class ConfigurableJohnzonProvider implements MessageBodyWriter, Mes builder.setReadAttributeBeforeWrite(rabw); } -public void setEnforceQuoteString(final boolean val) { -builder.setEnforceQuoteString(val); -} - public void setPrimitiveConverters(final boolean val) { builder.setPrimitiveConverters(val); } diff --git a/johnzon-jaxrs/src/main/java/org/apache/johnzon/jaxrs/WildcardConfigurableJohnzonProvider.java b/johnzon-jaxrs/src/main/java/org/apache/johnzon/jaxrs/WildcardConfigurableJohnzonProvider.java index 5fc52fa..e841125 100644 --- a/johnzon-jaxrs/src/main/java/org/apache/johnzon/jaxrs/WildcardConfigurableJohnzonProvider.java +++ b/johnzon-jaxrs/src/main/java/org/apache/johnzon/jaxrs/WildcardConfigurableJohnzonProvider.java @@ -222,10 +222,6 @@ public class WildcardConfigurableJohnzonProvider implements MessageBodyWriter builder.setEncoding(encoding); } -public void setEnforceQuoteString(final boolean val) { -builder.setEnforceQuoteString(val); -} - public void setPrimitiveConverters(final boolean val) { builder.setPrimitiveConverters(val); } diff --git a/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JohnzonBuilder.java b/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JohnzonBuilder.java index 0b749a4..d21bb18 100644 --- a/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JohnzonBuilder.java +++ b/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JohnzonBuilder.java @@ -164,9 +164,6 @@ public class JohnzonBuilder implements JsonbBuilder { .map(PropertyVisibilityStrategy.class::cast).orElse(new DefaultPropertyVisibilityStrategy()); config.getProperty("johnzon.attributeOrder").ifPresent(comp -> builder.setAttributeOrder(Comparator.class.cast(comp))); -config.getProperty("johnzon.enforceQuoteString") -.map(this::toBool) -.ifPresent(builder::setEnforceQuoteString); config.getProperty("johnzon.primitiveConverters") .map(this::toBool) .ifPresent(builder::setPrimitiveConverters); diff --git a/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/DefaultMappingTest.java b/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/DefaultMappingTest.java index f8738ef..c930b44 100644 --- a/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/DefaultMappingTest.java +++ b/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/DefaultMappingTest.java @@ -61,6 +61,7 @@ import static org.junit.Assert.fail; // taken from the examples of the spec // TODO: bunch of asserts //CHECKSTYLE:OFF + public class DefaultMappingTest { private static final Jsonb JSONB = JsonbBuilder.create(); @@ -150,11 +151,11 @@ public class DefaultMappingTest { @Test public void simpleValues() { -assertEquals("\"strValue\"", JSONB.toJson("\"strValue\"")); -assertEquals("true", JSONB.toJson("true")); -
[johnzon] 03/03: [JOHNZON-332] merge jsonb builder with new skipAccessModeWrapper toggle for consistency
This is an automated email from the ASF dual-hosted git repository. rmannibucau pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/johnzon.git commit 343c8318c0236a7fa04f308261c4a4b59cd60745 Author: Romain Manni-Bucau AuthorDate: Mon Jan 25 11:54:35 2021 +0100 [JOHNZON-332] merge jsonb builder with new skipAccessModeWrapper toggle for consistency --- .../org/apache/johnzon/jsonb/JohnzonBuilder.java | 41 ++ 1 file changed, 19 insertions(+), 22 deletions(-) diff --git a/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JohnzonBuilder.java b/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JohnzonBuilder.java index 52878dc..0b749a4 100644 --- a/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JohnzonBuilder.java +++ b/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JohnzonBuilder.java @@ -38,7 +38,6 @@ import org.apache.johnzon.mapper.ObjectConverter; import org.apache.johnzon.mapper.SerializeValueFilter; import org.apache.johnzon.mapper.access.AccessMode; import org.apache.johnzon.mapper.access.FieldAndMethodAccessMode; -import org.apache.johnzon.mapper.access.KnownNotOpenedJavaTypesAccessMode; import org.apache.johnzon.mapper.converter.LocaleConverter; import org.apache.johnzon.mapper.internal.AdapterKey; @@ -212,29 +211,27 @@ public class JohnzonBuilder implements JsonbBuilder { throw new IllegalArgumentException("Unsupported factory: " + val); }).orElseGet(() -> findFactory(skipCdi)); +ofNullable(config.getProperty("johnzon.skip-exception-serialization")) +.map(v -> Boolean.parseBoolean(String.valueOf(v))) +.ifPresent(builder::setSkipAccessModeWrapper); + final AccessMode accessMode = config.getProperty("johnzon.accessMode") .map(this::toAccessMode) -.orElseGet(() -> { -final AccessMode access = new JsonbAccessMode( -propertyNamingStrategy, orderValue, visibilityStrategy, - !namingStrategyValue.orElse("").equals(PropertyNamingStrategy.CASE_INSENSITIVE), -builder.getAdapters(), -factory, jsonp, builderFactorySupplier, parserFactoryProvider, -config.getProperty("johnzon.accessModeDelegate") -.map(this::toAccessMode) -.orElseGet(() -> new FieldAndMethodAccessMode(true, true, false, true)), - config.getProperty("johnzon.failOnMissingCreatorValues") -.map(this::toBool) -.orElse(true) /*spec 1.0 requirement*/, -isNillable, -config.getProperty("johnzon.supportsPrivateAccess") -.map(this::toBool) -.orElse(false)); -return ofNullable(config.getProperty("johnzon.enable-exception-serialization")) -.map(v -> Boolean.parseBoolean(String.valueOf(v))) -.map(it -> it ? new KnownNotOpenedJavaTypesAccessMode(access) : access) -.orElseGet(() -> new KnownNotOpenedJavaTypesAccessMode(access)); -}); +.orElseGet(() -> new JsonbAccessMode( +propertyNamingStrategy, orderValue, visibilityStrategy, + !namingStrategyValue.orElse("").equals(PropertyNamingStrategy.CASE_INSENSITIVE), +builder.getAdapters(), +factory, jsonp, builderFactorySupplier, parserFactoryProvider, +config.getProperty("johnzon.accessModeDelegate") +.map(this::toAccessMode) +.orElseGet(() -> new FieldAndMethodAccessMode(true, true, false, true)), + config.getProperty("johnzon.failOnMissingCreatorValues") +.map(this::toBool) +.orElse(true) /*spec 1.0 requirement*/, +isNillable, +config.getProperty("johnzon.supportsPrivateAccess") +.map(this::toBool) +.orElse(false))); builder.setAccessMode(accessMode); // user adapters
[johnzon] 02/03: [JOHNZON-332] add skipAccessModeWrapper toggle for backward compatibility
This is an automated email from the ASF dual-hosted git repository. rmannibucau pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/johnzon.git commit 0d06bd02fb9e8e3d9cc26dc90dd004e20b0b3b0a Author: Romain Manni-Bucau AuthorDate: Mon Jan 25 11:51:16 2021 +0100 [JOHNZON-332] add skipAccessModeWrapper toggle for backward compatibility --- .../src/main/java/org/apache/johnzon/mapper/MapperBuilder.java| 8 +++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MapperBuilder.java b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MapperBuilder.java index cbb2213..9646a90 100644 --- a/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MapperBuilder.java +++ b/johnzon-mapper/src/main/java/org/apache/johnzon/mapper/MapperBuilder.java @@ -106,6 +106,7 @@ public class MapperBuilder { private boolean useBigDecimalForObjectNumbers; private boolean supportEnumContainerDeserialization = true; private Function, MapperConfig.CustomEnumConverter> enumConverterFactory = type -> new EnumConverter(type); +private boolean skipAccessModeWrapper; // @experimental polymorphic api private Function> typeLoader; @@ -200,7 +201,7 @@ public class MapperBuilder { throw new IllegalStateException("AccessMode is not an BaseAccessMode"); } } -if (!KnownNotOpenedJavaTypesAccessMode.class.isInstance(accessMode)) { +if (!skipAccessModeWrapper && !KnownNotOpenedJavaTypesAccessMode.class.isInstance(accessMode)) { accessMode = new KnownNotOpenedJavaTypesAccessMode(accessMode); } @@ -561,4 +562,9 @@ public class MapperBuilder { this.discriminator = value; return this; } + +public MapperBuilder setSkipAccessModeWrapper(final boolean skipAccessModeWrapper) { +this.skipAccessModeWrapper = skipAccessModeWrapper; +return this; +} }
[johnzon] 01/03: [JOHNZON-332] exception de/serialization
This is an automated email from the ASF dual-hosted git repository. rmannibucau pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/johnzon.git commit 4f53103f64c9f7c0ec645c1b0d04c1d34f9a8dcf Author: Romain Manni-Bucau AuthorDate: Mon Jan 25 11:48:36 2021 +0100 [JOHNZON-332] exception de/serialization --- .../org/apache/johnzon/jsonb/JohnzonBuilder.java | 37 +- .../org/apache/johnzon/jsonb/JsonbWriteTest.java | 31 ++ .../org/apache/johnzon/mapper/MapperBuilder.java | 4 + .../access/KnownNotOpenedJavaTypesAccessMode.java | 415 + .../johnzon/mapper/CircularExceptionTest.java | 4 +- 5 files changed, 475 insertions(+), 16 deletions(-) diff --git a/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JohnzonBuilder.java b/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JohnzonBuilder.java index ab82053..52878dc 100644 --- a/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JohnzonBuilder.java +++ b/johnzon-jsonb/src/main/java/org/apache/johnzon/jsonb/JohnzonBuilder.java @@ -38,6 +38,7 @@ import org.apache.johnzon.mapper.ObjectConverter; import org.apache.johnzon.mapper.SerializeValueFilter; import org.apache.johnzon.mapper.access.AccessMode; import org.apache.johnzon.mapper.access.FieldAndMethodAccessMode; +import org.apache.johnzon.mapper.access.KnownNotOpenedJavaTypesAccessMode; import org.apache.johnzon.mapper.converter.LocaleConverter; import org.apache.johnzon.mapper.internal.AdapterKey; @@ -213,21 +214,27 @@ public class JohnzonBuilder implements JsonbBuilder { final AccessMode accessMode = config.getProperty("johnzon.accessMode") .map(this::toAccessMode) -.orElseGet(() -> new JsonbAccessMode( -propertyNamingStrategy, orderValue, visibilityStrategy, - !namingStrategyValue.orElse("").equals(PropertyNamingStrategy.CASE_INSENSITIVE), -builder.getAdapters(), -factory, jsonp, builderFactorySupplier, parserFactoryProvider, -config.getProperty("johnzon.accessModeDelegate") -.map(this::toAccessMode) -.orElseGet(() -> new FieldAndMethodAccessMode(true, true, false, true)), - config.getProperty("johnzon.failOnMissingCreatorValues") - .map(this::toBool) - .orElse(true) /*spec 1.0 requirement*/, -isNillable, -config.getProperty("johnzon.supportsPrivateAccess") -.map(this::toBool) -.orElse(false))); +.orElseGet(() -> { +final AccessMode access = new JsonbAccessMode( +propertyNamingStrategy, orderValue, visibilityStrategy, + !namingStrategyValue.orElse("").equals(PropertyNamingStrategy.CASE_INSENSITIVE), +builder.getAdapters(), +factory, jsonp, builderFactorySupplier, parserFactoryProvider, +config.getProperty("johnzon.accessModeDelegate") +.map(this::toAccessMode) +.orElseGet(() -> new FieldAndMethodAccessMode(true, true, false, true)), + config.getProperty("johnzon.failOnMissingCreatorValues") +.map(this::toBool) +.orElse(true) /*spec 1.0 requirement*/, +isNillable, +config.getProperty("johnzon.supportsPrivateAccess") +.map(this::toBool) +.orElse(false)); +return ofNullable(config.getProperty("johnzon.enable-exception-serialization")) +.map(v -> Boolean.parseBoolean(String.valueOf(v))) +.map(it -> it ? new KnownNotOpenedJavaTypesAccessMode(access) : access) +.orElseGet(() -> new KnownNotOpenedJavaTypesAccessMode(access)); +}); builder.setAccessMode(accessMode); // user adapters diff --git a/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/JsonbWriteTest.java b/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/JsonbWriteTest.java index 95541ee..36b41a5 100644 --- a/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/JsonbWriteTest.java +++ b/johnzon-jsonb/src/test/java/org/apache/johnzon/jsonb/JsonbWriteTest.java @@ -22,8 +22,11 @@ import org.junit.Test; import javax.json.bind.Jsonb; import javax.json.bind.JsonbBuilder; +import javax.json.bind.JsonbConfig; +import javax.json.bind.annotation.JsonbCreator; import javax.json.bind.annotation.JsonbDateFormat; import
[johnzon] branch master updated: 1.2.10 download page update
This is an automated email from the ASF dual-hosted git repository. rmannibucau 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 a6e569e 1.2.10 download page update a6e569e is described below commit a6e569e87f0466d7fb211326718c0866303933db Author: Romain Manni-Bucau AuthorDate: Mon Jan 25 09:25:51 2021 +0100 1.2.10 download page update --- src/site/markdown/download.md | 12 ++-- 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/site/markdown/download.md b/src/site/markdown/download.md index f321303..df5ef3b 100644 --- a/src/site/markdown/download.md +++ b/src/site/markdown/download.md @@ -41,16 +41,16 @@ Apache Johnzon 1.1.x implements the JSON-P 1.1 and JSON-B 1.0 specifications whi Binaries The binary distribution contains all Johnzon modules. -* [apache-johnzon-1.2.8-bin.zip](https://www.apache.org/dyn/closer.lua/johnzon/johnzon-1.2.8/apache-johnzon-1.2.8-bin.zip) -* [apache-johnzon-1.2.8-bin.zip.sha1](https://www.apache.org/dist/johnzon/johnzon-1.2.8/apache-johnzon-1.2.8-bin.zip.sha1) -* [apache-johnzon-1.2.8-bin.zip.asc](https://www.apache.org/dist/johnzon/johnzon-1.2.8/apache-johnzon-1.2.8-bin.zip.asc) +* [apache-johnzon-1.2.10-bin.zip](https://www.apache.org/dyn/closer.lua/johnzon/johnzon-1.2.10/apache-johnzon-1.2.10-bin.zip) +* [apache-johnzon-1.2.10-bin.zip.sha1](https://www.apache.org/dist/johnzon/johnzon-1.2.10/apache-johnzon-1.2.10-bin.zip.sha1) +* [apache-johnzon-1.2.10-bin.zip.asc](https://www.apache.org/dist/johnzon/johnzon-1.2.10/apache-johnzon-1.2.10-bin.zip.asc) Source Should you want to build any of the above binaries, this source bundle is the right one and covers them all. -* [johnzon-1.2.8-source-release.zip](https://www.apache.org/dyn/closer.lua/johnzon/johnzon-1.2.8/johnzon-1.2.8-source-release.zip) -* [johnzon-1.2.8-source-release.zip.sha1](https://www.apache.org/dist/johnzon/johnzon-1.2.8/johnzon-1.2.8-source-release.zip.sha1) -* [johnzon-1.2.8-source-release.zip.asc](https://www.apache.org/dist/johnzon/johnzon-1.2.8/johnzon-1.2.8-source-release.zip.asc) +* [johnzon-1.2.10-source-release.zip](https://www.apache.org/dyn/closer.lua/johnzon/johnzon-1.2.10/johnzon-1.2.10-source-release.zip) +* [johnzon-1.2.10-source-release.zip.sha1](https://www.apache.org/dist/johnzon/johnzon-1.2.10/johnzon-1.2.10-source-release.zip.sha1) +* [johnzon-1.2.10-source-release.zip.asc](https://www.apache.org/dist/johnzon/johnzon-1.2.10/johnzon-1.2.10-source-release.zip.asc) ## Johnzon-1.0.x