update Jackson to 2.17.1
Signed-off-by: Maxim Nesen <maxim.nesen@oracle.com>
diff --git a/NOTICE.md b/NOTICE.md
index 6a4c169..56231f8 100644
--- a/NOTICE.md
+++ b/NOTICE.md
@@ -70,7 +70,7 @@
* Project: http://www.javassist.org/
* Copyright (C) 1999- Shigeru Chiba. All Rights Reserved.
-Jackson JAX-RS Providers Version 2.17.0
+Jackson JAX-RS Providers Version 2.17.1
* License: Apache License, 2.0
* Project: https://github.com/FasterXML/jackson-jaxrs-providers
* Copyright: (c) 2009-2024 FasterXML, LLC. All rights reserved unless otherwise indicated.
diff --git a/examples/NOTICE.md b/examples/NOTICE.md
index 3e1e8f8..5724485 100644
--- a/examples/NOTICE.md
+++ b/examples/NOTICE.md
@@ -66,7 +66,7 @@
* Project: http://www.javassist.org/
* Copyright (C) 1999- Shigeru Chiba. All Rights Reserved.
-Jackson JAX-RS Providers Version 2.17.0
+Jackson JAX-RS Providers Version 2.17.1
* License: Apache License, 2.0
* Project: https://github.com/FasterXML/jackson-jaxrs-providers
* Copyright: (c) 2009-2023 FasterXML, LLC. All rights reserved unless otherwise indicated.
diff --git a/media/json-jackson/src/main/java/org/glassfish/jersey/jackson/internal/jackson/jaxrs/cfg/MapperConfiguratorBase.java b/media/json-jackson/src/main/java/org/glassfish/jersey/jackson/internal/jackson/jaxrs/cfg/MapperConfiguratorBase.java
index 75bc66e..bc280cc 100644
--- a/media/json-jackson/src/main/java/org/glassfish/jersey/jackson/internal/jackson/jaxrs/cfg/MapperConfiguratorBase.java
+++ b/media/json-jackson/src/main/java/org/glassfish/jersey/jackson/internal/jackson/jaxrs/cfg/MapperConfiguratorBase.java
@@ -13,8 +13,8 @@
* well as accessing it.
*/
public abstract class MapperConfiguratorBase<IMPL extends MapperConfiguratorBase<IMPL,MAPPER>,
- MAPPER extends ObjectMapper
->
+ MAPPER extends ObjectMapper
+ >
{
/**
* Mapper provider was constructed with if any, or that was constructed
@@ -22,7 +22,7 @@
* If defined (explicitly or implicitly) it will be used, instead
* of using provider-based lookup.
*/
- protected MAPPER _mapper;
+ protected volatile MAPPER _mapper;
/**
* If no mapper was specified when constructed, and no configuration
@@ -30,14 +30,14 @@
* between default mapper and regular one is that default mapper
* is only used if no mapper is found via provider lookup.
*/
- protected MAPPER _defaultMapper;
+ protected volatile MAPPER _defaultMapper;
/**
* Annotations set to use by default; overridden by explicit call
- * to {@link #setAnnotationsToUse}
+ * to {@link #setAnnotationsToUse}. Marked final in v2.17.1.
*/
- protected Annotations[] _defaultAnnotationsToUse;
-
+ protected final Annotations[] _defaultAnnotationsToUse;
+
/**
* To support optional dependency to Jackson JAXB annotations module
* (needed iff JAXB annotations are used for configuration)
@@ -49,7 +49,7 @@
/* Construction
/**********************************************************
*/
-
+
public MapperConfiguratorBase(MAPPER mapper, Annotations[] defaultAnnotations)
{
_mapper = mapper;
@@ -61,7 +61,7 @@
/* Abstract methods to implement
/***********************************************************
*/
-
+
/**
* Method that locates, configures and returns {@link ObjectMapper} to use
*/
@@ -84,27 +84,27 @@
/***********************************************************
*/
- public synchronized final void setMapper(MAPPER m) {
+ public final void setMapper(MAPPER m) {
_mapper = m;
}
- public synchronized final void setAnnotationsToUse(Annotations[] annotationsToUse) {
+ public final void setAnnotationsToUse(Annotations[] annotationsToUse) {
_setAnnotations(mapper(), annotationsToUse);
}
- public synchronized final void configure(DeserializationFeature f, boolean state) {
+ public final void configure(DeserializationFeature f, boolean state) {
mapper().configure(f, state);
}
- public synchronized final void configure(SerializationFeature f, boolean state) {
+ public final void configure(SerializationFeature f, boolean state) {
mapper().configure(f, state);
}
- public synchronized final void configure(JsonParser.Feature f, boolean state) {
+ public final void configure(JsonParser.Feature f, boolean state) {
mapper().configure(f, state);
}
- public synchronized final void configure(JsonGenerator.Feature f, boolean state) {
+ public final void configure(JsonGenerator.Feature f, boolean state) {
mapper().configure(f, state);
}
diff --git a/media/json-jackson/src/main/java/org/glassfish/jersey/jackson/internal/jackson/jaxrs/json/JsonMapperConfigurator.java b/media/json-jackson/src/main/java/org/glassfish/jersey/jackson/internal/jackson/jaxrs/json/JsonMapperConfigurator.java
index 3e9c770..8e8091a 100644
--- a/media/json-jackson/src/main/java/org/glassfish/jersey/jackson/internal/jackson/jaxrs/json/JsonMapperConfigurator.java
+++ b/media/json-jackson/src/main/java/org/glassfish/jersey/jackson/internal/jackson/jaxrs/json/JsonMapperConfigurator.java
@@ -1,6 +1,7 @@
package org.glassfish.jersey.jackson.internal.jackson.jaxrs.json;
import java.util.ArrayList;
+import java.util.concurrent.locks.ReentrantLock;
import org.glassfish.jersey.jackson.internal.jackson.jaxrs.cfg.Annotations;
import org.glassfish.jersey.jackson.internal.jackson.jaxrs.cfg.MapperConfiguratorBase;
@@ -16,14 +17,17 @@
* well as accessing it.
*/
public class JsonMapperConfigurator
- extends MapperConfiguratorBase<JsonMapperConfigurator, ObjectMapper>
+ extends MapperConfiguratorBase<JsonMapperConfigurator, ObjectMapper>
{
+ // @since 2.17.1
+ private final ReentrantLock _lock = new ReentrantLock();
+
/*
/**********************************************************
/* Construction
/**********************************************************
*/
-
+
public JsonMapperConfigurator(ObjectMapper mapper, Annotations[] defAnnotations)
{
super(mapper, defAnnotations);
@@ -33,18 +37,24 @@
* Method that locates, configures and returns {@link ObjectMapper} to use
*/
@Override
- public synchronized ObjectMapper getConfiguredMapper() {
- /* important: should NOT call mapper(); needs to return null
- * if no instance has been passed or constructed
- */
+ public ObjectMapper getConfiguredMapper() {
+ // important: should NOT call mapper(); needs to return null
+ // if no instance has been passed or constructed
return _mapper;
}
@Override
- public synchronized ObjectMapper getDefaultMapper() {
+ public ObjectMapper getDefaultMapper() {
if (_defaultMapper == null) {
- _defaultMapper = new ObjectMapper();
- _setAnnotations(_defaultMapper, _defaultAnnotationsToUse);
+ _lock.lock();
+ try {
+ if (_defaultMapper == null) {
+ _defaultMapper = new ObjectMapper();
+ _setAnnotations(_defaultMapper, _defaultAnnotationsToUse);
+ }
+ } finally {
+ _lock.unlock();
+ }
}
return _defaultMapper;
}
@@ -64,8 +74,15 @@
protected ObjectMapper mapper()
{
if (_mapper == null) {
- _mapper = new ObjectMapper();
- _setAnnotations(_mapper, _defaultAnnotationsToUse);
+ _lock.lock();
+ try {
+ if (_mapper == null) {
+ _mapper = new ObjectMapper();
+ _setAnnotations(_mapper, _defaultAnnotationsToUse);
+ }
+ } finally {
+ _lock.unlock();
+ }
}
return _mapper;
}
@@ -100,22 +117,22 @@
protected AnnotationIntrospector _resolveIntrospector(Annotations ann)
{
switch (ann) {
- case JACKSON:
- return new JacksonAnnotationIntrospector();
- case JAXB:
- /* For this, need to use indirection just so that error occurs
- * when we get here, and not when this class is being loaded
- */
- try {
- if (_jaxbIntrospectorClass == null) {
- _jaxbIntrospectorClass = JaxbAnnotationIntrospector.class;
+ case JACKSON:
+ return new JacksonAnnotationIntrospector();
+ case JAXB:
+ /* For this, need to use indirection just so that error occurs
+ * when we get here, and not when this class is being loaded
+ */
+ try {
+ if (_jaxbIntrospectorClass == null) {
+ _jaxbIntrospectorClass = JaxbAnnotationIntrospector.class;
+ }
+ return _jaxbIntrospectorClass.newInstance();
+ } catch (Exception e) {
+ throw new IllegalStateException("Failed to instantiate JaxbAnnotationIntrospector: "+e.getMessage(), e);
}
- return _jaxbIntrospectorClass.newInstance();
- } catch (Exception e) {
- throw new IllegalStateException("Failed to instantiate JaxbAnnotationIntrospector: "+e.getMessage(), e);
- }
- default:
- throw new IllegalStateException();
+ default:
+ throw new IllegalStateException();
}
}
}
diff --git a/media/json-jackson/src/main/java/org/glassfish/jersey/jackson/internal/jackson/jaxrs/json/PackageVersion.java b/media/json-jackson/src/main/java/org/glassfish/jersey/jackson/internal/jackson/jaxrs/json/PackageVersion.java
index 88e3168..5d328da 100644
--- a/media/json-jackson/src/main/java/org/glassfish/jersey/jackson/internal/jackson/jaxrs/json/PackageVersion.java
+++ b/media/json-jackson/src/main/java/org/glassfish/jersey/jackson/internal/jackson/jaxrs/json/PackageVersion.java
@@ -11,7 +11,7 @@
*/
public final class PackageVersion implements Versioned {
public final static Version VERSION = VersionUtil.parseVersion(
- "2.17.0", "com.fasterxml.jackson.jaxrs", "jackson-jaxrs-json-provider");
+ "2.17.1", "com.fasterxml.jackson.jaxrs", "jackson-jaxrs-json-provider");
@Override
public Version version() {
diff --git a/media/json-jackson/src/main/resources/META-INF/NOTICE.markdown b/media/json-jackson/src/main/resources/META-INF/NOTICE.markdown
index 6034c04..4edecfc 100644
--- a/media/json-jackson/src/main/resources/META-INF/NOTICE.markdown
+++ b/media/json-jackson/src/main/resources/META-INF/NOTICE.markdown
@@ -31,7 +31,7 @@
## Third-party Content
-Jackson JAX-RS Providers version 2.17.0
+Jackson JAX-RS Providers version 2.17.1
* License: Apache License, 2.0
* Project: https://github.com/FasterXML/jackson-jaxrs-providers
* Copyright: (c) 2009-2023 FasterXML, LLC. All rights reserved unless otherwise indicated.
diff --git a/pom.xml b/pom.xml
index c2a22c2..df7d3c3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -2217,7 +2217,7 @@
<xmlunit.version>2.10.0</xmlunit.version>
<httpclient.version>4.5.14</httpclient.version>
<httpclient5.version>5.3.1</httpclient5.version>
- <jackson.version>2.17.0</jackson.version>
+ <jackson.version>2.17.1</jackson.version>
<jackson1.version>1.9.13</jackson1.version>
<javassist.version>3.30.2-GA</javassist.version>
<jersey1.version>1.19.3</jersey1.version>