SLING-8116 - ValueMap - implement default methods using OSGI Converter
* removed the double-checked locking construct for creating a Converter
diff --git a/src/main/java/org/apache/sling/api/wrappers/impl/ObjectConverter.java b/src/main/java/org/apache/sling/api/wrappers/impl/ObjectConverter.java
index 43f39fd..066acd3 100644
--- a/src/main/java/org/apache/sling/api/wrappers/impl/ObjectConverter.java
+++ b/src/main/java/org/apache/sling/api/wrappers/impl/ObjectConverter.java
@@ -35,37 +35,25 @@
*/
public final class ObjectConverter {
- private ObjectConverter() {
- }
+ private static final Converter CONVERTER;
- private static Converter converter;
-
- private static Converter getConverter() {
- // TODO at some point it may be practical to have TypeRules as OSGI services to
- // add more complex conversions much in the way that adaptTo has evolved
- if (converter == null) {
- synchronized (ObjectConverter.class) {
- if (converter == null) {
- converter = Converters.newConverterBuilder()
- .rule(new TypeRule<String, Calendar>(String.class, Calendar.class,
- ObjectConverter::toCalendar))
- .rule(new TypeRule<Date, Calendar>(Date.class, Calendar.class,
- ObjectConverter::toCalendar))
- .rule(new TypeRule<String, Date>(String.class, Date.class, ObjectConverter::toDate))
- .rule(new TypeRule<Calendar, String>(Calendar.class, String.class,
- ObjectConverter::toString))
- .rule(new TypeRule<Date, String>(Date.class, String.class, ObjectConverter::toString))
- .rule(new TypeRule<Calendar, Date>(Calendar.class, Date.class,
- ObjectConverter::toDate))
- .rule(new TypeRule<>(Calendar.class, ZonedDateTime.class, ObjectConverter::toZonedDateTime))
- .rule(new TypeRule<ZonedDateTime, Calendar>(ZonedDateTime.class, Calendar.class, ObjectConverter::toCalendar))
- .rule(new TypeRule<ZonedDateTime, String>(ZonedDateTime.class, String.class, ObjectConverter::toString))
- .build();
- }
- }
- }
- return converter;
- }
+ static {
+ CONVERTER = Converters.newConverterBuilder()
+ .rule(new TypeRule<String, Calendar>(String.class, Calendar.class,
+ ObjectConverter::toCalendar))
+ .rule(new TypeRule<Date, Calendar>(Date.class, Calendar.class,
+ ObjectConverter::toCalendar))
+ .rule(new TypeRule<String, Date>(String.class, Date.class, ObjectConverter::toDate))
+ .rule(new TypeRule<Calendar, String>(Calendar.class, String.class,
+ ObjectConverter::toString))
+ .rule(new TypeRule<Date, String>(Date.class, String.class, ObjectConverter::toString))
+ .rule(new TypeRule<Calendar, Date>(Calendar.class, Date.class,
+ ObjectConverter::toDate))
+ .rule(new TypeRule<>(Calendar.class, ZonedDateTime.class, ObjectConverter::toZonedDateTime))
+ .rule(new TypeRule<ZonedDateTime, Calendar>(ZonedDateTime.class, Calendar.class, ObjectConverter::toCalendar))
+ .rule(new TypeRule<ZonedDateTime, String>(ZonedDateTime.class, String.class, ObjectConverter::toString))
+ .build();
+}
private static String toString(ZonedDateTime zonedDateTime) {
return DateTimeFormatter.ISO_OFFSET_DATE_TIME.format(zonedDateTime);
@@ -124,7 +112,7 @@
return null;
}
try {
- return getConverter().convert(obj).to(type);
+ return CONVERTER.convert(obj).to(type);
} catch (ConversionException ce) {
return null;
}