diff --git a/johnzon-jsonb/pom.xml b/johnzon-jsonb/pom.xml
index 468d51e9..9f702d7a 100644
--- a/johnzon-jsonb/pom.xml
+++ b/johnzon-jsonb/pom.xml
@@ -230,6 +230,10 @@
**/AnnotationTypeInfoTest
+
+ en_US.UTF-8
+
+
${project.build.directory}/jimage
${project.build.directory}/signaturedirectory/jakarta.json.bind-api.jar:${project.build.directory}/jimage/java.base:${project.build.directory}/jimage/java.rmi:${project.build.directory}/jimage/java.sql:${project.build.directory}/jimage/java.naming
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 460d41c8..56dcf11a 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
@@ -36,6 +36,7 @@
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.MethodAccessMode;
import org.apache.johnzon.mapper.converter.LocaleConverter;
import org.apache.johnzon.mapper.internal.AdapterKey;
@@ -209,24 +210,10 @@ public Jsonb build() {
final AccessMode accessMode = config.getProperty("johnzon.accessMode")
.map(this::toAccessMode)
- .orElseGet(() -> new JsonbAccessMode(
+ .orElseGet(() -> newJsonbAccessMode(
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, false, true)),
- // this changes in v3 of the spec so let's use this behavior which makes everyone happy by default
- config.getProperty("johnzon.failOnMissingCreatorValues")
- .map(this::toBool)
- .orElseGet(() -> config.getProperty("jsonb.creator-parameters-required")
- .map(this::toBool)
- .orElse(false)),
- isNillable,
- config.getProperty("johnzon.supportsPrivateAccess")
- .map(this::toBool)
- .orElse(false)));
+ namingStrategyValue, factory, builderFactorySupplier, parserFactoryProvider,
+ isNillable));
builder.setAccessMode(accessMode);
config.getProperty("johnzon.snippetMaxLength")
@@ -235,6 +222,12 @@ public Jsonb build() {
Integer.parseInt(it.toString()))
.ifPresent(builder::setSnippetMaxLength);
+ config.getProperty("johnzon.version")
+ .map(it -> Number.class.isInstance(it)?
+ Number.class.cast(it).intValue() :
+ Integer.parseInt(it.toString()))
+ .ifPresent(builder::setVersion);
+
config.getProperty("johnzon.use-biginteger-stringadapter")
.or(() -> Optional.ofNullable(System.getProperty("johnzon.use-biginteger-stringadapter")))
.map(Object::toString).map(Boolean::parseBoolean)
@@ -381,6 +374,75 @@ private Integer toInt(final Object v) {
return !Integer.class.isInstance(v) ? Integer.parseInt(v.toString()) : Integer.class.cast(v);
}
+ private Set toExcludedMethods(final Object v) {
+ if (Set.class.isInstance(v)) {
+ return Set.class.cast(v);
+ }
+ final String str = v.toString().trim();
+ if (str.isEmpty()) {
+ return Set.of();
+ }
+ final Set result = new HashSet<>();
+ for (final String s : str.split(",")) {
+ result.add(s.trim());
+ }
+ return result;
+ }
+
+ private JsonbAccessMode newJsonbAccessMode(final PropertyNamingStrategy propertyNamingStrategy,
+ final String orderValue,
+ final PropertyVisibilityStrategy visibilityStrategy,
+ final Optional