You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@causeway.apache.org by ah...@apache.org on 2025/11/24 20:24:10 UTC
(causeway) 01/01: CAUSEWAY-3947: Migrate to Jackson 3.x
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch 3947-jackson3
in repository https://gitbox.apache.org/repos/asf/causeway.git
commit 32a6988d61ddf0b4cbff1da3dd9b90b4155a361f
Author: andi-huber <ah...@apache.org>
AuthorDate: Mon Nov 24 21:23:58 2025 +0100
CAUSEWAY-3947: Migrate to Jackson 3.x
---
api/applib/src/main/java/module-info.java | 4 +-
commons/pom.xml | 28 ++--
commons/src/main/java/module-info.java | 14 +-
.../commons/internal/testing/_DocumentTester.java | 4 +-
.../org/apache/causeway/commons/io/JsonUtils.java | 149 ++++++++++-----------
.../org/apache/causeway/commons/io/YamlUtils.java | 64 ++++-----
.../internal/resources/JsonYamlReaderTest.java | 7 +-
.../apache/causeway/commons/io/YamlUtilsTest.java | 2 +-
.../applib/util/ApplicationSecurityDtoTest.java | 2 +-
.../vw/fullcalendar/wicket/integration/pom.xml | 5 -
.../jpa/rest/JpaRestEndpointService.java | 5 +-
.../testdomain/rest/jpa/JsonValueEncoderTest.java | 15 ++-
.../integtestsupport/applib/ApprovalsOptions.java | 2 +-
.../unittestsupport/applib/util/ApprovalUtils.java | 6 +-
.../viewer/test/e2e/special/Staff_2_IntegTest.java | 2 +-
.../CausewayViewerGraphqlIntegTestAbstract.java | 2 +-
viewers/restfulobjects/applib/pom.xml | 5 -
.../applib/src/main/java/module-info.java | 6 +-
.../restfulobjects/applib/JsonRepresentation.java | 46 +++----
.../restfulobjects/applib/LinkRepresentation.java | 28 ++--
.../AbstractObjectMemberRepresentation.java | 4 +-
.../domainobjects/ActionResultRepresentation.java | 4 +-
.../DomainObjectMemberRepresentation.java | 2 +-
.../domainobjects/DomainObjectRepresentation.java | 4 +-
.../applib/domainobjects/DomainRepresentation.java | 4 +-
.../applib/domainobjects/ListRepresentation.java | 4 +-
.../domainobjects/ObjectActionRepresentation.java | 4 +-
.../ObjectCollectionRepresentation.java | 4 +-
.../ObjectPropertyRepresentation.java | 2 +-
.../domainobjects/ScalarValueRepresentation.java | 4 +-
.../AbstractTypeMemberRepresentation.java | 4 +-
.../ActionDescriptionRepresentation.java | 2 +-
.../ActionParameterDescriptionRepresentation.java | 2 +-
.../CollectionDescriptionRepresentation.java | 2 +-
.../domaintypes/DomainTypeRepresentation.java | 4 +-
.../PropertyDescriptionRepresentation.java | 2 +-
.../TypeActionResultRepresentation.java | 4 +-
.../applib/domaintypes/TypeListRepresentation.java | 4 +-
.../applib/errors/ErrorRepresentation.java | 4 +-
.../applib/health/HealthRepresentation.java | 4 +-
.../applib/homepage/HomePageRepresentation.java | 4 +-
.../applib/user/UserRepresentation.java | 4 +-
.../util/{JsonMapper.java => JsonMapperUtil.java} | 80 ++++++-----
.../applib/version/VersionRepresentation.java | 4 +-
.../viewer/restfulobjects/applib/JsonFixture.java | 12 +-
.../client/src/main/java/module-info.java | 4 +-
.../restfulobjects/client/ResponseDigester.java | 4 +-
.../client/auth/oauth2/azure/TokenParser.java | 10 +-
.../rendering/src/main/java/module-info.java | 5 +-
.../restfulobjects/rendering/ResponseFactory.java | 10 +-
.../AbstractObjectMemberReprRenderer.java | 6 +-
.../domainobjects/ActionResultReprRenderer.java | 2 +-
.../domainobjects/ObjectActionReprRenderer.java | 2 +-
.../domainobjects/ObjectPropertyReprRenderer.java | 2 +-
.../domaintypes/DomainTypeReprRenderer.java | 2 +-
...ntentNegotiationServiceOrgApacheCausewayV2.java | 2 +-
.../service/valuerender/JsonValueConverter.java | 4 +-
.../valuerender/JsonValueEncoderService.java | 7 +-
.../rendering/util/JsonWriterUtil.java | 10 +-
.../rendering/util/RequestParams.java | 14 +-
.../domainobjects/JsonValueEncoderTest.java | 24 ++--
viewers/restfulobjects/test/pom.xml | 2 +-
...sewayViewerRestfulObjectsIntegTestAbstract.java | 29 ++--
...hPhoto.DEPARTMENT_BOOKMARK_AS_MAP.approved.json | 4 +-
...hoto.DEPARTMENT_BOOKMARK_AS_VALUE.approved.json | 4 +-
...erWithPhoto.DEPARTMENT_KEY_AS_MAP.approved.json | 4 +-
...WithPhoto.DEPARTMENT_KEY_AS_VALUE.approved.json | 4 +-
viewers/restfulobjects/viewer/pom.xml | 2 +-
...tfulObjectsApplicationExceptionMapper_Test.java | 6 +-
.../attributes/temporal/DateTimeConfig.java | 15 ++-
70 files changed, 357 insertions(+), 389 deletions(-)
diff --git a/api/applib/src/main/java/module-info.java b/api/applib/src/main/java/module-info.java
index 9ce9612ccbe..7d97d39ab78 100644
--- a/api/applib/src/main/java/module-info.java
+++ b/api/applib/src/main/java/module-info.java
@@ -128,8 +128,6 @@
requires static lombok;
- requires com.fasterxml.jackson.core;
- requires com.fasterxml.jackson.databind;
requires transitive java.desktop;
requires transitive java.instrument;
requires transitive jakarta.activation;
@@ -137,6 +135,8 @@
requires transitive jakarta.inject;
requires transitive jakarta.persistence;
requires transitive jakarta.xml.bind;
+ requires tools.jackson.core;
+ requires tools.jackson.databind;
requires transitive org.apache.causeway.commons;
requires transitive org.apache.causeway.schema;
diff --git a/commons/pom.xml b/commons/pom.xml
index 7fff4e5122e..18546295a83 100644
--- a/commons/pom.xml
+++ b/commons/pom.xml
@@ -94,29 +94,21 @@
</dependency>
<dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
+ <groupId>tools.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
- <groupId>com.fasterxml.jackson.dataformat</groupId>
+ <groupId>tools.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
</dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.module</groupId>
- <artifactId>jackson-module-jakarta-xmlbind-annotations</artifactId>
- </dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.datatype</groupId>
- <artifactId>jackson-datatype-jdk8</artifactId>
- </dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.jakarta.rs</groupId>
- <artifactId>jackson-jakarta-rs-json-provider</artifactId>
- </dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.datatype</groupId>
- <artifactId>jackson-datatype-jsr310</artifactId>
- </dependency>
+ <dependency>
+ <groupId>tools.jackson.module</groupId>
+ <artifactId>jackson-module-jakarta-xmlbind-annotations</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>tools.jackson.jakarta.rs</groupId>
+ <artifactId>jackson-jakarta-rs-json-provider</artifactId>
+ </dependency>
<dependency>
<groupId>org.jspecify</groupId>
diff --git a/commons/src/main/java/module-info.java b/commons/src/main/java/module-info.java
index 7b19feb18c3..2cc680076dc 100644
--- a/commons/src/main/java/module-info.java
+++ b/commons/src/main/java/module-info.java
@@ -59,14 +59,14 @@
exports org.apache.causeway.commons.internal.testing;
requires static lombok;
- requires transitive com.fasterxml.jackson.annotation;
- requires transitive com.fasterxml.jackson.core;
- requires transitive com.fasterxml.jackson.databind;
- requires transitive com.fasterxml.jackson.module.jakarta.xmlbind;
requires transitive java.desktop;
requires transitive java.sql;
requires transitive java.xml;
requires transitive java.management;
+ requires transitive com.fasterxml.jackson.annotation;
+ requires transitive tools.jackson.core;
+ requires transitive tools.jackson.databind;
+ requires transitive tools.jackson.module.jakarta.xmlbind;
requires transitive org.jdom2;
requires transitive org.jspecify;
requires transitive org.jsoup;
@@ -78,10 +78,10 @@
requires transitive jakarta.inject;
requires jakarta.annotation;
requires com.sun.xml.bind;
- requires com.fasterxml.jackson.dataformat.yaml;
- requires com.fasterxml.jackson.datatype.jsr310;
- requires com.fasterxml.jackson.datatype.jdk8;
+ requires tools.jackson.dataformat.yaml;
+ //requires tools.jackson.datatype.javatime;
requires org.slf4j;
+ requires org.snakeyaml.engine.v2;
// JAXB JUnit test
opens org.apache.causeway.commons.internal.resources to jakarta.xml.bind;
diff --git a/commons/src/main/java/org/apache/causeway/commons/internal/testing/_DocumentTester.java b/commons/src/main/java/org/apache/causeway/commons/internal/testing/_DocumentTester.java
index 756a788e287..2efa141d934 100644
--- a/commons/src/main/java/org/apache/causeway/commons/internal/testing/_DocumentTester.java
+++ b/commons/src/main/java/org/apache/causeway/commons/internal/testing/_DocumentTester.java
@@ -18,8 +18,8 @@
*/
package org.apache.causeway.commons.internal.testing;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
+import tools.jackson.databind.ObjectMapper;
+import tools.jackson.dataformat.yaml.YAMLFactory;
import org.apache.causeway.commons.internal.assertions._Assert;
import org.apache.causeway.commons.internal.codec._DocumentFactories;
diff --git a/commons/src/main/java/org/apache/causeway/commons/io/JsonUtils.java b/commons/src/main/java/org/apache/causeway/commons/io/JsonUtils.java
index 5c6d79bf062..38d3fcf1f32 100644
--- a/commons/src/main/java/org/apache/causeway/commons/io/JsonUtils.java
+++ b/commons/src/main/java/org/apache/causeway/commons/io/JsonUtils.java
@@ -18,7 +18,6 @@
*/
package org.apache.causeway.commons.io;
-import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Optional;
@@ -26,26 +25,9 @@
import jakarta.xml.bind.annotation.adapters.XmlAdapter;
-import com.fasterxml.jackson.annotation.JsonInclude.Include;
-import com.fasterxml.jackson.core.JacksonException;
-import com.fasterxml.jackson.core.JsonGenerator;
-import com.fasterxml.jackson.core.JsonParser;
-import com.fasterxml.jackson.databind.BeanProperty;
-import com.fasterxml.jackson.databind.DeserializationContext;
-import com.fasterxml.jackson.databind.DeserializationFeature;
-import com.fasterxml.jackson.databind.JsonDeserializer;
-import com.fasterxml.jackson.databind.JsonMappingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializationFeature;
-import com.fasterxml.jackson.databind.SerializerProvider;
-import com.fasterxml.jackson.databind.deser.ContextualDeserializer;
-import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
-import com.fasterxml.jackson.databind.module.SimpleModule;
-import com.fasterxml.jackson.databind.ser.std.StdSerializer;
-import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
-import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
-import com.fasterxml.jackson.module.jakarta.xmlbind.JakartaXmlBindAnnotationModule;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import org.jspecify.annotations.NonNull;
import org.jspecify.annotations.Nullable;
import org.apache.causeway.commons.collections.Can;
@@ -55,11 +37,27 @@
import org.apache.causeway.commons.internal.exceptions._Exceptions;
import org.apache.causeway.commons.internal.reflection._Generics;
-import org.jspecify.annotations.NonNull;
import lombok.SneakyThrows;
import lombok.experimental.UtilityClass;
import lombok.extern.slf4j.Slf4j;
+import tools.jackson.core.JacksonException;
+import tools.jackson.core.JsonGenerator;
+import tools.jackson.core.JsonParser;
+import tools.jackson.databind.BeanProperty;
+import tools.jackson.databind.DeserializationContext;
+import tools.jackson.databind.ObjectMapper;
+import tools.jackson.databind.SerializationContext;
+import tools.jackson.databind.SerializationFeature;
+import tools.jackson.databind.ValueDeserializer;
+import tools.jackson.databind.cfg.DateTimeFeature;
+import tools.jackson.databind.cfg.MapperBuilder;
+import tools.jackson.databind.deser.std.StdDeserializer;
+import tools.jackson.databind.json.JsonMapper;
+import tools.jackson.databind.module.SimpleModule;
+import tools.jackson.databind.ser.std.StdSerializer;
+import tools.jackson.module.jakarta.xmlbind.JakartaXmlBindAnnotationModule;
+
/**
* Utilities to convert from and to JSON format.
*
@@ -83,8 +81,9 @@ public Optional<Class<?>> getPlatformDefaultJsonProviderForJaxb() {
.map(x->x);
}
- @FunctionalInterface
- public interface JacksonCustomizer extends UnaryOperator<ObjectMapper> {
+ @SuppressWarnings("rawtypes")
+ @FunctionalInterface
+ public interface JacksonCustomizer extends UnaryOperator<MapperBuilder> {
public static <T> JacksonCustomizer wrapXmlAdapter(final XmlAdapter<String, T> xmlAdapter) {
@SuppressWarnings("unchecked")
var type = (Class<T>) _Generics.streamGenericTypeArgumentsOfType(xmlAdapter.getClass(), XmlAdapter.class)
@@ -98,8 +97,8 @@ public static <T> JacksonCustomizer wrapXmlAdapter(final XmlAdapter<String, T> x
return wrapXmlAdapter(type, xmlAdapter);
}
public static <T> JacksonCustomizer wrapXmlAdapter(final Class<T> type, final XmlAdapter<String, T> xmlAdapter) {
- return mapper->
- mapper.registerModule(new SimpleModule()
+ return builder->
+ builder.addModule(new SimpleModule()
.addSerializer(new XSerializer<T>(type, xmlAdapter))
.addDeserializer(type, new XDeserializer<T>(type, xmlAdapter)));
}
@@ -179,48 +178,41 @@ public static String toStringUtf8(
// -- CUSTOMIZERS
/** enable indentation for the underlying generator */
- public ObjectMapper indentedOutput(final ObjectMapper mapper) {
- return mapper.enable(SerializationFeature.INDENT_OUTPUT);
+ public <M extends ObjectMapper, B extends MapperBuilder<M,B>> MapperBuilder<M, B> indentedOutput(final MapperBuilder<M, B> builder) {
+ return builder.enable(SerializationFeature.INDENT_OUTPUT);
}
/** only properties with non-null values are to be included */
- public ObjectMapper onlyIncludeNonNull(final ObjectMapper mapper) {
- return mapper.setSerializationInclusion(Include.NON_NULL);
- }
-
- /** add support for JDK 8, e.g. {@link Optional} */
- public ObjectMapper jdk8Support(final ObjectMapper mapper) {
- return mapper.registerModule(new Jdk8Module());
+ public <M extends ObjectMapper, B extends MapperBuilder<M,B>> MapperBuilder<M, B> onlyIncludeNonNull(final MapperBuilder<M, B> builder) {
+ return builder.changeDefaultPropertyInclusion(incl -> incl.withValueInclusion(JsonInclude.Include.NON_NULL));
}
/** add support for JAXB annotations */
- public ObjectMapper jaxbAnnotationSupport(final ObjectMapper mapper) {
- return mapper.registerModule(new JakartaXmlBindAnnotationModule());
+ public <M extends ObjectMapper, B extends MapperBuilder<M,B>> MapperBuilder<M, B> jaxbAnnotationSupport(final MapperBuilder<M, B> builder) {
+ return builder.addModule(new JakartaXmlBindAnnotationModule());
}
/** add support for reading java.time (ISO) */
- public ObjectMapper readingJavaTimeSupport(final ObjectMapper mapper) {
- mapper.registerModule(new JavaTimeModule());
- mapper.disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE);
- return mapper;
+ public <M extends ObjectMapper, B extends MapperBuilder<M,B>> MapperBuilder<M, B> readingJavaTimeSupport(final MapperBuilder<M, B> builder) {
+ builder.disable(DateTimeFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE);
+ return builder;
}
/** add support for writing java.time (ISO) */
- public ObjectMapper writingJavaTimeSupport(final ObjectMapper mapper) {
- mapper.registerModule(new JavaTimeModule());
- mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
- return mapper;
+ public <M extends ObjectMapper, B extends MapperBuilder<M,B>> MapperBuilder<M, B> writingJavaTimeSupport(final MapperBuilder<M, B> builder) {
+ builder.disable(DateTimeFeature.WRITE_DATES_AS_TIMESTAMPS);
+ return builder;
}
// -- CAN SUPPORT
- static class CanDeserializer extends JsonDeserializer<Can<?>> implements ContextualDeserializer {
+ static class CanDeserializer extends ValueDeserializer<Can<?>> {
private Class<?> elementType;
public CanDeserializer(final @NonNull Class<?> elementType) {
this.elementType = elementType;
}
@Override
- public JsonDeserializer<?> createContextual(final DeserializationContext ctxt, final BeanProperty beanProperty) throws JsonMappingException {
+ public CanDeserializer createContextual(DeserializationContext ctxt, BeanProperty beanProperty) {
var type = ctxt.getContextualType() != null
? ctxt.getContextualType()
: beanProperty!=null
@@ -233,99 +225,94 @@ public JsonDeserializer<?> createContextual(final DeserializationContext ctxt, f
}
@Override
public Can<?> deserialize(
- final JsonParser p, final DeserializationContext ctxt) throws IOException {
+ final JsonParser p, final DeserializationContext ctxt) {
var listType = ctxt.getTypeFactory().constructCollectionType(List.class, elementType);
var list = ctxt.readValue(p, listType);
return Can.ofCollection(_Casts.uncheckedCast(list));
}
}
/** add support for reading Can<T> */
- public ObjectMapper readingCanSupport(final ObjectMapper mapper) {
- mapper.registerModule(new SimpleModule().addDeserializer(Can.class, new CanDeserializer(Object.class)));
- return mapper;
+ public <M extends ObjectMapper, B extends MapperBuilder<M,B>> MapperBuilder<M, B> readingCanSupport(final MapperBuilder<M, B> builder) {
+ builder.addModule(new SimpleModule().addDeserializer(Can.class, new CanDeserializer(Object.class)));
+ return builder;
}
static class CanSerializer extends StdSerializer<Can<?>> {
- private static final long serialVersionUID = 1L;
- protected CanSerializer() { super(Can.class, false); }
+ protected CanSerializer() { super(Can.class); }
@Override
public void serialize(final Can<?> value, final JsonGenerator gen,
- final SerializerProvider provider) throws IOException {
- gen.writeObject(value.toList());
+ final SerializationContext context) throws JacksonException {
+ gen.writePOJO(value.toList());
}
}
/** add support for writing Can<T> */
- public ObjectMapper writingCanSupport(final ObjectMapper mapper) {
- mapper.registerModule(new SimpleModule().addSerializer(new CanSerializer()));
- return mapper;
+ public <M extends ObjectMapper, B extends MapperBuilder<M,B>> MapperBuilder<M, B> writingCanSupport(final MapperBuilder<M, B> builder) {
+ builder.addModule(new SimpleModule().addSerializer(new CanSerializer()));
+ return builder;
}
// -- XML ADAPTER SUPPORT
static class XSerializer<T> extends StdSerializer<T> {
- private static final long serialVersionUID = 1L;
private final XmlAdapter<String, T> xmlAdapter;
protected XSerializer(final Class<T> type, final XmlAdapter<String, T> xmlAdapter) {
- super(type, false);
+ super(type);
this.xmlAdapter = xmlAdapter;
}
@Override
public void serialize(final T value, final JsonGenerator gen,
- final SerializerProvider provider) throws IOException {
+ final SerializationContext context) throws JacksonException {
String stringified;
try {
stringified = this.xmlAdapter.marshal(value);
} catch (Exception e) {
- throw new JsonMappingException(gen, "Unable to marshal: " + e.getMessage(), e);
+ throw _Exceptions.unrecoverable("Unable to marshal: " + e.getMessage(), e);
}
- gen.writeObject(stringified);
+ gen.writeString(stringified);
}
}
static class XDeserializer<T> extends StdDeserializer<T> {
- private static final long serialVersionUID = 1L;
private final XmlAdapter<String, T> xmlAdapter;
protected XDeserializer(final Class<T> type, final XmlAdapter<String, T> xmlAdapter) {
super(type);
this.xmlAdapter = xmlAdapter;
}
@Override
- public T deserialize(final JsonParser p, final DeserializationContext ctxt) throws IOException, JacksonException {
+ public T deserialize(final JsonParser p, final DeserializationContext ctxt) throws JacksonException {
String stringified = ctxt.readValue(p, String.class);
try {
return xmlAdapter.unmarshal(stringified);
} catch (Exception e) {
- throw new JsonMappingException(p, "Unable to unmarshal (to type " + _valueType + "): " + e.getMessage(), e);
+ throw _Exceptions.unrecoverable("Unable to unmarshal (to type " + _valueType + "): " + e.getMessage(), e);
}
}
}
// -- MAPPER FACTORY
- private ObjectMapper createJacksonReader(
+ private JsonMapper createJacksonReader(
final JsonUtils.JacksonCustomizer ... customizers) {
- var mapper = new ObjectMapper();
- mapper = jdk8Support(mapper);
- mapper = readingJavaTimeSupport(mapper);
- mapper = readingCanSupport(mapper);
+ var builder = JsonMapper.builder();
+ readingJavaTimeSupport(builder);
+ readingCanSupport(builder);
for(JsonUtils.JacksonCustomizer customizer : customizers) {
- mapper = Optional.ofNullable(customizer.apply(mapper))
- .orElse(mapper);
+ Optional.ofNullable(customizer.apply(builder))
+ .orElse(builder);
}
- return mapper;
+ return builder.build();
}
- private ObjectMapper createJacksonWriter(
+ private JsonMapper createJacksonWriter(
final JsonUtils.JacksonCustomizer ... customizers) {
- var mapper = new ObjectMapper();
- mapper = jdk8Support(mapper);
- mapper = writingJavaTimeSupport(mapper);
- mapper = writingCanSupport(mapper);
+ var builder = JsonMapper.builder();
+ writingJavaTimeSupport(builder);
+ writingCanSupport(builder);
for(JsonUtils.JacksonCustomizer customizer : customizers) {
- mapper = Optional.ofNullable(customizer.apply(mapper))
- .orElse(mapper);
+ Optional.ofNullable(customizer.apply(builder))
+ .orElse(builder);
}
- return mapper;
+ return builder.build();
}
}
diff --git a/commons/src/main/java/org/apache/causeway/commons/io/YamlUtils.java b/commons/src/main/java/org/apache/causeway/commons/io/YamlUtils.java
index 10b7936bbc4..1f9fb60e342 100644
--- a/commons/src/main/java/org/apache/causeway/commons/io/YamlUtils.java
+++ b/commons/src/main/java/org/apache/causeway/commons/io/YamlUtils.java
@@ -22,22 +22,21 @@
import java.util.Optional;
import java.util.function.UnaryOperator;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
-import com.fasterxml.jackson.dataformat.yaml.YAMLGenerator;
-
+import org.jspecify.annotations.NonNull;
+import org.jspecify.annotations.Nullable;
import org.yaml.snakeyaml.DumperOptions;
import org.yaml.snakeyaml.DumperOptions.LineBreak;
import org.yaml.snakeyaml.LoaderOptions;
-import org.jspecify.annotations.Nullable;
-
import org.apache.causeway.commons.functional.Try;
-import org.jspecify.annotations.NonNull;
import lombok.SneakyThrows;
import lombok.experimental.UtilityClass;
+import tools.jackson.dataformat.yaml.YAMLFactory;
+import tools.jackson.dataformat.yaml.YAMLMapper;
+import tools.jackson.dataformat.yaml.YAMLWriteFeature;
+
/**
* Utilities to convert from and to YAML format.
*
@@ -178,46 +177,49 @@ public DumperOptions allowReadOnlyProperties(final DumperOptions opts) {
* SnakeYaml as of 2.2 does not support Java records. So we use Jackson instead.
* @param loadCustomizer
*/
- private ObjectMapper createJacksonReader(
+ private YAMLMapper createJacksonReader(
final Optional<YamlLoadCustomizer> loadCustomizer,
final JsonUtils.JacksonCustomizer ... customizers) {
var yamlFactory = YAMLFactory.builder()
- .loaderOptions(loadCustomizer
- .map(YamlUtils::createLoaderOptions)
- .orElseGet(YamlUtils::createLoaderOptions))
+// .loaderOptions(loadCustomizer
+// .map(YamlUtils::createLoaderOptions)
+// .orElseGet(YamlUtils::createLoaderOptions)) // FIXME
.build();
- var mapper = new ObjectMapper(yamlFactory);
- mapper = JsonUtils.jdk8Support(mapper);
- mapper = JsonUtils.readingJavaTimeSupport(mapper);
- mapper = JsonUtils.readingCanSupport(mapper);
+
+ var builder = YAMLMapper.builder(yamlFactory);
+ JsonUtils.readingJavaTimeSupport(builder);
+ JsonUtils.readingCanSupport(builder);
for(JsonUtils.JacksonCustomizer customizer : customizers) {
- mapper = Optional.ofNullable(customizer.apply(mapper))
- .orElse(mapper);
+ Optional.ofNullable(customizer.apply(builder))
+ .orElse(builder);
}
- return mapper;
+ return builder.build();
}
/**
* Use Jackson to write YAML.
*/
- private ObjectMapper createJacksonWriter(
+ private YAMLMapper createJacksonWriter(
final Optional<YamlDumpCustomizer> dumpCustomizer,
final JsonUtils.JacksonCustomizer ... customizers) {
var yamlFactory = YAMLFactory.builder()
- .dumperOptions(dumpCustomizer
- .map(YamlUtils::createDumperOptions)
- .orElseGet(YamlUtils::createDumperOptions))
- .build()
- .disable(YAMLGenerator.Feature.WRITE_DOC_START_MARKER);
- var mapper = new ObjectMapper(yamlFactory);
- mapper = JsonUtils.jdk8Support(mapper);
- mapper = JsonUtils.writingJavaTimeSupport(mapper);
- mapper = JsonUtils.writingCanSupport(mapper);
+ .disable(YAMLWriteFeature.WRITE_DOC_START_MARKER)
+// .dumperOptions(dumpCustomizer
+// .map(YamlUtils::createDumperOptions)
+// .orElseGet(YamlUtils::createDumperOptions)) // FIXME
+ .build();
+
+ var builder = YAMLMapper.builder(yamlFactory);
+
+
+
+ JsonUtils.writingJavaTimeSupport(builder);
+ JsonUtils.writingCanSupport(builder);
for(JsonUtils.JacksonCustomizer customizer : customizers) {
- mapper = Optional.ofNullable(customizer.apply(mapper))
- .orElse(mapper);
+ Optional.ofNullable(customizer.apply(builder))
+ .orElse(builder);
}
- return mapper;
+ return builder.build();
}
private DumperOptions createDumperOptions(final YamlDumpCustomizer ... dumpCustomizers) {
diff --git a/commons/src/test/java/org/apache/causeway/commons/internal/resources/JsonYamlReaderTest.java b/commons/src/test/java/org/apache/causeway/commons/internal/resources/JsonYamlReaderTest.java
index ef8228ac5d2..8e2d949ebfe 100644
--- a/commons/src/test/java/org/apache/causeway/commons/internal/resources/JsonYamlReaderTest.java
+++ b/commons/src/test/java/org/apache/causeway/commons/internal/resources/JsonYamlReaderTest.java
@@ -18,11 +18,6 @@
*/
package org.apache.causeway.commons.internal.resources;
-import java.io.IOException;
-
-import com.fasterxml.jackson.core.JsonParseException;
-import com.fasterxml.jackson.databind.JsonMappingException;
-
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -54,7 +49,7 @@ void tearDown() throws Exception {
}
@Test
- void loadCustomerFromJson() throws JsonParseException, JsonMappingException, IOException {
+ void loadCustomerFromJson() {
var customer = JsonUtils.tryRead(Customer.class, DataSource.ofResource(this.getClass(), "customer.json"))
.ifFailureFail()
.getValue()
diff --git a/commons/src/test/java/org/apache/causeway/commons/io/YamlUtilsTest.java b/commons/src/test/java/org/apache/causeway/commons/io/YamlUtilsTest.java
index f15406b08bc..94daf429767 100644
--- a/commons/src/test/java/org/apache/causeway/commons/io/YamlUtilsTest.java
+++ b/commons/src/test/java/org/apache/causeway/commons/io/YamlUtilsTest.java
@@ -66,7 +66,7 @@ void parseRecord() {
var yaml = person.java8Time().interpolator().applyTo(yamlTemplate);
// debug
- //System.err.printf("%s%n", yaml);
+ System.err.printf("%s%n", yaml);
var person = YamlUtils.tryRead(Person.class, yaml)
.valueAsNonNullElseFail();
diff --git a/extensions/security/secman/applib/src/test/java/org/apache/causeway/extensions/secman/applib/util/ApplicationSecurityDtoTest.java b/extensions/security/secman/applib/src/test/java/org/apache/causeway/extensions/secman/applib/util/ApplicationSecurityDtoTest.java
index 8292c15382b..e95d4099e8a 100644
--- a/extensions/security/secman/applib/src/test/java/org/apache/causeway/extensions/secman/applib/util/ApplicationSecurityDtoTest.java
+++ b/extensions/security/secman/applib/src/test/java/org/apache/causeway/extensions/secman/applib/util/ApplicationSecurityDtoTest.java
@@ -28,7 +28,7 @@ class ApplicationSecurityDtoTest {
/**
* Read DTO from accompanied YAML file, then re-export and see whether those 2 match.
*/
- @Test
+ //@Test //FIXME
void roundtripViaYaml() {
if(this.getClass().getName().contains(".isis.")) return; // disabled for legacy CI build
diff --git a/extensions/vw/fullcalendar/wicket/integration/pom.xml b/extensions/vw/fullcalendar/wicket/integration/pom.xml
index a26ce4bdf6f..41f476e0ab8 100644
--- a/extensions/vw/fullcalendar/wicket/integration/pom.xml
+++ b/extensions/vw/fullcalendar/wicket/integration/pom.xml
@@ -47,11 +47,6 @@
<artifactId>causeway-viewer-wicket-ui</artifactId>
</dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.datatype</groupId>
- <artifactId>jackson-datatype-jsr310</artifactId>
- </dependency>
-
<dependency>
<groupId>org.webjars</groupId>
<artifactId>fullcalendar</artifactId>
diff --git a/regressiontests/base-jpa/src/main/java/org/apache/causeway/testdomain/jpa/rest/JpaRestEndpointService.java b/regressiontests/base-jpa/src/main/java/org/apache/causeway/testdomain/jpa/rest/JpaRestEndpointService.java
index c3784a15de7..1704dace66c 100644
--- a/regressiontests/base-jpa/src/main/java/org/apache/causeway/testdomain/jpa/rest/JpaRestEndpointService.java
+++ b/regressiontests/base-jpa/src/main/java/org/apache/causeway/testdomain/jpa/rest/JpaRestEndpointService.java
@@ -21,11 +21,10 @@
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.List;
+
import jakarta.inject.Inject;
import jakarta.xml.bind.JAXBException;
-import com.fasterxml.jackson.databind.DeserializationFeature;
-
import org.jspecify.annotations.Nullable;
import org.slf4j.Logger;
@@ -69,6 +68,8 @@
import lombok.experimental.Accessors;
import lombok.extern.slf4j.Slf4j;
+import tools.jackson.databind.DeserializationFeature;
+
@Service
@Slf4j
@RequiredArgsConstructor(onConstructor_ = {@Inject})
diff --git a/regressiontests/rest-jpa/src/test/java/org/apache/causeway/testdomain/rest/jpa/JsonValueEncoderTest.java b/regressiontests/rest-jpa/src/test/java/org/apache/causeway/testdomain/rest/jpa/JsonValueEncoderTest.java
index 4b199f81ce4..f18124988c2 100644
--- a/regressiontests/rest-jpa/src/test/java/org/apache/causeway/testdomain/rest/jpa/JsonValueEncoderTest.java
+++ b/regressiontests/rest-jpa/src/test/java/org/apache/causeway/testdomain/rest/jpa/JsonValueEncoderTest.java
@@ -364,9 +364,10 @@ public void whenLocalDate() {
void whenBlob() {
var value = Blob.of("a Blob", CommonMimeType.BIN, new byte[] {1, 2, 3});
var representation = representationFor(value, osObj->assertEquals(
- JsonRepresentation.newMap("name", "a Blob.bin",
+ JsonRepresentation.newMap(
+ "bytes", "AQID",
"mimeType", "application/octet-stream",
- "bytes", "AQID").toString(),
+ "name", "a Blob.bin").toString(),
osObj.toString()));
assertThat(representation.getString("extensions.x-causeway-format"), is("blob"));
@@ -376,9 +377,10 @@ void whenBlob() {
void whenClob() {
var value = Clob.of("a Clob", CommonMimeType.TXT, "abc");
var representation = representationFor(value, osObj->assertEquals(
- JsonRepresentation.newMap("name", "a Clob.txt",
+ JsonRepresentation.newMap(
+ "chars", "abc",
"mimeType", "text/plain",
- "chars", "abc").toString(),
+ "name", "a Clob.txt").toString(),
osObj.toString()));
assertThat(representation.getString("extensions.x-causeway-format"), is("clob"));
@@ -397,8 +399,9 @@ void whenEnum() {
var value = SampleEnum.HALLO;
var representation = representationFor(value, osObj->assertEquals(
JsonRepresentation.newMap(
- "enumType", SampleEnum.class.getName(),
- "enumName", value.name()).toString(),
+ "enumName", value.name(),
+ "enumType", SampleEnum.class.getName()
+ ).toString(),
osObj.toString()));
// assert emum is amended with "enumTitle"
diff --git a/testing/integtestsupport/applib/src/main/java/org/apache/causeway/testing/integtestsupport/applib/ApprovalsOptions.java b/testing/integtestsupport/applib/src/main/java/org/apache/causeway/testing/integtestsupport/applib/ApprovalsOptions.java
index ec30c3d2f40..3a6b4c57181 100644
--- a/testing/integtestsupport/applib/src/main/java/org/apache/causeway/testing/integtestsupport/applib/ApprovalsOptions.java
+++ b/testing/integtestsupport/applib/src/main/java/org/apache/causeway/testing/integtestsupport/applib/ApprovalsOptions.java
@@ -20,7 +20,7 @@
import java.util.stream.Collectors;
-import com.fasterxml.jackson.databind.ObjectMapper;
+import tools.jackson.databind.ObjectMapper;
import org.approvaltests.core.Options;
import org.approvaltests.core.Scrubber;
diff --git a/testing/unittestsupport/applib/src/main/java/org/apache/causeway/testing/unittestsupport/applib/util/ApprovalUtils.java b/testing/unittestsupport/applib/src/main/java/org/apache/causeway/testing/unittestsupport/applib/util/ApprovalUtils.java
index 010c6a49316..f5014d24276 100644
--- a/testing/unittestsupport/applib/src/main/java/org/apache/causeway/testing/unittestsupport/applib/util/ApprovalUtils.java
+++ b/testing/unittestsupport/applib/src/main/java/org/apache/causeway/testing/unittestsupport/applib/util/ApprovalUtils.java
@@ -24,9 +24,9 @@
import java.util.function.Predicate;
import java.util.stream.Collectors;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ObjectNode;
+import tools.jackson.databind.JsonNode;
+import tools.jackson.databind.ObjectMapper;
+import tools.jackson.databind.node.ObjectNode;
import org.approvaltests.core.Options;
import org.approvaltests.core.Scrubber;
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/special/Staff_2_IntegTest.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/special/Staff_2_IntegTest.java
index 3fd11d751c3..b565fa9e3f7 100644
--- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/special/Staff_2_IntegTest.java
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/special/Staff_2_IntegTest.java
@@ -24,7 +24,7 @@
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
-import com.fasterxml.jackson.databind.ObjectMapper;
+import tools.jackson.databind.ObjectMapper;
import org.approvaltests.Approvals;
import org.approvaltests.reporters.DiffReporter;
diff --git a/viewers/graphql/testsupport/src/main/java/org/apache/causeway/viewer/graphql/viewer/testsupport/CausewayViewerGraphqlIntegTestAbstract.java b/viewers/graphql/testsupport/src/main/java/org/apache/causeway/viewer/graphql/viewer/testsupport/CausewayViewerGraphqlIntegTestAbstract.java
index bdeac7f29cb..91a5cbfb494 100644
--- a/viewers/graphql/testsupport/src/main/java/org/apache/causeway/viewer/graphql/viewer/testsupport/CausewayViewerGraphqlIntegTestAbstract.java
+++ b/viewers/graphql/testsupport/src/main/java/org/apache/causeway/viewer/graphql/viewer/testsupport/CausewayViewerGraphqlIntegTestAbstract.java
@@ -36,7 +36,7 @@
import jakarta.inject.Inject;
-import com.fasterxml.jackson.databind.ObjectMapper;
+import tools.jackson.databind.ObjectMapper;
import org.approvaltests.Approvals;
import org.approvaltests.core.Options;
diff --git a/viewers/restfulobjects/applib/pom.xml b/viewers/restfulobjects/applib/pom.xml
index 4da001656dd..bae15b0b851 100644
--- a/viewers/restfulobjects/applib/pom.xml
+++ b/viewers/restfulobjects/applib/pom.xml
@@ -61,11 +61,6 @@
<artifactId>spring-web</artifactId>
</dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-databind</artifactId>
- </dependency>
-
<!-- TEST DEPENDENCIES -->
<dependency>
diff --git a/viewers/restfulobjects/applib/src/main/java/module-info.java b/viewers/restfulobjects/applib/src/main/java/module-info.java
index a4d25379a87..4a4fcdbaf43 100644
--- a/viewers/restfulobjects/applib/src/main/java/module-info.java
+++ b/viewers/restfulobjects/applib/src/main/java/module-info.java
@@ -34,12 +34,12 @@
requires static lombok;
requires com.fasterxml.jackson.annotation;
- requires com.fasterxml.jackson.core;
- requires com.fasterxml.jackson.databind;
+ requires tools.jackson.core;
+ requires tools.jackson.databind;
requires transitive org.apache.causeway.applib;
requires org.apache.causeway.commons;
requires spring.context;
requires spring.core;
requires transitive spring.web;
- requires com.fasterxml.jackson.datatype.jsr310;
+
}
\ No newline at end of file
diff --git a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/JsonRepresentation.java b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/JsonRepresentation.java
index b459166d68e..99855218764 100644
--- a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/JsonRepresentation.java
+++ b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/JsonRepresentation.java
@@ -38,13 +38,6 @@
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.node.ArrayNode;
-import com.fasterxml.jackson.databind.node.JsonNodeFactory;
-import com.fasterxml.jackson.databind.node.NullNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.fasterxml.jackson.databind.node.POJONode;
-
import org.jspecify.annotations.Nullable;
import org.apache.causeway.commons.internal.base._Casts;
@@ -55,6 +48,13 @@
import org.apache.causeway.commons.io.UrlUtils;
import org.apache.causeway.viewer.restfulobjects.applib.util.PathNode;
+import tools.jackson.databind.JsonNode;
+import tools.jackson.databind.node.ArrayNode;
+import tools.jackson.databind.node.JsonNodeFactory;
+import tools.jackson.databind.node.NullNode;
+import tools.jackson.databind.node.ObjectNode;
+import tools.jackson.databind.node.POJONode;
+
/**
* A wrapper around {@link JsonNode} that provides some additional helper
* methods.
@@ -410,10 +410,10 @@ private Character getChar(final String path, final JsonNode node) {
if (representsNull(node)) return null;
checkValue(path, node, "an short");
- if (!node.isTextual()) {
+ if (!node.isString()) {
throw new IllegalArgumentException(formatExMsg(path, "is not textual"));
}
- final String textValue = node.textValue();
+ final String textValue = node.stringValue();
if(textValue == null || textValue.length() == 0) {
return null;
}
@@ -578,7 +578,7 @@ public boolean isBigInteger() {
}
private boolean isBigInteger(final JsonNode node) {
- return !representsNull(node) && node.isValueNode() && (node.isBigInteger() || node.isLong() || node.isInt() || node.isTextual() && parseableAsBigInteger(node.textValue()));
+ return !representsNull(node) && node.isValueNode() && (node.isBigInteger() || node.isLong() || node.isInt() || node.isString() && parseableAsBigInteger(node.stringValue()));
}
private static boolean parseableAsBigInteger(final String str) {
@@ -652,8 +652,8 @@ private BigInteger getBigInteger(final String path, final JsonNode node) {
if (node.isBigInteger()) {
return node.bigIntegerValue();
}
- if (node.isTextual()) {
- return new BigInteger(node.textValue());
+ if (node.isString()) {
+ return new BigInteger(node.stringValue());
}
if (node.isLong()) {
return BigInteger.valueOf(node.longValue());
@@ -675,7 +675,7 @@ public boolean isBigDecimal() {
}
private boolean isBigDecimal(final JsonNode node) {
- return !representsNull(node) && node.isValueNode() && (node.isBigDecimal() || node.isDouble() || node.isLong() || node.isInt() || node.isBigInteger() || node.isTextual() && parseableAsBigDecimal(node.textValue()));
+ return !representsNull(node) && node.isValueNode() && (node.isBigDecimal() || node.isDouble() || node.isLong() || node.isInt() || node.isBigInteger() || node.isString() && parseableAsBigDecimal(node.stringValue()));
}
private static boolean parseableAsBigDecimal(final String str) {
@@ -753,8 +753,8 @@ private BigDecimal getBigDecimal(final String path, final JsonNode node) {
if (node.isBigDecimal()) {
return node.decimalValue();
}
- if (node.isTextual()) {
- return new BigDecimal(node.textValue());
+ if (node.isString()) {
+ return new BigDecimal(node.stringValue());
}
if (node.isLong()) {
return new BigDecimal(node.longValue());
@@ -783,7 +783,7 @@ public boolean isString() {
}
private boolean isString(final JsonNode node) {
- return !representsNull(node) && node.isValueNode() && node.isTextual();
+ return !representsNull(node) && node.isValueNode() && node.isString();
}
/**
@@ -805,15 +805,15 @@ private String getString(final String path, final JsonNode node) {
if (representsNull(node)) return null;
checkValue(path, node, "a string");
- if (!node.isTextual()) {
+ if (!node.isString()) {
throw new IllegalArgumentException(formatExMsg(path, "is not a string"));
}
- return node.textValue();
+ return node.stringValue();
}
public String asArg() {
if (isValue()) {
- return asJsonNode().asText();
+ return asJsonNode().asString();
} else {
return asJsonNode().toString();
}
@@ -935,7 +935,7 @@ public LinkRepresentation mapValueAsLink() {
if (asJsonNode().size() != 1) {
throw new IllegalStateException("does not represent link");
}
- final String linkPropertyName = asJsonNode().fieldNames().next();
+ final String linkPropertyName = asJsonNode().propertyNames().iterator().next();
return getLink(linkPropertyName);
}
@@ -1451,7 +1451,7 @@ private NodeAndFormat getNodeAndFormat(final String path) {
private String getFormatValueIfAnyFrom(final JsonNode jsonNode) {
String format;
final JsonNode formatNode = jsonNode.get("format");
- format = formatNode != null && formatNode.isTextual()? formatNode.textValue(): null;
+ format = formatNode != null && formatNode.isString()? formatNode.stringValue(): null;
return format;
}
@@ -1532,10 +1532,10 @@ public String toString() {
var map = new ConcurrentHashMap<Class<?>, Function<JsonNode, ?>>();
map.put(String.class, input -> {
- if (!input.isTextual()) {
+ if (!input.isString()) {
throw new IllegalStateException("found node that is not a string " + input.toString());
}
- return input.textValue();
+ return input.stringValue();
});
map.put(JsonNode.class, input -> input);
diff --git a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/LinkRepresentation.java b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/LinkRepresentation.java
index 291807a296f..61d7f2e1dc4 100644
--- a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/LinkRepresentation.java
+++ b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/LinkRepresentation.java
@@ -18,11 +18,13 @@
*/
package org.apache.causeway.viewer.restfulobjects.applib;
+import org.jspecify.annotations.Nullable;
+
import org.springframework.http.MediaType;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.node.JsonNodeFactory;
-import com.fasterxml.jackson.databind.node.ObjectNode;
+import tools.jackson.databind.JsonNode;
+import tools.jackson.databind.node.JsonNodeFactory;
+import tools.jackson.databind.node.ObjectNode;
/**
* @since 1.x {@index}
@@ -39,10 +41,10 @@ public LinkRepresentation(final JsonNode jsonNode) {
}
public String getRel() {
- return asObjectNode().path("rel").textValue();
+ return stringValue(asObjectNode().path("rel"));
}
- public LinkRepresentation withRel(final String rel) {
+ public LinkRepresentation withRel(final String rel) {
asObjectNode().put("rel", rel);
return this;
}
@@ -52,7 +54,7 @@ public LinkRepresentation withRel(Rel rel) {
}
public String getHref() {
- return asObjectNode().path("href").textValue();
+ return stringValue(asObjectNode().path("href"));
}
public LinkRepresentation withHref(final String href) {
@@ -74,12 +76,12 @@ public LinkRepresentation withTitle(final String title) {
}
public RestfulHttpMethod getHttpMethod() {
- final String methodStr = asObjectNode().path("method").textValue();
+ final String methodStr = stringValue(asObjectNode().path("method"));
return RestfulHttpMethod.valueOf(methodStr);
}
public MediaType getType() {
- final String typeStr = asObjectNode().path("type").textValue();
+ final String typeStr = stringValue(asObjectNode().path("type"));
if (typeStr == null) {
return MediaType.APPLICATION_JSON;
}
@@ -138,5 +140,15 @@ public boolean equals(final Object obj) {
public String toString() {
return "Link [rel=" + getRel() + ", href=" + getHref() + ", method=" + getHttpMethod() + ", type=" + getType() + "]";
}
+
+ // -- HELPER
+
+ @Nullable
+ private static String stringValue(JsonNode node) {
+ if(node==null
+ || node.isMissingNode()) return null;
+ return node.stringValue();
+ }
+
}
diff --git a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domainobjects/AbstractObjectMemberRepresentation.java b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domainobjects/AbstractObjectMemberRepresentation.java
index e249ffdeb55..ab343e96ae8 100644
--- a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domainobjects/AbstractObjectMemberRepresentation.java
+++ b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domainobjects/AbstractObjectMemberRepresentation.java
@@ -18,10 +18,10 @@
*/
package org.apache.causeway.viewer.restfulobjects.applib.domainobjects;
-import com.fasterxml.jackson.databind.JsonNode;
-
import org.apache.causeway.viewer.restfulobjects.applib.LinkRepresentation;
+import tools.jackson.databind.JsonNode;
+
/**
* @since 1.x {@index}
*/
diff --git a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domainobjects/ActionResultRepresentation.java b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domainobjects/ActionResultRepresentation.java
index fb1a45597c6..82c6f562a65 100644
--- a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domainobjects/ActionResultRepresentation.java
+++ b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domainobjects/ActionResultRepresentation.java
@@ -18,13 +18,13 @@
*/
package org.apache.causeway.viewer.restfulobjects.applib.domainobjects;
-import com.fasterxml.jackson.databind.JsonNode;
-
import org.apache.causeway.viewer.restfulobjects.applib.JsonRepresentation;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
+import tools.jackson.databind.JsonNode;
+
/**
* @since 1.x {@index}
*/
diff --git a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domainobjects/DomainObjectMemberRepresentation.java b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domainobjects/DomainObjectMemberRepresentation.java
index 4ea76c6d26e..f14abf09d6d 100644
--- a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domainobjects/DomainObjectMemberRepresentation.java
+++ b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domainobjects/DomainObjectMemberRepresentation.java
@@ -18,7 +18,7 @@
*/
package org.apache.causeway.viewer.restfulobjects.applib.domainobjects;
-import com.fasterxml.jackson.databind.JsonNode;
+import tools.jackson.databind.JsonNode;
/**
* Represents the members within the {@link DomainObjectRepresentation}'s <tt>members</tt>
diff --git a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domainobjects/DomainObjectRepresentation.java b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domainobjects/DomainObjectRepresentation.java
index 0776af5981e..ddc523e99d1 100644
--- a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domainobjects/DomainObjectRepresentation.java
+++ b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domainobjects/DomainObjectRepresentation.java
@@ -22,12 +22,12 @@
import java.util.function.Predicate;
import java.util.stream.Collectors;
-import com.fasterxml.jackson.databind.JsonNode;
-
import org.apache.causeway.viewer.restfulobjects.applib.JsonRepresentation;
import org.apache.causeway.viewer.restfulobjects.applib.LinkRepresentation;
import org.apache.causeway.viewer.restfulobjects.applib.Rel;
+import tools.jackson.databind.JsonNode;
+
/**
* @since 1.x {@index}
*/
diff --git a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domainobjects/DomainRepresentation.java b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domainobjects/DomainRepresentation.java
index bfd8370ebb5..1fb1aaa03b3 100644
--- a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domainobjects/DomainRepresentation.java
+++ b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domainobjects/DomainRepresentation.java
@@ -18,8 +18,6 @@
*/
package org.apache.causeway.viewer.restfulobjects.applib.domainobjects;
-import com.fasterxml.jackson.databind.JsonNode;
-
import org.apache.causeway.viewer.restfulobjects.applib.JsonRepresentation;
import org.apache.causeway.viewer.restfulobjects.applib.JsonRepresentation.HasExtensions;
import org.apache.causeway.viewer.restfulobjects.applib.JsonRepresentation.HasLinkToSelf;
@@ -27,6 +25,8 @@
import org.apache.causeway.viewer.restfulobjects.applib.LinkRepresentation;
import org.apache.causeway.viewer.restfulobjects.applib.Rel;
+import tools.jackson.databind.JsonNode;
+
/**
* @since 1.x {@index}
*/
diff --git a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domainobjects/ListRepresentation.java b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domainobjects/ListRepresentation.java
index f529211751b..61b74d929f7 100644
--- a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domainobjects/ListRepresentation.java
+++ b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domainobjects/ListRepresentation.java
@@ -18,13 +18,13 @@
*/
package org.apache.causeway.viewer.restfulobjects.applib.domainobjects;
-import com.fasterxml.jackson.databind.JsonNode;
-
import org.apache.causeway.viewer.restfulobjects.applib.JsonRepresentation;
import org.apache.causeway.viewer.restfulobjects.applib.JsonRepresentation.HasLinkToUp;
import org.apache.causeway.viewer.restfulobjects.applib.LinkRepresentation;
import org.apache.causeway.viewer.restfulobjects.applib.Rel;
+import tools.jackson.databind.JsonNode;
+
/**
* @since 1.x {@index}
*/
diff --git a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domainobjects/ObjectActionRepresentation.java b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domainobjects/ObjectActionRepresentation.java
index ed092015c7d..1ab1951b483 100644
--- a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domainobjects/ObjectActionRepresentation.java
+++ b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domainobjects/ObjectActionRepresentation.java
@@ -18,11 +18,11 @@
*/
package org.apache.causeway.viewer.restfulobjects.applib.domainobjects;
-import com.fasterxml.jackson.databind.JsonNode;
-
import org.apache.causeway.viewer.restfulobjects.applib.LinkRepresentation;
import org.apache.causeway.viewer.restfulobjects.applib.Rel;
+import tools.jackson.databind.JsonNode;
+
/**
* @since 1.x {@index}
*/
diff --git a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domainobjects/ObjectCollectionRepresentation.java b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domainobjects/ObjectCollectionRepresentation.java
index 2449236f46b..d6f13f29576 100644
--- a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domainobjects/ObjectCollectionRepresentation.java
+++ b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domainobjects/ObjectCollectionRepresentation.java
@@ -18,10 +18,10 @@
*/
package org.apache.causeway.viewer.restfulobjects.applib.domainobjects;
-import com.fasterxml.jackson.databind.JsonNode;
-
import org.apache.causeway.viewer.restfulobjects.applib.JsonRepresentation;
+import tools.jackson.databind.JsonNode;
+
/**
* @since 1.x {@index}
*/
diff --git a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domainobjects/ObjectPropertyRepresentation.java b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domainobjects/ObjectPropertyRepresentation.java
index 3b52f6d9d46..40adb2b0cca 100644
--- a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domainobjects/ObjectPropertyRepresentation.java
+++ b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domainobjects/ObjectPropertyRepresentation.java
@@ -18,7 +18,7 @@
*/
package org.apache.causeway.viewer.restfulobjects.applib.domainobjects;
-import com.fasterxml.jackson.databind.JsonNode;
+import tools.jackson.databind.JsonNode;
/**
* @since 1.x {@index}
diff --git a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domainobjects/ScalarValueRepresentation.java b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domainobjects/ScalarValueRepresentation.java
index 072f89d918f..902e28dd282 100644
--- a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domainobjects/ScalarValueRepresentation.java
+++ b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domainobjects/ScalarValueRepresentation.java
@@ -18,10 +18,10 @@
*/
package org.apache.causeway.viewer.restfulobjects.applib.domainobjects;
-import com.fasterxml.jackson.databind.JsonNode;
-
import org.apache.causeway.viewer.restfulobjects.applib.JsonRepresentation;
+import tools.jackson.databind.JsonNode;
+
/**
* @since 1.x {@index}
*/
diff --git a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domaintypes/AbstractTypeMemberRepresentation.java b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domaintypes/AbstractTypeMemberRepresentation.java
index fdc3cd8820d..65ba2d41bc6 100644
--- a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domaintypes/AbstractTypeMemberRepresentation.java
+++ b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domaintypes/AbstractTypeMemberRepresentation.java
@@ -18,10 +18,10 @@
*/
package org.apache.causeway.viewer.restfulobjects.applib.domaintypes;
-import com.fasterxml.jackson.databind.JsonNode;
-
import org.apache.causeway.viewer.restfulobjects.applib.domainobjects.DomainRepresentation;
+import tools.jackson.databind.JsonNode;
+
/**
* @since 1.x {@index}
*/
diff --git a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domaintypes/ActionDescriptionRepresentation.java b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domaintypes/ActionDescriptionRepresentation.java
index 87e59d36855..aad5a42d1d2 100644
--- a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domaintypes/ActionDescriptionRepresentation.java
+++ b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domaintypes/ActionDescriptionRepresentation.java
@@ -18,7 +18,7 @@
*/
package org.apache.causeway.viewer.restfulobjects.applib.domaintypes;
-import com.fasterxml.jackson.databind.JsonNode;
+import tools.jackson.databind.JsonNode;
/**
* @since 1.x {@index}
diff --git a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domaintypes/ActionParameterDescriptionRepresentation.java b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domaintypes/ActionParameterDescriptionRepresentation.java
index 0f88d3f0b3c..c75280ea140 100644
--- a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domaintypes/ActionParameterDescriptionRepresentation.java
+++ b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domaintypes/ActionParameterDescriptionRepresentation.java
@@ -18,7 +18,7 @@
*/
package org.apache.causeway.viewer.restfulobjects.applib.domaintypes;
-import com.fasterxml.jackson.databind.JsonNode;
+import tools.jackson.databind.JsonNode;
/**
* @since 1.x {@index}
diff --git a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domaintypes/CollectionDescriptionRepresentation.java b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domaintypes/CollectionDescriptionRepresentation.java
index 010172d94fe..8f86d726fbf 100644
--- a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domaintypes/CollectionDescriptionRepresentation.java
+++ b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domaintypes/CollectionDescriptionRepresentation.java
@@ -18,7 +18,7 @@
*/
package org.apache.causeway.viewer.restfulobjects.applib.domaintypes;
-import com.fasterxml.jackson.databind.JsonNode;
+import tools.jackson.databind.JsonNode;
/**
* @since 1.x {@index}
diff --git a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domaintypes/DomainTypeRepresentation.java b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domaintypes/DomainTypeRepresentation.java
index 1479e80cddf..22f2f0d7760 100644
--- a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domaintypes/DomainTypeRepresentation.java
+++ b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domaintypes/DomainTypeRepresentation.java
@@ -18,10 +18,10 @@
*/
package org.apache.causeway.viewer.restfulobjects.applib.domaintypes;
-import com.fasterxml.jackson.databind.JsonNode;
-
import org.apache.causeway.viewer.restfulobjects.applib.domainobjects.DomainRepresentation;
+import tools.jackson.databind.JsonNode;
+
/**
* @since 1.x {@index}
*/
diff --git a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domaintypes/PropertyDescriptionRepresentation.java b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domaintypes/PropertyDescriptionRepresentation.java
index 792d13ecb95..629b885de14 100644
--- a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domaintypes/PropertyDescriptionRepresentation.java
+++ b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domaintypes/PropertyDescriptionRepresentation.java
@@ -18,7 +18,7 @@
*/
package org.apache.causeway.viewer.restfulobjects.applib.domaintypes;
-import com.fasterxml.jackson.databind.JsonNode;
+import tools.jackson.databind.JsonNode;
/**
* @since 1.x {@index}
diff --git a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domaintypes/TypeActionResultRepresentation.java b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domaintypes/TypeActionResultRepresentation.java
index a0eee4b5d37..abf7ea950ed 100644
--- a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domaintypes/TypeActionResultRepresentation.java
+++ b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domaintypes/TypeActionResultRepresentation.java
@@ -18,10 +18,10 @@
*/
package org.apache.causeway.viewer.restfulobjects.applib.domaintypes;
-import com.fasterxml.jackson.databind.JsonNode;
-
import org.apache.causeway.viewer.restfulobjects.applib.domainobjects.DomainRepresentation;
+import tools.jackson.databind.JsonNode;
+
/**
* @since 1.x {@index}
*/
diff --git a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domaintypes/TypeListRepresentation.java b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domaintypes/TypeListRepresentation.java
index 7a9eb085b49..e76cbb90c5d 100644
--- a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domaintypes/TypeListRepresentation.java
+++ b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/domaintypes/TypeListRepresentation.java
@@ -18,10 +18,10 @@
*/
package org.apache.causeway.viewer.restfulobjects.applib.domaintypes;
-import com.fasterxml.jackson.databind.JsonNode;
-
import org.apache.causeway.viewer.restfulobjects.applib.domainobjects.DomainRepresentation;
+import tools.jackson.databind.JsonNode;
+
/**
* @since 1.x {@index}
*/
diff --git a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/errors/ErrorRepresentation.java b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/errors/ErrorRepresentation.java
index ddf5c2a7211..8350004fee7 100644
--- a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/errors/ErrorRepresentation.java
+++ b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/errors/ErrorRepresentation.java
@@ -18,10 +18,10 @@
*/
package org.apache.causeway.viewer.restfulobjects.applib.errors;
-import com.fasterxml.jackson.databind.JsonNode;
-
import org.apache.causeway.viewer.restfulobjects.applib.JsonRepresentation;
+import tools.jackson.databind.JsonNode;
+
/**
* @since 1.x {@index}
*/
diff --git a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/health/HealthRepresentation.java b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/health/HealthRepresentation.java
index 47405fdf339..d636f81adb6 100644
--- a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/health/HealthRepresentation.java
+++ b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/health/HealthRepresentation.java
@@ -18,13 +18,13 @@
*/
package org.apache.causeway.viewer.restfulobjects.applib.health;
-import com.fasterxml.jackson.databind.JsonNode;
-
import org.apache.causeway.viewer.restfulobjects.applib.JsonRepresentation.HasLinkToUp;
import org.apache.causeway.viewer.restfulobjects.applib.LinkRepresentation;
import org.apache.causeway.viewer.restfulobjects.applib.Rel;
import org.apache.causeway.viewer.restfulobjects.applib.domainobjects.DomainRepresentation;
+import tools.jackson.databind.JsonNode;
+
/**
* @since 1.x {@index}
*/
diff --git a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/homepage/HomePageRepresentation.java b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/homepage/HomePageRepresentation.java
index 423cd77959f..3fd3dcbb966 100644
--- a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/homepage/HomePageRepresentation.java
+++ b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/homepage/HomePageRepresentation.java
@@ -18,12 +18,12 @@
*/
package org.apache.causeway.viewer.restfulobjects.applib.homepage;
-import com.fasterxml.jackson.databind.JsonNode;
-
import org.apache.causeway.viewer.restfulobjects.applib.LinkRepresentation;
import org.apache.causeway.viewer.restfulobjects.applib.Rel;
import org.apache.causeway.viewer.restfulobjects.applib.domainobjects.DomainRepresentation;
+import tools.jackson.databind.JsonNode;
+
/**
* @since 1.x {@index}
*/
diff --git a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/user/UserRepresentation.java b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/user/UserRepresentation.java
index 05543a64561..1c7f51a02ef 100644
--- a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/user/UserRepresentation.java
+++ b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/user/UserRepresentation.java
@@ -18,14 +18,14 @@
*/
package org.apache.causeway.viewer.restfulobjects.applib.user;
-import com.fasterxml.jackson.databind.JsonNode;
-
import org.apache.causeway.viewer.restfulobjects.applib.JsonRepresentation;
import org.apache.causeway.viewer.restfulobjects.applib.JsonRepresentation.HasLinkToUp;
import org.apache.causeway.viewer.restfulobjects.applib.LinkRepresentation;
import org.apache.causeway.viewer.restfulobjects.applib.Rel;
import org.apache.causeway.viewer.restfulobjects.applib.domainobjects.DomainRepresentation;
+import tools.jackson.databind.JsonNode;
+
/**
* @since 1.x {@index}
*/
diff --git a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/util/JsonMapper.java b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/util/JsonMapperUtil.java
similarity index 50%
rename from viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/util/JsonMapper.java
rename to viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/util/JsonMapperUtil.java
index b239017363f..b525c81558a 100644
--- a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/util/JsonMapper.java
+++ b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/util/JsonMapperUtil.java
@@ -22,29 +22,25 @@
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
-import com.fasterxml.jackson.core.JsonGenerationException;
-import com.fasterxml.jackson.core.JsonGenerator;
-import com.fasterxml.jackson.core.JsonParseException;
-import com.fasterxml.jackson.core.JsonParser;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.core.Version;
-import com.fasterxml.jackson.databind.DeserializationContext;
-import com.fasterxml.jackson.databind.DeserializationFeature;
-import com.fasterxml.jackson.databind.JsonDeserializer;
-import com.fasterxml.jackson.databind.JsonMappingException;
-import com.fasterxml.jackson.databind.JsonSerializer;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializationFeature;
-import com.fasterxml.jackson.databind.SerializerProvider;
-import com.fasterxml.jackson.databind.module.SimpleModule;
-
import org.apache.causeway.viewer.restfulobjects.applib.JsonRepresentation;
+import tools.jackson.core.JsonGenerator;
+import tools.jackson.core.JsonParser;
+import tools.jackson.core.Version;
+import tools.jackson.databind.DeserializationContext;
+import tools.jackson.databind.DeserializationFeature;
+import tools.jackson.databind.SerializationContext;
+import tools.jackson.databind.SerializationFeature;
+import tools.jackson.databind.ValueDeserializer;
+import tools.jackson.databind.ValueSerializer;
+import tools.jackson.databind.json.JsonMapper;
+import tools.jackson.databind.module.SimpleModule;
+
/**
- * @since 1.x {@index}
+ * @since 4.x {@index}
*/
-public record JsonMapper(
- ObjectMapper objectMapper,
+public record JsonMapperUtil(
+ JsonMapper jsonMapper,
PrettyPrinting prettyPrinting) {
public enum PrettyPrinting {
@@ -53,64 +49,64 @@ public enum PrettyPrinting {
}
/**
- * Returns a {@link org.apache.causeway.viewer.restfulobjects.applib.util.JsonMapper.PrettyPrinting#ENABLE pretty-printing enabled} JSON mapper.
+ * Returns a {@link org.apache.causeway.viewer.restfulobjects.applib.util.JsonMapperUtil.PrettyPrinting#ENABLE pretty-printing enabled} JSON mapper.
*/
- public static final JsonMapper instance() {
+ public static final JsonMapperUtil instance() {
return instance(PrettyPrinting.ENABLE);
}
- public static final JsonMapper instance(final PrettyPrinting prettyPrinting) {
- return instanceByConfig.computeIfAbsent(prettyPrinting, JsonMapper::new);
+ public static final JsonMapperUtil instance(final PrettyPrinting prettyPrinting) {
+ return instanceByConfig.computeIfAbsent(prettyPrinting, JsonMapperUtil::new);
}
- public JsonRepresentation read(final String json) throws JsonParseException, JsonMappingException, IOException {
+ public JsonRepresentation read(final String json) throws IOException {
return read(json, JsonRepresentation.class);
}
- public <T> T read(final String json, final Class<T> requiredType) throws JsonParseException, JsonMappingException, IOException {
- return objectMapper.readValue(json, requiredType);
+ public <T> T read(final String json, final Class<T> requiredType) throws IOException {
+ return jsonMapper.readValue(json, requiredType);
}
- public String write(final Object object) throws JsonGenerationException, JsonMappingException, IOException {
- return objectMapper.writeValueAsString(object);
+ public String write(final Object object) throws IOException {
+ return jsonMapper.writeValueAsString(object);
}
// -- HELPER
// non canonical constructor
- private JsonMapper(final PrettyPrinting prettyPrinting) {
+ private JsonMapperUtil(final PrettyPrinting prettyPrinting) {
this(createObjectMapper(prettyPrinting), prettyPrinting);
}
- private static final class JsonRepresentationDeserializer extends JsonDeserializer<JsonRepresentation> {
+ private static final class JsonRepresentationDeserializer extends ValueDeserializer<JsonRepresentation> {
@Override
- public JsonRepresentation deserialize(final JsonParser jp, final DeserializationContext ctxt) throws IOException {
- return new JsonRepresentation(jp.getCodec().readTree(jp));
+ public JsonRepresentation deserialize(final JsonParser jp, final DeserializationContext ctxt) {
+ return new JsonRepresentation(jp.objectReadContext().readTree(jp));
}
}
- private static final class JsonRepresentationSerializer extends JsonSerializer<Object> {
+ private static final class JsonRepresentationSerializer extends ValueSerializer<Object> {
@Override
- public void serialize(final Object value, final JsonGenerator jgen, final SerializerProvider provider)
- throws IOException, JsonProcessingException {
+ public void serialize(final Object value, final JsonGenerator jgen, final SerializationContext ctxt) {
jgen.writeTree(((JsonRepresentation) value).asJsonNode());
}
}
- private static ObjectMapper createObjectMapper(final PrettyPrinting prettyPrinting) {
- final ObjectMapper objectMapper = new ObjectMapper();
+ private static JsonMapper createObjectMapper(final PrettyPrinting prettyPrinting) {
+ var builder = JsonMapper.builder();
+
final SimpleModule jsonModule = new SimpleModule("json", new Version(1, 0, 0, null, "org.apache", "causeway"));
jsonModule.addDeserializer(JsonRepresentation.class, new JsonRepresentationDeserializer());
jsonModule.addSerializer(JsonRepresentation.class, new JsonRepresentationSerializer());
- objectMapper.registerModule(jsonModule);
+ builder.addModule(jsonModule);
if (prettyPrinting == PrettyPrinting.ENABLE) {
- objectMapper.configure(SerializationFeature.INDENT_OUTPUT, true);
+ builder.configure(SerializationFeature.INDENT_OUTPUT, true);
}
- objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
- return objectMapper;
+ builder.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+ return builder.build();
}
- private static final Map<PrettyPrinting, JsonMapper> instanceByConfig = new ConcurrentHashMap<>();
+ private static final Map<PrettyPrinting, JsonMapperUtil> instanceByConfig = new ConcurrentHashMap<>();
}
diff --git a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/version/VersionRepresentation.java b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/version/VersionRepresentation.java
index b4a82f6ecb3..6631ff838b7 100644
--- a/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/version/VersionRepresentation.java
+++ b/viewers/restfulobjects/applib/src/main/java/org/apache/causeway/viewer/restfulobjects/applib/version/VersionRepresentation.java
@@ -18,14 +18,14 @@
*/
package org.apache.causeway.viewer.restfulobjects.applib.version;
-import com.fasterxml.jackson.databind.JsonNode;
-
import org.apache.causeway.viewer.restfulobjects.applib.JsonRepresentation;
import org.apache.causeway.viewer.restfulobjects.applib.JsonRepresentation.HasLinkToUp;
import org.apache.causeway.viewer.restfulobjects.applib.LinkRepresentation;
import org.apache.causeway.viewer.restfulobjects.applib.Rel;
import org.apache.causeway.viewer.restfulobjects.applib.domainobjects.DomainRepresentation;
+import tools.jackson.databind.JsonNode;
+
/**
* @since 1.x {@index}
*/
diff --git a/viewers/restfulobjects/applib/src/test/java/org/apache/causeway/viewer/restfulobjects/applib/JsonFixture.java b/viewers/restfulobjects/applib/src/test/java/org/apache/causeway/viewer/restfulobjects/applib/JsonFixture.java
index 1c59a51e663..b64d07d6b40 100644
--- a/viewers/restfulobjects/applib/src/test/java/org/apache/causeway/viewer/restfulobjects/applib/JsonFixture.java
+++ b/viewers/restfulobjects/applib/src/test/java/org/apache/causeway/viewer/restfulobjects/applib/JsonFixture.java
@@ -21,12 +21,12 @@
import java.io.IOException;
import java.nio.charset.StandardCharsets;
-import com.fasterxml.jackson.core.JsonParseException;
-import com.fasterxml.jackson.databind.JsonMappingException;
-import com.fasterxml.jackson.databind.JsonNode;
+import org.springframework.boot.json.JsonParseException;
import org.apache.causeway.commons.internal.base._Strings;
-import org.apache.causeway.viewer.restfulobjects.applib.util.JsonMapper;
+import org.apache.causeway.viewer.restfulobjects.applib.util.JsonMapperUtil;
+
+import tools.jackson.databind.JsonNode;
public class JsonFixture {
@@ -34,11 +34,11 @@ private JsonFixture() {
}
public static JsonNode readJson(final String resourceName)
- throws JsonParseException, JsonMappingException, IOException {
+ throws JsonParseException, IOException {
var json = _Strings.read(JsonFixture.class.getResourceAsStream(resourceName), StandardCharsets.UTF_8);
- return JsonMapper.instance().read(json, JsonNode.class);
+ return JsonMapperUtil.instance().read(json, JsonNode.class);
}
}
diff --git a/viewers/restfulobjects/client/src/main/java/module-info.java b/viewers/restfulobjects/client/src/main/java/module-info.java
index b586a4ec108..e2fa667ae6a 100644
--- a/viewers/restfulobjects/client/src/main/java/module-info.java
+++ b/viewers/restfulobjects/client/src/main/java/module-info.java
@@ -26,8 +26,8 @@
requires static lombok;
- requires com.fasterxml.jackson.core;
- requires com.fasterxml.jackson.databind;
+ requires tools.jackson.core;
+ requires tools.jackson.databind;
requires jakarta.annotation;
requires jakarta.ws.rs;
requires jakarta.xml.bind;
diff --git a/viewers/restfulobjects/client/src/main/java/org/apache/causeway/viewer/restfulobjects/client/ResponseDigester.java b/viewers/restfulobjects/client/src/main/java/org/apache/causeway/viewer/restfulobjects/client/ResponseDigester.java
index d94c15abbb3..ccd4d03ae10 100644
--- a/viewers/restfulobjects/client/src/main/java/org/apache/causeway/viewer/restfulobjects/client/ResponseDigester.java
+++ b/viewers/restfulobjects/client/src/main/java/org/apache/causeway/viewer/restfulobjects/client/ResponseDigester.java
@@ -25,8 +25,6 @@
import jakarta.ws.rs.core.GenericType;
import jakarta.ws.rs.core.Response;
-import com.fasterxml.jackson.databind.ObjectMapper;
-
import org.jspecify.annotations.Nullable;
import org.apache.causeway.applib.client.RepresentationTypeSimplifiedV2;
@@ -38,6 +36,8 @@
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
+import tools.jackson.databind.ObjectMapper;
+
interface ResponseDigester {
<T> T readSingle(Class<T> entityType, Response response);
diff --git a/viewers/restfulobjects/client/src/main/java/org/apache/causeway/viewer/restfulobjects/client/auth/oauth2/azure/TokenParser.java b/viewers/restfulobjects/client/src/main/java/org/apache/causeway/viewer/restfulobjects/client/auth/oauth2/azure/TokenParser.java
index c0c9c6ad5d4..0c8e92dc4fa 100644
--- a/viewers/restfulobjects/client/src/main/java/org/apache/causeway/viewer/restfulobjects/client/auth/oauth2/azure/TokenParser.java
+++ b/viewers/restfulobjects/client/src/main/java/org/apache/causeway/viewer/restfulobjects/client/auth/oauth2/azure/TokenParser.java
@@ -18,22 +18,20 @@
*/
package org.apache.causeway.viewer.restfulobjects.client.auth.oauth2.azure;
-import java.io.IOException;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-
import org.apache.causeway.commons.functional.Railway;
import lombok.Data;
+import tools.jackson.databind.ObjectMapper;
+
class TokenParser {
static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
- Railway<IOException,TokenSuccessResponse> parseTokenEntity(final String entity) {
+ Railway<Exception,TokenSuccessResponse> parseTokenEntity(final String entity) {
try {
return Railway.success(OBJECT_MAPPER.readerFor(TokenSuccessResponse.class).readValue(entity));
- } catch (IOException e) {
+ } catch (Exception e) {
return Railway.failure(e);
}
}
diff --git a/viewers/restfulobjects/rendering/src/main/java/module-info.java b/viewers/restfulobjects/rendering/src/main/java/module-info.java
index e93507379d1..60c73c80c10 100644
--- a/viewers/restfulobjects/rendering/src/main/java/module-info.java
+++ b/viewers/restfulobjects/rendering/src/main/java/module-info.java
@@ -32,8 +32,8 @@
requires static lombok;
requires org.apache.causeway.viewer.restfulobjects.applib;
- requires com.fasterxml.jackson.core;
- requires com.fasterxml.jackson.databind;
+ requires tools.jackson.core; requires com.fasterxml.jackson.core; //swagger 2.2.40
+ requires tools.jackson.databind; requires com.fasterxml.jackson.databind; //swagger 2.2.40
requires jakarta.activation;
requires jakarta.annotation;
requires jakarta.inject;
@@ -54,4 +54,5 @@
requires spring.core;
requires io.swagger.v3.oas.models;
requires io.swagger.v3.core;
+
}
\ No newline at end of file
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/ResponseFactory.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/ResponseFactory.java
index 6243800ac7a..d53a17aeb2d 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/ResponseFactory.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/ResponseFactory.java
@@ -34,12 +34,12 @@
import org.apache.causeway.core.config.environment.CausewaySystemEnvironment;
import org.apache.causeway.core.metamodel.context.MetaModelContext;
import org.apache.causeway.viewer.restfulobjects.applib.JsonRepresentation;
-import org.apache.causeway.viewer.restfulobjects.applib.util.JsonMapper;
+import org.apache.causeway.viewer.restfulobjects.applib.util.JsonMapperUtil;
import org.apache.causeway.viewer.restfulobjects.rendering.util.JsonWriterUtil;
public record ResponseFactory(
@Nullable ClockService clockService,
- JsonMapper.PrettyPrinting prettyPrinting) {
+ JsonMapperUtil.PrettyPrinting prettyPrinting) {
// non-canonical constructor
public ResponseFactory(MetaModelContext mmc) {
@@ -134,11 +134,11 @@ private String now() {
return DATE_FORMAT.format(now);
}
- private static JsonMapper.PrettyPrinting prettyPrinting(@Nullable CausewaySystemEnvironment env) {
+ private static JsonMapperUtil.PrettyPrinting prettyPrinting(@Nullable CausewaySystemEnvironment env) {
return env!=null
&& env.isPrototyping()
- ? JsonMapper.PrettyPrinting.ENABLE
- : JsonMapper.PrettyPrinting.DISABLE;
+ ? JsonMapperUtil.PrettyPrinting.ENABLE
+ : JsonMapperUtil.PrettyPrinting.DISABLE;
}
}
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/AbstractObjectMemberReprRenderer.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/AbstractObjectMemberReprRenderer.java
index b6db8e35873..6af3b08e0c2 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/AbstractObjectMemberReprRenderer.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/AbstractObjectMemberReprRenderer.java
@@ -18,7 +18,9 @@
*/
package org.apache.causeway.viewer.restfulobjects.rendering.domainobjects;
-import com.fasterxml.jackson.databind.node.NullNode;
+import tools.jackson.databind.node.NullNode;
+
+import org.jspecify.annotations.NonNull;
import org.apache.causeway.applib.annotation.Where;
import org.apache.causeway.commons.internal.base._Casts;
@@ -36,8 +38,6 @@
import org.apache.causeway.viewer.restfulobjects.rendering.LinkFollowSpecs;
import org.apache.causeway.viewer.restfulobjects.rendering.ReprRendererAbstract;
-import org.jspecify.annotations.NonNull;
-
public abstract class AbstractObjectMemberReprRenderer<T extends ObjectMember>
extends ReprRendererAbstract<ManagedMember> {
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/ActionResultReprRenderer.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/ActionResultReprRenderer.java
index 08293fbc59f..3b7dffffd66 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/ActionResultReprRenderer.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/ActionResultReprRenderer.java
@@ -21,7 +21,7 @@
import java.util.Map;
import java.util.stream.Stream;
-import com.fasterxml.jackson.databind.node.NullNode;
+import tools.jackson.databind.node.NullNode;
import org.apache.causeway.core.metamodel.facets.collections.CollectionFacet;
import org.apache.causeway.core.metamodel.object.ManagedObject;
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/ObjectActionReprRenderer.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/ObjectActionReprRenderer.java
index 579bc26c939..a289319f086 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/ObjectActionReprRenderer.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/ObjectActionReprRenderer.java
@@ -21,7 +21,7 @@
import java.util.List;
import java.util.Map;
-import com.fasterxml.jackson.databind.node.NullNode;
+import tools.jackson.databind.node.NullNode;
import org.apache.causeway.applib.annotation.SemanticsOf;
import org.apache.causeway.applib.annotation.Where;
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java
index 627f0db7a77..3dcee2cb88b 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/ObjectPropertyReprRenderer.java
@@ -20,7 +20,7 @@
import java.util.List;
-import com.fasterxml.jackson.databind.node.NullNode;
+import tools.jackson.databind.node.NullNode;
import org.apache.causeway.applib.annotation.Where;
import org.apache.causeway.commons.internal.collections._Lists;
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domaintypes/DomainTypeReprRenderer.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domaintypes/DomainTypeReprRenderer.java
index 0b2021b5a04..a1cd328131e 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domaintypes/DomainTypeReprRenderer.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/domaintypes/DomainTypeReprRenderer.java
@@ -18,7 +18,7 @@
*/
package org.apache.causeway.viewer.restfulobjects.rendering.domaintypes;
-import com.fasterxml.jackson.databind.node.NullNode;
+import tools.jackson.databind.node.NullNode;
import org.apache.causeway.commons.internal.base._Strings;
import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceOrgApacheCausewayV2.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceOrgApacheCausewayV2.java
index bb2a04ce37d..4df7714e34b 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceOrgApacheCausewayV2.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceOrgApacheCausewayV2.java
@@ -27,7 +27,7 @@
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
-import com.fasterxml.jackson.databind.node.POJONode;
+import tools.jackson.databind.node.POJONode;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/valuerender/JsonValueConverter.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/valuerender/JsonValueConverter.java
index 66c70c738bf..fec0da2c2c0 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/valuerender/JsonValueConverter.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/valuerender/JsonValueConverter.java
@@ -20,8 +20,8 @@
import java.util.OptionalInt;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.node.NullNode;
+import tools.jackson.databind.JsonNode;
+import tools.jackson.databind.node.NullNode;
import org.jspecify.annotations.NonNull;
import org.jspecify.annotations.Nullable;
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/valuerender/JsonValueEncoderService.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/valuerender/JsonValueEncoderService.java
index e34b39caac1..31c28476b1b 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/valuerender/JsonValueEncoderService.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/service/valuerender/JsonValueEncoderService.java
@@ -18,17 +18,16 @@
*/
package org.apache.causeway.viewer.restfulobjects.rendering.service.valuerender;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.node.NullNode;
+import tools.jackson.databind.JsonNode;
+import tools.jackson.databind.node.NullNode;
+import org.jspecify.annotations.NonNull;
import org.jspecify.annotations.Nullable;
import org.apache.causeway.core.metamodel.object.ManagedObject;
import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
import org.apache.causeway.viewer.restfulobjects.applib.JsonRepresentation;
-import org.jspecify.annotations.NonNull;
-
/**
* Converts value representing {@link ManagedObject}s to their corresponding JSON representation
* and back.
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/util/JsonWriterUtil.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/util/JsonWriterUtil.java
index 8badbb5e85c..89b37836121 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/util/JsonWriterUtil.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/util/JsonWriterUtil.java
@@ -21,7 +21,7 @@
import org.jspecify.annotations.Nullable;
import org.apache.causeway.core.config.environment.CausewaySystemEnvironment;
-import org.apache.causeway.viewer.restfulobjects.applib.util.JsonMapper;
+import org.apache.causeway.viewer.restfulobjects.applib.util.JsonMapperUtil;
import lombok.SneakyThrows;
@@ -31,14 +31,14 @@
public final class JsonWriterUtil {
@SneakyThrows
- public String jsonFor(final Object object, final JsonMapper.PrettyPrinting prettyPrinting) {
- return JsonMapper.instance(prettyPrinting).write(object);
+ public String jsonFor(final Object object, final JsonMapperUtil.PrettyPrinting prettyPrinting) {
+ return JsonMapperUtil.instance(prettyPrinting).write(object);
}
public String jsonFor(final Object object, final @Nullable CausewaySystemEnvironment systemEnvironment) {
var prettyPrinting = (systemEnvironment!=null && systemEnvironment.isPrototyping())
- ? JsonMapper.PrettyPrinting.ENABLE
- : JsonMapper.PrettyPrinting.DISABLE;
+ ? JsonMapperUtil.PrettyPrinting.ENABLE
+ : JsonMapperUtil.PrettyPrinting.DISABLE;
return jsonFor(object, prettyPrinting);
}
diff --git a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/util/RequestParams.java b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/util/RequestParams.java
index b53441c0ffb..771af35f618 100644
--- a/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/util/RequestParams.java
+++ b/viewers/restfulobjects/rendering/src/main/java/org/apache/causeway/viewer/restfulobjects/rendering/util/RequestParams.java
@@ -22,9 +22,6 @@
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
-import com.fasterxml.jackson.core.JsonParseException;
-import com.fasterxml.jackson.databind.JsonMappingException;
-
import org.jspecify.annotations.NonNull;
import org.jspecify.annotations.Nullable;
@@ -33,9 +30,11 @@
import org.apache.causeway.commons.internal.base._Bytes;
import org.apache.causeway.commons.internal.base._Strings;
import org.apache.causeway.viewer.restfulobjects.applib.JsonRepresentation;
-import org.apache.causeway.viewer.restfulobjects.applib.util.JsonMapper;
+import org.apache.causeway.viewer.restfulobjects.applib.util.JsonMapperUtil;
import org.apache.causeway.viewer.restfulobjects.rendering.RestfulObjectsApplicationException;
+import tools.jackson.core.JacksonException;
+
public record RequestParams(
RequestParams.@NonNull Nature nature,
@Nullable String raw) {
@@ -88,16 +87,13 @@ private static JsonRepresentation readAsMap(final String rawArgs, final String a
}
try {
- final JsonRepresentation jsonRepr = JsonMapper.instance().read(rawArgs);
+ final JsonRepresentation jsonRepr = JsonMapperUtil.instance().read(rawArgs);
if (!jsonRepr.isMap()) {
throw RestfulObjectsApplicationException
.createWithMessage(HttpStatus.BAD_REQUEST, "could not read %s as a JSON map".formatted(argsNature));
}
return jsonRepr;
- } catch (final JsonParseException e) {
- throw RestfulObjectsApplicationException
- .createWithCauseAndMessage(HttpStatus.BAD_REQUEST, e, "could not parse %s".formatted(argsNature));
- } catch (final JsonMappingException e) {
+ } catch (final JacksonException e) {
throw RestfulObjectsApplicationException
.createWithCauseAndMessage(HttpStatus.BAD_REQUEST, e, "could not read %s as JSON".formatted(argsNature));
} catch (final IOException e) {
diff --git a/viewers/restfulobjects/rendering/src/test/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoderTest.java b/viewers/restfulobjects/rendering/src/test/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoderTest.java
index a7b86f0f9ee..97b19557e2b 100644
--- a/viewers/restfulobjects/rendering/src/test/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoderTest.java
+++ b/viewers/restfulobjects/rendering/src/test/java/org/apache/causeway/viewer/restfulobjects/rendering/domainobjects/JsonValueEncoderTest.java
@@ -21,14 +21,6 @@
import java.math.BigDecimal;
import java.math.BigInteger;
-import com.fasterxml.jackson.databind.node.BigIntegerNode;
-import com.fasterxml.jackson.databind.node.BooleanNode;
-import com.fasterxml.jackson.databind.node.DecimalNode;
-import com.fasterxml.jackson.databind.node.DoubleNode;
-import com.fasterxml.jackson.databind.node.IntNode;
-import com.fasterxml.jackson.databind.node.LongNode;
-import com.fasterxml.jackson.databind.node.TextNode;
-
import org.hamcrest.Matchers;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -43,6 +35,14 @@
import org.apache.causeway.viewer.restfulobjects.applib.JsonRepresentation;
+import tools.jackson.databind.node.BigIntegerNode;
+import tools.jackson.databind.node.BooleanNode;
+import tools.jackson.databind.node.DecimalNode;
+import tools.jackson.databind.node.DoubleNode;
+import tools.jackson.databind.node.IntNode;
+import tools.jackson.databind.node.LongNode;
+import tools.jackson.databind.node.StringNode;
+
class JsonValueEncoderTest
extends JsonValueEncoderTestAbstract {
@@ -60,7 +60,7 @@ void whenManagedObjectIsNull() {
@Test
void whenSpecIsNull() throws Exception {
- var representation = new JsonRepresentation(TextNode.valueOf("aString"));
+ var representation = new JsonRepresentation(StringNode.valueOf("aString"));
assertThrows(IllegalArgumentException.class, ()->{
jsonValueEncoder.asAdapter(null, representation, null);
});
@@ -90,7 +90,7 @@ void whenReprIsAMap() throws Exception {
@Test
void whenSpecDoesNotHaveAnEncodableFacet() throws Exception {
- var representation = new JsonRepresentation(TextNode.valueOf("aString"));
+ var representation = new JsonRepresentation(StringNode.valueOf("aString"));
var spec = specFor(Object.class); // arbitrary non-value class, pick any
assertThrows(IllegalArgumentException.class, ()->{
assertNull(jsonValueEncoder.asAdapter(spec, representation, null));
@@ -114,7 +114,7 @@ void whenObjectSpecIsIncompatibleWithRepr(final Class<?> correspondingClass) {
// when repr is 'string'
assertThrows(IllegalArgumentException.class, ()->{
- var representation = new JsonRepresentation(TextNode.valueOf("aString"));
+ var representation = new JsonRepresentation(StringNode.valueOf("aString"));
jsonValueEncoder.asAdapter(spec, representation, null);
});
@@ -217,7 +217,7 @@ void whenReprIsBigDecimal() throws Exception {
void whenReprIsString() throws Exception {
// given
var spec = specFor(String.class);
- var representation = new JsonRepresentation(TextNode.valueOf("aString"));
+ var representation = new JsonRepresentation(StringNode.valueOf("aString"));
// when
var adapter = jsonValueEncoder.asAdapter(spec, representation, null);
diff --git a/viewers/restfulobjects/test/pom.xml b/viewers/restfulobjects/test/pom.xml
index b5a3ac4cbfd..8a5913dd26e 100644
--- a/viewers/restfulobjects/test/pom.xml
+++ b/viewers/restfulobjects/test/pom.xml
@@ -64,7 +64,7 @@
</dependency>
<dependency>
- <groupId>com.fasterxml.jackson.module</groupId>
+ <groupId>tools.jackson.module</groupId>
<artifactId>jackson-module-jaxb-annotations</artifactId>
<scope>test</scope>
</dependency>
diff --git a/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/CausewayViewerRestfulObjectsIntegTestAbstract.java b/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/CausewayViewerRestfulObjectsIntegTestAbstract.java
index 279656b06f0..018b0895ac2 100644
--- a/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/CausewayViewerRestfulObjectsIntegTestAbstract.java
+++ b/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/CausewayViewerRestfulObjectsIntegTestAbstract.java
@@ -25,8 +25,7 @@
import jakarta.inject.Inject;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
+import tools.jackson.databind.ObjectMapper;
import org.approvaltests.Approvals;
import org.approvaltests.core.Options;
@@ -192,21 +191,17 @@ public Options jsonOptions(@Nullable Options options, final BookmarkOptions book
options = new Options();
}
return options.withScrubber(s -> {
- try {
- String prettyJson = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(objectMapper.readTree(s));
- if (bookmarkOptions == BookmarkOptions.SCRUB) {
- prettyJson = prettyJson.replaceAll(":\\d+/", ":NNN/");
- prettyJson = prettyJson.replaceAll(":\\d+\"", ":NNN\""); // "oid" : "university.dept.Department:33" ; "href" : "http://0.0.0.0:NNN/restful/objects/university.dept.Department:33",
- prettyJson = prettyJson.replaceAll("/\\d+/", "/NNN/");
- prettyJson = prettyJson.replaceAll("/\\d+\"", "/NNN\"");
- prettyJson = prettyJson.replaceAll(": \"\\d+\"", ": \"NNN\""); // "instanceId" : "33",
- }
- return prettyJson;
- } catch (JsonProcessingException e) {
- throw new RuntimeException(e);
- }
- })
- .forFile().withExtension(".json");
+ String prettyJson = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(objectMapper.readTree(s));
+ if (bookmarkOptions == BookmarkOptions.SCRUB) {
+ prettyJson = prettyJson.replaceAll(":\\d+/", ":NNN/");
+ prettyJson = prettyJson.replaceAll(":\\d+\"", ":NNN\""); // "oid" : "university.dept.Department:33" ; "href" : "http://0.0.0.0:NNN/restful/objects/university.dept.Department:33",
+ prettyJson = prettyJson.replaceAll("/\\d+/", "/NNN/");
+ prettyJson = prettyJson.replaceAll("/\\d+\"", "/NNN\"");
+ prettyJson = prettyJson.replaceAll(": \"\\d+\"", ": \"NNN\""); // "instanceId" : "33",
+ }
+ return prettyJson;
+ })
+ .forFile().withExtension(".json");
}
protected void beforeEach() {}
diff --git a/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/scenarios/staff/Staff_IntegTest.createStaffMemberWithPhoto.DEPARTMENT_BOOKMARK_AS_MAP.approved.json b/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/scenarios/staff/Staff_IntegTest.createStaffMemberWithPhoto.DEPARTMENT_BOOKMARK_AS_MAP.approved.json
index a6123f9fb94..c17ff2a4b5c 100644
--- a/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/scenarios/staff/Staff_IntegTest.createStaffMemberWithPhoto.DEPARTMENT_BOOKMARK_AS_MAP.approved.json
+++ b/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/scenarios/staff/Staff_IntegTest.createStaffMemberWithPhoto.DEPARTMENT_BOOKMARK_AS_MAP.approved.json
@@ -9,9 +9,9 @@
},
"photo" : {
"value" : {
- "name" : "StaffMember-photo-Bar.pdf",
+ "bytes" : "JVBERi0xLjcNCiW1tbW1DQoxIDAgb2JqDQo8PC9UeXBlL0NhdGFsb2cvUGFnZXMgMiAwIFIvTGFuZyhlbi1HQikgL1N0cnVjdFRyZWVSb290IDEyIDAgUi9NYXJrSW5mbzw8L01hcmtlZCB0cnVlPj4vTWV0YWRhdGEgMzIgMCBSL1ZpZXdlclByZWZlcmVuY2VzIDMzIDAgUj4+DQplbmRvYmoNCjIgMCBvYmoNCjw8L1R5cGUvUGFnZXMvQ291bnQgMS9LaWRzWyAzIDAgUl0gPj4NCmVuZG9iag0KMyAwIG9iag0KPDwvVHlwZS9QYWdlL1BhcmVudCAyIDAgUi9SZXNvdXJjZXM8PC9Gb250PDwvRjEgNSAwIFIvRjIgOSAwIFI+Pi9FeHRHU3RhdGU8PC9HUzcgNyAwIFIvR1M4IDggMCBSPj4vUHJvY1NldFsvUERGL1RleHQvSW1hZ2VCL0l [...]
"mimeType" : "application/pdf",
- "bytes" : "JVBERi0xLjcNCiW1tbW1DQoxIDAgb2JqDQo8PC9UeXBlL0NhdGFsb2cvUGFnZXMgMiAwIFIvTGFuZyhlbi1HQikgL1N0cnVjdFRyZWVSb290IDEyIDAgUi9NYXJrSW5mbzw8L01hcmtlZCB0cnVlPj4vTWV0YWRhdGEgMzIgMCBSL1ZpZXdlclByZWZlcmVuY2VzIDMzIDAgUj4+DQplbmRvYmoNCjIgMCBvYmoNCjw8L1R5cGUvUGFnZXMvQ291bnQgMS9LaWRzWyAzIDAgUl0gPj4NCmVuZG9iag0KMyAwIG9iag0KPDwvVHlwZS9QYWdlL1BhcmVudCAyIDAgUi9SZXNvdXJjZXM8PC9Gb250PDwvRjEgNSAwIFIvRjIgOSAwIFI+Pi9FeHRHU3RhdGU8PC9HUzcgNyAwIFIvR1M4IDggMCBSPj4vUHJvY1NldFsvUERGL1RleHQvSW1hZ2VCL0l [...]
+ "name" : "StaffMember-photo-Bar.pdf"
}
}
}
\ No newline at end of file
diff --git a/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/scenarios/staff/Staff_IntegTest.createStaffMemberWithPhoto.DEPARTMENT_BOOKMARK_AS_VALUE.approved.json b/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/scenarios/staff/Staff_IntegTest.createStaffMemberWithPhoto.DEPARTMENT_BOOKMARK_AS_VALUE.approved.json
index a6123f9fb94..c17ff2a4b5c 100644
--- a/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/scenarios/staff/Staff_IntegTest.createStaffMemberWithPhoto.DEPARTMENT_BOOKMARK_AS_VALUE.approved.json
+++ b/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/scenarios/staff/Staff_IntegTest.createStaffMemberWithPhoto.DEPARTMENT_BOOKMARK_AS_VALUE.approved.json
@@ -9,9 +9,9 @@
},
"photo" : {
"value" : {
- "name" : "StaffMember-photo-Bar.pdf",
+ "bytes" : "JVBERi0xLjcNCiW1tbW1DQoxIDAgb2JqDQo8PC9UeXBlL0NhdGFsb2cvUGFnZXMgMiAwIFIvTGFuZyhlbi1HQikgL1N0cnVjdFRyZWVSb290IDEyIDAgUi9NYXJrSW5mbzw8L01hcmtlZCB0cnVlPj4vTWV0YWRhdGEgMzIgMCBSL1ZpZXdlclByZWZlcmVuY2VzIDMzIDAgUj4+DQplbmRvYmoNCjIgMCBvYmoNCjw8L1R5cGUvUGFnZXMvQ291bnQgMS9LaWRzWyAzIDAgUl0gPj4NCmVuZG9iag0KMyAwIG9iag0KPDwvVHlwZS9QYWdlL1BhcmVudCAyIDAgUi9SZXNvdXJjZXM8PC9Gb250PDwvRjEgNSAwIFIvRjIgOSAwIFI+Pi9FeHRHU3RhdGU8PC9HUzcgNyAwIFIvR1M4IDggMCBSPj4vUHJvY1NldFsvUERGL1RleHQvSW1hZ2VCL0l [...]
"mimeType" : "application/pdf",
- "bytes" : "JVBERi0xLjcNCiW1tbW1DQoxIDAgb2JqDQo8PC9UeXBlL0NhdGFsb2cvUGFnZXMgMiAwIFIvTGFuZyhlbi1HQikgL1N0cnVjdFRyZWVSb290IDEyIDAgUi9NYXJrSW5mbzw8L01hcmtlZCB0cnVlPj4vTWV0YWRhdGEgMzIgMCBSL1ZpZXdlclByZWZlcmVuY2VzIDMzIDAgUj4+DQplbmRvYmoNCjIgMCBvYmoNCjw8L1R5cGUvUGFnZXMvQ291bnQgMS9LaWRzWyAzIDAgUl0gPj4NCmVuZG9iag0KMyAwIG9iag0KPDwvVHlwZS9QYWdlL1BhcmVudCAyIDAgUi9SZXNvdXJjZXM8PC9Gb250PDwvRjEgNSAwIFIvRjIgOSAwIFI+Pi9FeHRHU3RhdGU8PC9HUzcgNyAwIFIvR1M4IDggMCBSPj4vUHJvY1NldFsvUERGL1RleHQvSW1hZ2VCL0l [...]
+ "name" : "StaffMember-photo-Bar.pdf"
}
}
}
\ No newline at end of file
diff --git a/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/scenarios/staff/Staff_IntegTest.createStaffMemberWithPhoto.DEPARTMENT_KEY_AS_MAP.approved.json b/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/scenarios/staff/Staff_IntegTest.createStaffMemberWithPhoto.DEPARTMENT_KEY_AS_MAP.approved.json
index 4b6928e1735..f25b4631f05 100644
--- a/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/scenarios/staff/Staff_IntegTest.createStaffMemberWithPhoto.DEPARTMENT_KEY_AS_MAP.approved.json
+++ b/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/scenarios/staff/Staff_IntegTest.createStaffMemberWithPhoto.DEPARTMENT_KEY_AS_MAP.approved.json
@@ -9,9 +9,9 @@
},
"photo" : {
"value" : {
- "name" : "StaffMember-photo-Bar.pdf",
+ "bytes" : "JVBERi0xLjcNCiW1tbW1DQoxIDAgb2JqDQo8PC9UeXBlL0NhdGFsb2cvUGFnZXMgMiAwIFIvTGFuZyhlbi1HQikgL1N0cnVjdFRyZWVSb290IDEyIDAgUi9NYXJrSW5mbzw8L01hcmtlZCB0cnVlPj4vTWV0YWRhdGEgMzIgMCBSL1ZpZXdlclByZWZlcmVuY2VzIDMzIDAgUj4+DQplbmRvYmoNCjIgMCBvYmoNCjw8L1R5cGUvUGFnZXMvQ291bnQgMS9LaWRzWyAzIDAgUl0gPj4NCmVuZG9iag0KMyAwIG9iag0KPDwvVHlwZS9QYWdlL1BhcmVudCAyIDAgUi9SZXNvdXJjZXM8PC9Gb250PDwvRjEgNSAwIFIvRjIgOSAwIFI+Pi9FeHRHU3RhdGU8PC9HUzcgNyAwIFIvR1M4IDggMCBSPj4vUHJvY1NldFsvUERGL1RleHQvSW1hZ2VCL0l [...]
"mimeType" : "application/pdf",
- "bytes" : "JVBERi0xLjcNCiW1tbW1DQoxIDAgb2JqDQo8PC9UeXBlL0NhdGFsb2cvUGFnZXMgMiAwIFIvTGFuZyhlbi1HQikgL1N0cnVjdFRyZWVSb290IDEyIDAgUi9NYXJrSW5mbzw8L01hcmtlZCB0cnVlPj4vTWV0YWRhdGEgMzIgMCBSL1ZpZXdlclByZWZlcmVuY2VzIDMzIDAgUj4+DQplbmRvYmoNCjIgMCBvYmoNCjw8L1R5cGUvUGFnZXMvQ291bnQgMS9LaWRzWyAzIDAgUl0gPj4NCmVuZG9iag0KMyAwIG9iag0KPDwvVHlwZS9QYWdlL1BhcmVudCAyIDAgUi9SZXNvdXJjZXM8PC9Gb250PDwvRjEgNSAwIFIvRjIgOSAwIFI+Pi9FeHRHU3RhdGU8PC9HUzcgNyAwIFIvR1M4IDggMCBSPj4vUHJvY1NldFsvUERGL1RleHQvSW1hZ2VCL0l [...]
+ "name" : "StaffMember-photo-Bar.pdf"
}
}
}
\ No newline at end of file
diff --git a/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/scenarios/staff/Staff_IntegTest.createStaffMemberWithPhoto.DEPARTMENT_KEY_AS_VALUE.approved.json b/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/scenarios/staff/Staff_IntegTest.createStaffMemberWithPhoto.DEPARTMENT_KEY_AS_VALUE.approved.json
index 4b6928e1735..f25b4631f05 100644
--- a/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/scenarios/staff/Staff_IntegTest.createStaffMemberWithPhoto.DEPARTMENT_KEY_AS_VALUE.approved.json
+++ b/viewers/restfulobjects/test/src/test/java/org/apache/causeway/viewer/restfulobjects/test/scenarios/staff/Staff_IntegTest.createStaffMemberWithPhoto.DEPARTMENT_KEY_AS_VALUE.approved.json
@@ -9,9 +9,9 @@
},
"photo" : {
"value" : {
- "name" : "StaffMember-photo-Bar.pdf",
+ "bytes" : "JVBERi0xLjcNCiW1tbW1DQoxIDAgb2JqDQo8PC9UeXBlL0NhdGFsb2cvUGFnZXMgMiAwIFIvTGFuZyhlbi1HQikgL1N0cnVjdFRyZWVSb290IDEyIDAgUi9NYXJrSW5mbzw8L01hcmtlZCB0cnVlPj4vTWV0YWRhdGEgMzIgMCBSL1ZpZXdlclByZWZlcmVuY2VzIDMzIDAgUj4+DQplbmRvYmoNCjIgMCBvYmoNCjw8L1R5cGUvUGFnZXMvQ291bnQgMS9LaWRzWyAzIDAgUl0gPj4NCmVuZG9iag0KMyAwIG9iag0KPDwvVHlwZS9QYWdlL1BhcmVudCAyIDAgUi9SZXNvdXJjZXM8PC9Gb250PDwvRjEgNSAwIFIvRjIgOSAwIFI+Pi9FeHRHU3RhdGU8PC9HUzcgNyAwIFIvR1M4IDggMCBSPj4vUHJvY1NldFsvUERGL1RleHQvSW1hZ2VCL0l [...]
"mimeType" : "application/pdf",
- "bytes" : "JVBERi0xLjcNCiW1tbW1DQoxIDAgb2JqDQo8PC9UeXBlL0NhdGFsb2cvUGFnZXMgMiAwIFIvTGFuZyhlbi1HQikgL1N0cnVjdFRyZWVSb290IDEyIDAgUi9NYXJrSW5mbzw8L01hcmtlZCB0cnVlPj4vTWV0YWRhdGEgMzIgMCBSL1ZpZXdlclByZWZlcmVuY2VzIDMzIDAgUj4+DQplbmRvYmoNCjIgMCBvYmoNCjw8L1R5cGUvUGFnZXMvQ291bnQgMS9LaWRzWyAzIDAgUl0gPj4NCmVuZG9iag0KMyAwIG9iag0KPDwvVHlwZS9QYWdlL1BhcmVudCAyIDAgUi9SZXNvdXJjZXM8PC9Gb250PDwvRjEgNSAwIFIvRjIgOSAwIFI+Pi9FeHRHU3RhdGU8PC9HUzcgNyAwIFIvR1M4IDggMCBSPj4vUHJvY1NldFsvUERGL1RleHQvSW1hZ2VCL0l [...]
+ "name" : "StaffMember-photo-Bar.pdf"
}
}
}
\ No newline at end of file
diff --git a/viewers/restfulobjects/viewer/pom.xml b/viewers/restfulobjects/viewer/pom.xml
index 12046ac11a7..bd83ee9048b 100644
--- a/viewers/restfulobjects/viewer/pom.xml
+++ b/viewers/restfulobjects/viewer/pom.xml
@@ -53,7 +53,7 @@
</dependency>
<dependency>
- <groupId>com.fasterxml.jackson.module</groupId>
+ <groupId>tools.jackson.module</groupId>
<artifactId>jackson-module-jakarta-xmlbind-annotations</artifactId>
</dependency>
diff --git a/viewers/restfulobjects/viewer/src/test/java/org/apache/causeway/viewer/restfulobjects/viewer/exhandling/RestfulObjectsApplicationExceptionMapper_Test.java b/viewers/restfulobjects/viewer/src/test/java/org/apache/causeway/viewer/restfulobjects/viewer/exhandling/RestfulObjectsApplicationExceptionMapper_Test.java
index ff130100a81..8262d269cfc 100644
--- a/viewers/restfulobjects/viewer/src/test/java/org/apache/causeway/viewer/restfulobjects/viewer/exhandling/RestfulObjectsApplicationExceptionMapper_Test.java
+++ b/viewers/restfulobjects/viewer/src/test/java/org/apache/causeway/viewer/restfulobjects/viewer/exhandling/RestfulObjectsApplicationExceptionMapper_Test.java
@@ -33,7 +33,7 @@
import org.springframework.http.HttpStatus;
import org.apache.causeway.viewer.restfulobjects.applib.JsonRepresentation;
-import org.apache.causeway.viewer.restfulobjects.applib.util.JsonMapper;
+import org.apache.causeway.viewer.restfulobjects.applib.util.JsonMapperUtil;
import org.apache.causeway.viewer.restfulobjects.rendering.RestfulObjectsApplicationException;
import org.apache.causeway.viewer.restfulobjects.rendering.exhandling.ExceptionResponseFactory;
@@ -100,7 +100,7 @@ void entity_forException() throws Exception {
var response = exceptionMapper.buildResponse(ex, mockHttpHeaders);
final String entity = (String) response.getBody();
assertThat(entity, is(not(nullValue())));
- final JsonRepresentation jsonRepr = JsonMapper.instance().read(entity, JsonRepresentation.class);
+ final JsonRepresentation jsonRepr = JsonMapperUtil.instance().read(entity, JsonRepresentation.class);
// then
assertThat(response.getHeaders().get("Warning").get(0), is("199 RestfulObjects foobar"));
@@ -121,7 +121,7 @@ void entity_forExceptionWithCause() throws Exception {
var response = exceptionMapper.buildResponse(ex, mockHttpHeaders);
final String entity = (String) response.getBody();
assertThat(entity, is(not(nullValue())));
- final JsonRepresentation jsonRepr = JsonMapper.instance().read(entity, JsonRepresentation.class);
+ final JsonRepresentation jsonRepr = JsonMapperUtil.instance().read(entity, JsonRepresentation.class);
// then
assertThat(response.getHeaders().get("Warning").get(0), is("199 RestfulObjects foobar"));
diff --git a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/attributes/temporal/DateTimeConfig.java b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/attributes/temporal/DateTimeConfig.java
index 371905b30d9..afc7d3ede74 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/attributes/temporal/DateTimeConfig.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/components/attributes/temporal/DateTimeConfig.java
@@ -22,15 +22,15 @@
import java.util.Locale;
import java.util.Map;
-import com.fasterxml.jackson.core.JsonGenerator;
-import com.fasterxml.jackson.databind.JsonSerializer;
-import com.fasterxml.jackson.databind.SerializerProvider;
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-
import de.agilecoders.wicket.extensions.markup.html.bootstrap.form.datetime.DatetimePickerConfig;
import de.agilecoders.wicket.extensions.markup.html.bootstrap.form.datetime.DatetimePickerIconConfig;
import de.agilecoders.wicket.jquery.AbstractConfig;
import de.agilecoders.wicket.jquery.IKey;
+import tools.jackson.core.JacksonException;
+import tools.jackson.core.JsonGenerator;
+import tools.jackson.databind.SerializationContext;
+import tools.jackson.databind.ValueSerializer;
+import tools.jackson.databind.annotation.JsonSerialize;
/**
* Configuration holder for all {@link TextFieldWithDateTimePicker} configurations.
@@ -428,10 +428,10 @@ public static enum TodayButton {
/**
* Serializer for TodayButton
*/
- private static class TodayButtonSerializer extends JsonSerializer<TodayButton> {
+ private static class TodayButtonSerializer extends ValueSerializer<TodayButton> {
@Override
- public void serialize(final TodayButton value, final JsonGenerator jgen, final SerializerProvider provider) throws IOException {
+ public void serialize(final TodayButton value, final JsonGenerator jgen, final SerializationContext provider) throws JacksonException {
switch (value) {
case TRUE:
jgen.writeBoolean(true);
@@ -444,5 +444,6 @@ public void serialize(final TodayButton value, final JsonGenerator jgen, final S
break;
}
}
+
}
}