diff --git a/documentation/pom.xml b/documentation/pom.xml
index b8af0d2ec4..8c0fb43f77 100644
--- a/documentation/pom.xml
+++ b/documentation/pom.xml
@@ -105,7 +105,7 @@
test
- com.fasterxml.jackson.core
+ tools.jackson.core
jackson-databind
test
diff --git a/documentation/src/test/java/org/hibernate/validator/referenceguide/chapter12/nodenameprovider/JacksonPropertyNodeNameProvider.java b/documentation/src/test/java/org/hibernate/validator/referenceguide/chapter12/nodenameprovider/JacksonPropertyNodeNameProvider.java
index 736605f46d..337a9c50c3 100644
--- a/documentation/src/test/java/org/hibernate/validator/referenceguide/chapter12/nodenameprovider/JacksonPropertyNodeNameProvider.java
+++ b/documentation/src/test/java/org/hibernate/validator/referenceguide/chapter12/nodenameprovider/JacksonPropertyNodeNameProvider.java
@@ -4,42 +4,75 @@
*/
package org.hibernate.validator.referenceguide.chapter12.nodenameprovider;
-//tag::include[]
import org.hibernate.validator.spi.nodenameprovider.JavaBeanProperty;
import org.hibernate.validator.spi.nodenameprovider.Property;
import org.hibernate.validator.spi.nodenameprovider.PropertyNodeNameProvider;
-import com.fasterxml.jackson.databind.BeanDescription;
-import com.fasterxml.jackson.databind.JavaType;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.introspect.BeanPropertyDefinition;
+import tools.jackson.core.JacksonException;
+import tools.jackson.databind.BeanProperty;
+import tools.jackson.databind.JavaType;
+import tools.jackson.databind.ObjectMapper;
+import tools.jackson.databind.jsonFormatVisitors.JsonFormatVisitorWrapper;
+import tools.jackson.databind.jsonFormatVisitors.JsonObjectFormatVisitor;
+
+//tag::include[]
public class JacksonPropertyNodeNameProvider implements PropertyNodeNameProvider {
private final ObjectMapper objectMapper = new ObjectMapper();
@Override
public String getName(Property property) {
- if ( property instanceof JavaBeanProperty ) {
- return getJavaBeanPropertyName( (JavaBeanProperty) property );
+ if (property instanceof JavaBeanProperty javaBeanProperty) {
+ var visitor = new JsonPropertyNameGetter(javaBeanProperty.getMemberName());
+ try {
+ objectMapper.acceptJsonFormatVisitor(
+ javaBeanProperty.getDeclaringClass(),
+ visitor
+ );
+ var attributeName = visitor.getAttributeName();
+ return attributeName != null ? attributeName : property.getName();
+ } catch (JacksonException ignored) {}
}
-
- return getDefaultName( property );
+ return property.getName();
}
- private String getJavaBeanPropertyName(JavaBeanProperty property) {
- JavaType type = objectMapper.constructType( property.getDeclaringClass() );
- BeanDescription desc = objectMapper.getSerializationConfig().introspect( type );
+ // Visitor wrapper
+ private static class JsonPropertyNameGetter extends JsonFormatVisitorWrapper.Base {
- return desc.findProperties()
- .stream()
- .filter( prop -> prop.getInternalName().equals( property.getName() ) )
- .map( BeanPropertyDefinition::getName )
- .findFirst()
- .orElse( property.getName() );
- }
+ private final JsonObjectFormatVisitor visitor;
+ private String attributeName = null;
+
+ JsonPropertyNameGetter(String memberName) {
+ this.visitor = new JsonObjectFormatVisitor.Base() {
+
+ @Override
+ public void property(BeanProperty prop) {
+ setAttributeName(prop);
+ }
+
+ @Override
+ public void optionalProperty(BeanProperty prop) {
+ setAttributeName(prop);
+ }
+
+ private void setAttributeName(BeanProperty writer) {
+ if (memberName.equalsIgnoreCase(writer.getMember().getName())) {
+ attributeName = writer.getName();
+ }
+ }
+ };
+ }
+
+ public String getAttributeName() {
+ return attributeName;
+ }
+
+ @Override
+ public JsonObjectFormatVisitor expectObjectFormat(JavaType type) {
+ return visitor;
+ }
- private String getDefaultName(Property property) {
- return property.getName();
}
+
}
//end::include[]
diff --git a/documentation/src/test/java/org/hibernate/validator/referenceguide/chapter12/nodenameprovider/PersonSerializationTest.java b/documentation/src/test/java/org/hibernate/validator/referenceguide/chapter12/nodenameprovider/PersonSerializationTest.java
index 6c791a9c5a..6ce7fa6e5f 100644
--- a/documentation/src/test/java/org/hibernate/validator/referenceguide/chapter12/nodenameprovider/PersonSerializationTest.java
+++ b/documentation/src/test/java/org/hibernate/validator/referenceguide/chapter12/nodenameprovider/PersonSerializationTest.java
@@ -8,15 +8,15 @@
import org.junit.Test;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
+import tools.jackson.core.JacksonException;
+import tools.jackson.databind.ObjectMapper;
//tag::include[]
public class PersonSerializationTest {
private final ObjectMapper objectMapper = new ObjectMapper();
@Test
- public void personIsSerialized() throws JsonProcessingException {
+ public void personIsSerialized() throws JacksonException {
Person person = new Person( "Clark", "Kent" );
String serializedPerson = objectMapper.writeValueAsString( person );
diff --git a/engine/pom.xml b/engine/pom.xml
index fd396d459a..ed8b984317 100644
--- a/engine/pom.xml
+++ b/engine/pom.xml
@@ -177,7 +177,7 @@
test
- com.fasterxml.jackson.core
+ tools.jackson.core
jackson-databind
test
diff --git a/pom.xml b/pom.xml
index 218df7d030..32c09d9407 100644
--- a/pom.xml
+++ b/pom.xml
@@ -201,8 +201,7 @@
33.5.0-jre
7.0.2
4.0.0.Final
- 2.20.1
- 2.20
+ 3.0.3
1.18.2
@@ -644,16 +643,11 @@
test
- com.fasterxml.jackson.core
- jackson-databind
- ${version.com.fasterxml.jackson.core.jackson-databind}
- test
-
-
- com.fasterxml.jackson.core
- jackson-annotations
- ${version.com.fasterxml.jackson.core.jackson-annotations}
- test
+ tools.jackson
+ jackson-bom
+ pom
+ import
+ ${version.tools.jackson.core.jackson-bom}
javax.inject