From 863847f059eda76528d1fe7e2e3cdf58a3d2f8ea Mon Sep 17 00:00:00 2001 From: Michael Schnell Date: Mon, 21 Apr 2025 16:23:41 +0200 Subject: [PATCH 01/10] Removed unnessary Jackson serializer/deserializer classes --- README.md | 3 +- common/pom.xml | 2 +- core/pom.xml | 2 +- jackson/pom.xml | 13 +++-- .../CurrencyAmountJacksonDeserializer.java | 37 -------------- .../CurrencyAmountJacksonSerializer.java | 37 -------------- .../DayOfTheWeekJacksonDeserializer.java | 37 -------------- .../DayOfTheWeekJacksonSerializer.java | 37 -------------- .../DayOpeningHoursJacksonDeserializer.java | 37 -------------- .../DayOpeningHoursJacksonSerializer.java | 37 -------------- .../EmailAddressJacksonDeserializer.java | 37 -------------- .../EmailAddressJacksonSerializer.java | 37 -------------- .../jackson/HourJacksonDeserializer.java | 37 -------------- .../jackson/HourJacksonSerializer.java | 37 -------------- .../jackson/HourRangeJacksonDeserializer.java | 37 -------------- .../jackson/HourRangeJacksonSerializer.java | 37 -------------- .../HourRangesJacksonDeserializer.java | 37 -------------- .../jackson/HourRangesJacksonSerializer.java | 37 -------------- .../jackson/LocaleJacksonDeserializer.java | 2 +- .../MultiDayOfTheWeekJacksonDeserializer.java | 37 -------------- .../MultiDayOfTheWeekJacksonSerializer.java | 37 -------------- .../Objects4JJacksonAdapterModule.java | 46 ++++++++--------- .../PasswordSha512JacksonDeserializer.java | 37 -------------- .../PasswordSha512JacksonSerializer.java | 37 -------------- .../jackson/UserNameJacksonDeserializer.java | 37 -------------- .../jackson/UserNameJacksonSerializer.java | 37 -------------- .../ValueObjectStringJacksonDeserializer.java | 7 ++- .../ValueObjectStringJacksonSerializer.java | 9 ++-- ...WeeklyOpeningHoursJacksonDeserializer.java | 37 -------------- .../WeeklyOpeningHoursJacksonSerializer.java | 37 -------------- .../org/fuin/objects4j/jackson/AnyStr.java | 49 ------------------- .../jackson/AnyStrJacksonDeserializer.java | 18 ------- .../jackson/AnyStrJacksonSerializer.java | 18 ------- .../objects4j/jackson/ArchitectureTest.java | 11 +++-- .../org/fuin/objects4j/jackson/BaseTest.java | 2 +- .../java/org/fuin/objects4j/jackson/Data.java | 35 ------------- .../fuin/objects4j/jackson/JacksonHelper.java | 4 +- ...ueObjectStringJacksonDeserializerTest.java | 41 ---------------- ...alueObjectStringJacksonSerializerTest.java | 42 ---------------- jacoco/pom.xml | 2 +- jaxb/pom.xml | 2 +- jpa/pom.xml | 2 +- jsonb/pom.xml | 2 +- junit/pom.xml | 2 +- pom.xml | 2 +- quarkus/pom.xml | 2 +- release-notes.md | 3 ++ spring-boot/pom.xml | 2 +- ui/pom.xml | 2 +- 49 files changed, 66 insertions(+), 1073 deletions(-) delete mode 100644 jackson/src/main/java/org/fuin/objects4j/jackson/CurrencyAmountJacksonDeserializer.java delete mode 100644 jackson/src/main/java/org/fuin/objects4j/jackson/CurrencyAmountJacksonSerializer.java delete mode 100644 jackson/src/main/java/org/fuin/objects4j/jackson/DayOfTheWeekJacksonDeserializer.java delete mode 100644 jackson/src/main/java/org/fuin/objects4j/jackson/DayOfTheWeekJacksonSerializer.java delete mode 100644 jackson/src/main/java/org/fuin/objects4j/jackson/DayOpeningHoursJacksonDeserializer.java delete mode 100644 jackson/src/main/java/org/fuin/objects4j/jackson/DayOpeningHoursJacksonSerializer.java delete mode 100644 jackson/src/main/java/org/fuin/objects4j/jackson/EmailAddressJacksonDeserializer.java delete mode 100644 jackson/src/main/java/org/fuin/objects4j/jackson/EmailAddressJacksonSerializer.java delete mode 100644 jackson/src/main/java/org/fuin/objects4j/jackson/HourJacksonDeserializer.java delete mode 100644 jackson/src/main/java/org/fuin/objects4j/jackson/HourJacksonSerializer.java delete mode 100644 jackson/src/main/java/org/fuin/objects4j/jackson/HourRangeJacksonDeserializer.java delete mode 100644 jackson/src/main/java/org/fuin/objects4j/jackson/HourRangeJacksonSerializer.java delete mode 100644 jackson/src/main/java/org/fuin/objects4j/jackson/HourRangesJacksonDeserializer.java delete mode 100644 jackson/src/main/java/org/fuin/objects4j/jackson/HourRangesJacksonSerializer.java delete mode 100644 jackson/src/main/java/org/fuin/objects4j/jackson/MultiDayOfTheWeekJacksonDeserializer.java delete mode 100644 jackson/src/main/java/org/fuin/objects4j/jackson/MultiDayOfTheWeekJacksonSerializer.java delete mode 100644 jackson/src/main/java/org/fuin/objects4j/jackson/PasswordSha512JacksonDeserializer.java delete mode 100644 jackson/src/main/java/org/fuin/objects4j/jackson/PasswordSha512JacksonSerializer.java delete mode 100644 jackson/src/main/java/org/fuin/objects4j/jackson/UserNameJacksonDeserializer.java delete mode 100644 jackson/src/main/java/org/fuin/objects4j/jackson/UserNameJacksonSerializer.java delete mode 100644 jackson/src/main/java/org/fuin/objects4j/jackson/WeeklyOpeningHoursJacksonDeserializer.java delete mode 100644 jackson/src/main/java/org/fuin/objects4j/jackson/WeeklyOpeningHoursJacksonSerializer.java delete mode 100644 jackson/src/test/java/org/fuin/objects4j/jackson/AnyStr.java delete mode 100644 jackson/src/test/java/org/fuin/objects4j/jackson/AnyStrJacksonDeserializer.java delete mode 100644 jackson/src/test/java/org/fuin/objects4j/jackson/AnyStrJacksonSerializer.java delete mode 100644 jackson/src/test/java/org/fuin/objects4j/jackson/ValueObjectStringJacksonDeserializerTest.java delete mode 100644 jackson/src/test/java/org/fuin/objects4j/jackson/ValueObjectStringJacksonSerializerTest.java diff --git a/README.md b/README.md index 2441ed4..22dcc1d 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,8 @@ A library with common Java types that are mostly immutable value objects. [![Java Development Kit 17](https://img.shields.io/badge/JDK-17-green.svg)](https://openjdk.java.net/projects/jdk/17/) ## Versions -- 0.10.0 = See [Release Notes](release-notes.md) +- [0.11.0](release-notes.md#0110) +- [0.10.0](release-notes.md#0100) - 0.9.0 = **Java 17** - 0.8.0 = **Java 11** with new **jakarta** namespace - 0.7.x = **Java 11** before namespace change from 'javax' to 'jakarta' diff --git a/common/pom.xml b/common/pom.xml index acf989e..47f4125 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -7,7 +7,7 @@ org.fuin.objects4j objects4j-parent - 0.10.0 + 0.11.0-SNAPSHOT ../pom.xml diff --git a/core/pom.xml b/core/pom.xml index f8c4660..e544b0c 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -7,7 +7,7 @@ org.fuin.objects4j objects4j-parent - 0.10.0 + 0.11.0-SNAPSHOT ../pom.xml diff --git a/jackson/pom.xml b/jackson/pom.xml index a7de977..2bb410b 100644 --- a/jackson/pom.xml +++ b/jackson/pom.xml @@ -7,7 +7,7 @@ org.fuin.objects4j objects4j-parent - 0.10.0 + 0.11.0-SNAPSHOT ../pom.xml @@ -17,6 +17,11 @@ + + org.fuin + utils4j + + org.fuin.objects4j objects4j-common @@ -103,12 +108,6 @@ test - - org.fuin - utils4j - test - - diff --git a/jackson/src/main/java/org/fuin/objects4j/jackson/CurrencyAmountJacksonDeserializer.java b/jackson/src/main/java/org/fuin/objects4j/jackson/CurrencyAmountJacksonDeserializer.java deleted file mode 100644 index ff42338..0000000 --- a/jackson/src/main/java/org/fuin/objects4j/jackson/CurrencyAmountJacksonDeserializer.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Copyright (C) 2015 Michael Schnell. All rights reserved. - * http://www.fuin.org/ - * - * This library is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 3 of the License, or (at your option) any - * later version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see http://www.gnu.org/licenses/. - */ -package org.fuin.objects4j.jackson; - -import org.fuin.objects4j.core.CurrencyAmount; - -import javax.annotation.concurrent.ThreadSafe; - -/** - * Converts a String to a {@link CurrencyAmount}. - */ -@ThreadSafe -public final class CurrencyAmountJacksonDeserializer extends ValueObjectStringJacksonDeserializer { - - /** - * Default constructor. - */ - public CurrencyAmountJacksonDeserializer() { - super(CurrencyAmount.class, CurrencyAmount::valueOf); - } - -} diff --git a/jackson/src/main/java/org/fuin/objects4j/jackson/CurrencyAmountJacksonSerializer.java b/jackson/src/main/java/org/fuin/objects4j/jackson/CurrencyAmountJacksonSerializer.java deleted file mode 100644 index 8a1bd4c..0000000 --- a/jackson/src/main/java/org/fuin/objects4j/jackson/CurrencyAmountJacksonSerializer.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Copyright (C) 2015 Michael Schnell. All rights reserved. - * http://www.fuin.org/ - * - * This library is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 3 of the License, or (at your option) any - * later version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see http://www.gnu.org/licenses/. - */ -package org.fuin.objects4j.jackson; - -import org.fuin.objects4j.core.CurrencyAmount; - -import javax.annotation.concurrent.ThreadSafe; - -/** - * Converts a {@link CurrencyAmount} to String. - */ -@ThreadSafe -public final class CurrencyAmountJacksonSerializer extends ValueObjectStringJacksonSerializer { - - /** - * Default constructor. - */ - public CurrencyAmountJacksonSerializer() { - super(CurrencyAmount.class, CurrencyAmount::valueOf); - } - -} diff --git a/jackson/src/main/java/org/fuin/objects4j/jackson/DayOfTheWeekJacksonDeserializer.java b/jackson/src/main/java/org/fuin/objects4j/jackson/DayOfTheWeekJacksonDeserializer.java deleted file mode 100644 index 78047e7..0000000 --- a/jackson/src/main/java/org/fuin/objects4j/jackson/DayOfTheWeekJacksonDeserializer.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Copyright (C) 2015 Michael Schnell. All rights reserved. - * http://www.fuin.org/ - *

- * This library is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 3 of the License, or (at your option) any - * later version. - *

- * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. - *

- * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see http://www.gnu.org/licenses/. - */ -package org.fuin.objects4j.jackson; - -import org.fuin.objects4j.core.DayOfTheWeek; - -import javax.annotation.concurrent.ThreadSafe; - -/** - * Converts a String to a {@link DayOfTheWeek}. - */ -@ThreadSafe -public final class DayOfTheWeekJacksonDeserializer extends ValueObjectStringJacksonDeserializer { - - /** - * Default constructor. - */ - public DayOfTheWeekJacksonDeserializer() { - super(DayOfTheWeek.class, DayOfTheWeek::valueOf); - } - -} diff --git a/jackson/src/main/java/org/fuin/objects4j/jackson/DayOfTheWeekJacksonSerializer.java b/jackson/src/main/java/org/fuin/objects4j/jackson/DayOfTheWeekJacksonSerializer.java deleted file mode 100644 index 491e7d8..0000000 --- a/jackson/src/main/java/org/fuin/objects4j/jackson/DayOfTheWeekJacksonSerializer.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Copyright (C) 2015 Michael Schnell. All rights reserved. - * http://www.fuin.org/ - * - * This library is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 3 of the License, or (at your option) any - * later version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see http://www.gnu.org/licenses/. - */ -package org.fuin.objects4j.jackson; - -import org.fuin.objects4j.core.DayOfTheWeek; - -import javax.annotation.concurrent.ThreadSafe; - -/** - * Converts a {@link DayOfTheWeek} from/to String. - */ -@ThreadSafe -public final class DayOfTheWeekJacksonSerializer extends ValueObjectStringJacksonSerializer { - - /** - * Default constructor. - */ - public DayOfTheWeekJacksonSerializer() { - super(DayOfTheWeek.class, DayOfTheWeek::valueOf); - } - -} diff --git a/jackson/src/main/java/org/fuin/objects4j/jackson/DayOpeningHoursJacksonDeserializer.java b/jackson/src/main/java/org/fuin/objects4j/jackson/DayOpeningHoursJacksonDeserializer.java deleted file mode 100644 index 9a73c38..0000000 --- a/jackson/src/main/java/org/fuin/objects4j/jackson/DayOpeningHoursJacksonDeserializer.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Copyright (C) 2015 Michael Schnell. All rights reserved. - * http://www.fuin.org/ - *

- * This library is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 3 of the License, or (at your option) any - * later version. - *

- * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. - *

- * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see http://www.gnu.org/licenses/. - */ -package org.fuin.objects4j.jackson; - -import org.fuin.objects4j.core.DayOpeningHours; - -import javax.annotation.concurrent.ThreadSafe; - -/** - * Converts a String to a {@link DayOpeningHours}. - */ -@ThreadSafe -public final class DayOpeningHoursJacksonDeserializer extends ValueObjectStringJacksonDeserializer { - - /** - * Default constructor. - */ - public DayOpeningHoursJacksonDeserializer() { - super(DayOpeningHours.class, DayOpeningHours::valueOf); - } - -} diff --git a/jackson/src/main/java/org/fuin/objects4j/jackson/DayOpeningHoursJacksonSerializer.java b/jackson/src/main/java/org/fuin/objects4j/jackson/DayOpeningHoursJacksonSerializer.java deleted file mode 100644 index d3b8791..0000000 --- a/jackson/src/main/java/org/fuin/objects4j/jackson/DayOpeningHoursJacksonSerializer.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Copyright (C) 2015 Michael Schnell. All rights reserved. - * http://www.fuin.org/ - * - * This library is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 3 of the License, or (at your option) any - * later version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see http://www.gnu.org/licenses/. - */ -package org.fuin.objects4j.jackson; - -import org.fuin.objects4j.core.DayOpeningHours; - -import javax.annotation.concurrent.ThreadSafe; - -/** - * Converts a {@link DayOpeningHours} into a String. - */ -@ThreadSafe -public final class DayOpeningHoursJacksonSerializer extends ValueObjectStringJacksonSerializer { - - /** - * Default constructor. - */ - public DayOpeningHoursJacksonSerializer() { - super(DayOpeningHours.class, DayOpeningHours::valueOf); - } - -} diff --git a/jackson/src/main/java/org/fuin/objects4j/jackson/EmailAddressJacksonDeserializer.java b/jackson/src/main/java/org/fuin/objects4j/jackson/EmailAddressJacksonDeserializer.java deleted file mode 100644 index b2a58b9..0000000 --- a/jackson/src/main/java/org/fuin/objects4j/jackson/EmailAddressJacksonDeserializer.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Copyright (C) 2015 Michael Schnell. All rights reserved. - * http://www.fuin.org/ - *

- * This library is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 3 of the License, or (at your option) any - * later version. - *

- * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. - *

- * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see http://www.gnu.org/licenses/. - */ -package org.fuin.objects4j.jackson; - -import org.fuin.objects4j.core.EmailAddress; - -import javax.annotation.concurrent.ThreadSafe; - -/** - * Converts a String to a {@link EmailAddress}. - */ -@ThreadSafe -public final class EmailAddressJacksonDeserializer extends ValueObjectStringJacksonDeserializer { - - /** - * Default constructor. - */ - public EmailAddressJacksonDeserializer() { - super(EmailAddress.class, EmailAddress::valueOf); - } - -} diff --git a/jackson/src/main/java/org/fuin/objects4j/jackson/EmailAddressJacksonSerializer.java b/jackson/src/main/java/org/fuin/objects4j/jackson/EmailAddressJacksonSerializer.java deleted file mode 100644 index e6765cc..0000000 --- a/jackson/src/main/java/org/fuin/objects4j/jackson/EmailAddressJacksonSerializer.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Copyright (C) 2015 Michael Schnell. All rights reserved. - * http://www.fuin.org/ - *

- * This library is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 3 of the License, or (at your option) any - * later version. - *

- * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. - *

- * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see http://www.gnu.org/licenses/. - */ -package org.fuin.objects4j.jackson; - -import org.fuin.objects4j.core.EmailAddress; - -import javax.annotation.concurrent.ThreadSafe; - -/** - * Converts a {@link EmailAddress} into a String. - */ -@ThreadSafe -public final class EmailAddressJacksonSerializer extends ValueObjectStringJacksonSerializer { - - /** - * Default constructor. - */ - public EmailAddressJacksonSerializer() { - super(EmailAddress.class, EmailAddress::valueOf); - } - -} diff --git a/jackson/src/main/java/org/fuin/objects4j/jackson/HourJacksonDeserializer.java b/jackson/src/main/java/org/fuin/objects4j/jackson/HourJacksonDeserializer.java deleted file mode 100644 index d655365..0000000 --- a/jackson/src/main/java/org/fuin/objects4j/jackson/HourJacksonDeserializer.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Copyright (C) 2015 Michael Schnell. All rights reserved. - * http://www.fuin.org/ - *

- * This library is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 3 of the License, or (at your option) any - * later version. - *

- * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. - *

- * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see http://www.gnu.org/licenses/. - */ -package org.fuin.objects4j.jackson; - -import org.fuin.objects4j.core.Hour; - -import javax.annotation.concurrent.ThreadSafe; - -/** - * Converts a String to a {@link Hour}. - */ -@ThreadSafe -public final class HourJacksonDeserializer extends ValueObjectStringJacksonDeserializer { - - /** - * Default constructor. - */ - public HourJacksonDeserializer() { - super(Hour.class, Hour::valueOf); - } - -} diff --git a/jackson/src/main/java/org/fuin/objects4j/jackson/HourJacksonSerializer.java b/jackson/src/main/java/org/fuin/objects4j/jackson/HourJacksonSerializer.java deleted file mode 100644 index d34c78e..0000000 --- a/jackson/src/main/java/org/fuin/objects4j/jackson/HourJacksonSerializer.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Copyright (C) 2015 Michael Schnell. All rights reserved. - * http://www.fuin.org/ - * - * This library is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 3 of the License, or (at your option) any - * later version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see http://www.gnu.org/licenses/. - */ -package org.fuin.objects4j.jackson; - -import org.fuin.objects4j.core.Hour; - -import javax.annotation.concurrent.ThreadSafe; - -/** - * Converts a {@link Hour} into a String. - */ -@ThreadSafe -public final class HourJacksonSerializer extends ValueObjectStringJacksonSerializer { - - /** - * Default constructor. - */ - public HourJacksonSerializer() { - super(Hour.class, Hour::valueOf); - } - -} diff --git a/jackson/src/main/java/org/fuin/objects4j/jackson/HourRangeJacksonDeserializer.java b/jackson/src/main/java/org/fuin/objects4j/jackson/HourRangeJacksonDeserializer.java deleted file mode 100644 index cae4e3c..0000000 --- a/jackson/src/main/java/org/fuin/objects4j/jackson/HourRangeJacksonDeserializer.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Copyright (C) 2015 Michael Schnell. All rights reserved. - * http://www.fuin.org/ - *

- * This library is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 3 of the License, or (at your option) any - * later version. - *

- * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. - *

- * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see http://www.gnu.org/licenses/. - */ -package org.fuin.objects4j.jackson; - -import org.fuin.objects4j.core.HourRange; - -import javax.annotation.concurrent.ThreadSafe; - -/** - * Converts a String to a {@link HourRange}. - */ -@ThreadSafe -public final class HourRangeJacksonDeserializer extends ValueObjectStringJacksonDeserializer { - - /** - * Default constructor. - */ - public HourRangeJacksonDeserializer() { - super(HourRange.class, HourRange::valueOf); - } - -} diff --git a/jackson/src/main/java/org/fuin/objects4j/jackson/HourRangeJacksonSerializer.java b/jackson/src/main/java/org/fuin/objects4j/jackson/HourRangeJacksonSerializer.java deleted file mode 100644 index 8851bc8..0000000 --- a/jackson/src/main/java/org/fuin/objects4j/jackson/HourRangeJacksonSerializer.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Copyright (C) 2015 Michael Schnell. All rights reserved. - * http://www.fuin.org/ - * - * This library is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 3 of the License, or (at your option) any - * later version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see http://www.gnu.org/licenses/. - */ -package org.fuin.objects4j.jackson; - -import org.fuin.objects4j.core.HourRange; - -import javax.annotation.concurrent.ThreadSafe; - -/** - * Converts a {@link HourRange} into a String. - */ -@ThreadSafe -public final class HourRangeJacksonSerializer extends ValueObjectStringJacksonSerializer { - - /** - * Default constructor. - */ - public HourRangeJacksonSerializer() { - super(HourRange.class, HourRange::valueOf); - } - -} diff --git a/jackson/src/main/java/org/fuin/objects4j/jackson/HourRangesJacksonDeserializer.java b/jackson/src/main/java/org/fuin/objects4j/jackson/HourRangesJacksonDeserializer.java deleted file mode 100644 index 4e13e35..0000000 --- a/jackson/src/main/java/org/fuin/objects4j/jackson/HourRangesJacksonDeserializer.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Copyright (C) 2015 Michael Schnell. All rights reserved. - * http://www.fuin.org/ - *

- * This library is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 3 of the License, or (at your option) any - * later version. - *

- * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. - *

- * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see http://www.gnu.org/licenses/. - */ -package org.fuin.objects4j.jackson; - -import org.fuin.objects4j.core.HourRanges; - -import javax.annotation.concurrent.ThreadSafe; - -/** - * Converts a String to a {@link HourRanges}. - */ -@ThreadSafe -public final class HourRangesJacksonDeserializer extends ValueObjectStringJacksonDeserializer { - - /** - * Default constructor. - */ - public HourRangesJacksonDeserializer() { - super(HourRanges.class, HourRanges::valueOf); - } - -} diff --git a/jackson/src/main/java/org/fuin/objects4j/jackson/HourRangesJacksonSerializer.java b/jackson/src/main/java/org/fuin/objects4j/jackson/HourRangesJacksonSerializer.java deleted file mode 100644 index 52b4d03..0000000 --- a/jackson/src/main/java/org/fuin/objects4j/jackson/HourRangesJacksonSerializer.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Copyright (C) 2015 Michael Schnell. All rights reserved. - * http://www.fuin.org/ - * - * This library is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 3 of the License, or (at your option) any - * later version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see http://www.gnu.org/licenses/. - */ -package org.fuin.objects4j.jackson; - -import org.fuin.objects4j.core.HourRanges; - -import javax.annotation.concurrent.ThreadSafe; - -/** - * Converts {@link HourRanges} into a String. - */ -@ThreadSafe -public final class HourRangesJacksonSerializer extends ValueObjectStringJacksonSerializer { - - /** - * Default constructor. - */ - public HourRangesJacksonSerializer() { - super(HourRanges.class, HourRanges::valueOf); - } - -} diff --git a/jackson/src/main/java/org/fuin/objects4j/jackson/LocaleJacksonDeserializer.java b/jackson/src/main/java/org/fuin/objects4j/jackson/LocaleJacksonDeserializer.java index e12eb6c..769cf7f 100644 --- a/jackson/src/main/java/org/fuin/objects4j/jackson/LocaleJacksonDeserializer.java +++ b/jackson/src/main/java/org/fuin/objects4j/jackson/LocaleJacksonDeserializer.java @@ -38,7 +38,7 @@ public final class LocaleJacksonDeserializer extends StdDeserializer { * Default constructor. */ public LocaleJacksonDeserializer() { - super(Currency.class); + super(Locale.class); } @Override diff --git a/jackson/src/main/java/org/fuin/objects4j/jackson/MultiDayOfTheWeekJacksonDeserializer.java b/jackson/src/main/java/org/fuin/objects4j/jackson/MultiDayOfTheWeekJacksonDeserializer.java deleted file mode 100644 index 6b51b84..0000000 --- a/jackson/src/main/java/org/fuin/objects4j/jackson/MultiDayOfTheWeekJacksonDeserializer.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Copyright (C) 2015 Michael Schnell. All rights reserved. - * http://www.fuin.org/ - * - * This library is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 3 of the License, or (at your option) any - * later version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see http://www.gnu.org/licenses/. - */ -package org.fuin.objects4j.jackson; - -import org.fuin.objects4j.core.MultiDayOfTheWeek; - -import javax.annotation.concurrent.ThreadSafe; - -/** - * Converts String to a {@link MultiDayOfTheWeek}. - */ -@ThreadSafe -public final class MultiDayOfTheWeekJacksonDeserializer extends ValueObjectStringJacksonDeserializer { - - /** - * Default constructor. - */ - public MultiDayOfTheWeekJacksonDeserializer() { - super(MultiDayOfTheWeek.class, MultiDayOfTheWeek::valueOf); - } - -} diff --git a/jackson/src/main/java/org/fuin/objects4j/jackson/MultiDayOfTheWeekJacksonSerializer.java b/jackson/src/main/java/org/fuin/objects4j/jackson/MultiDayOfTheWeekJacksonSerializer.java deleted file mode 100644 index f31a27a..0000000 --- a/jackson/src/main/java/org/fuin/objects4j/jackson/MultiDayOfTheWeekJacksonSerializer.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Copyright (C) 2015 Michael Schnell. All rights reserved. - * http://www.fuin.org/ - * - * This library is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 3 of the License, or (at your option) any - * later version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see http://www.gnu.org/licenses/. - */ -package org.fuin.objects4j.jackson; - -import org.fuin.objects4j.core.MultiDayOfTheWeek; - -import javax.annotation.concurrent.ThreadSafe; - -/** - * Converts {@link MultiDayOfTheWeek} into a String. - */ -@ThreadSafe -public final class MultiDayOfTheWeekJacksonSerializer extends ValueObjectStringJacksonSerializer { - - /** - * Default constructor. - */ - public MultiDayOfTheWeekJacksonSerializer() { - super(MultiDayOfTheWeek.class, MultiDayOfTheWeek::valueOf); - } - -} diff --git a/jackson/src/main/java/org/fuin/objects4j/jackson/Objects4JJacksonAdapterModule.java b/jackson/src/main/java/org/fuin/objects4j/jackson/Objects4JJacksonAdapterModule.java index a6fd38c..4668edc 100644 --- a/jackson/src/main/java/org/fuin/objects4j/jackson/Objects4JJacksonAdapterModule.java +++ b/jackson/src/main/java/org/fuin/objects4j/jackson/Objects4JJacksonAdapterModule.java @@ -34,44 +34,44 @@ public String getModuleName() { public void setupModule(Module.SetupContext context) { final SimpleSerializers serializers = new SimpleSerializers(); - serializers.addSerializer(new CurrencyAmountJacksonSerializer()); + serializers.addSerializer(new ValueObjectStringJacksonSerializer<>(CurrencyAmount.class)); serializers.addSerializer(new CurrencyJacksonSerializer()); - serializers.addSerializer(new DayOfTheWeekJacksonSerializer()); - serializers.addSerializer(new DayOpeningHoursJacksonSerializer()); - serializers.addSerializer(new EmailAddressJacksonSerializer()); - serializers.addSerializer(new HourJacksonSerializer()); - serializers.addSerializer(new HourRangeJacksonSerializer()); - serializers.addSerializer(new HourRangesJacksonSerializer()); + serializers.addSerializer(new ValueObjectStringJacksonSerializer<>(DayOfTheWeek.class)); + serializers.addSerializer(new ValueObjectStringJacksonSerializer<>(DayOpeningHours.class)); + serializers.addSerializer(new ValueObjectStringJacksonSerializer<>(EmailAddress.class)); + serializers.addSerializer(new ValueObjectStringJacksonSerializer<>(Hour.class)); + serializers.addSerializer(new ValueObjectStringJacksonSerializer<>(HourRange.class)); + serializers.addSerializer(new ValueObjectStringJacksonSerializer<>(HourRanges.class)); serializers.addSerializer(new LocaleJacksonSerializer()); - serializers.addSerializer(new MultiDayOfTheWeekJacksonSerializer()); - serializers.addSerializer(new PasswordSha512JacksonSerializer()); - serializers.addSerializer(new UserNameJacksonSerializer()); + serializers.addSerializer(new ValueObjectStringJacksonSerializer<>(MultiDayOfTheWeek.class)); + serializers.addSerializer(new ValueObjectStringJacksonSerializer<>(PasswordSha512.class)); + serializers.addSerializer(new ValueObjectStringJacksonSerializer<>(UserName.class)); serializers.addSerializer(new UUIDJacksonSerializer()); - serializers.addSerializer(new WeeklyOpeningHoursJacksonSerializer()); + serializers.addSerializer(new ValueObjectStringJacksonSerializer<>(WeeklyOpeningHours.class)); context.addSerializers(serializers); final SimpleDeserializers deserializers = new SimpleDeserializers(); - deserializers.addDeserializer(CurrencyAmount.class, new CurrencyAmountJacksonDeserializer()); + deserializers.addDeserializer(CurrencyAmount.class, new ValueObjectStringJacksonDeserializer<>(CurrencyAmount.class, CurrencyAmount::valueOf)); deserializers.addDeserializer(Currency.class, new CurrencyJacksonDeserializer()); - deserializers.addDeserializer(DayOfTheWeek.class, new DayOfTheWeekJacksonDeserializer()); - deserializers.addDeserializer(DayOpeningHours.class, new DayOpeningHoursJacksonDeserializer()); - deserializers.addDeserializer(EmailAddress.class, new EmailAddressJacksonDeserializer()); - deserializers.addDeserializer(Hour.class, new HourJacksonDeserializer()); - deserializers.addDeserializer(HourRange.class, new HourRangeJacksonDeserializer()); - deserializers.addDeserializer(HourRanges.class, new HourRangesJacksonDeserializer()); + deserializers.addDeserializer(DayOfTheWeek.class, new ValueObjectStringJacksonDeserializer<>(DayOfTheWeek.class, DayOfTheWeek::valueOf)); + deserializers.addDeserializer(DayOpeningHours.class, new ValueObjectStringJacksonDeserializer<>(DayOpeningHours.class, DayOpeningHours::valueOf)); + deserializers.addDeserializer(EmailAddress.class, new ValueObjectStringJacksonDeserializer<>(EmailAddress.class, EmailAddress::valueOf)); + deserializers.addDeserializer(Hour.class, new ValueObjectStringJacksonDeserializer<>(Hour.class, Hour::valueOf)); + deserializers.addDeserializer(HourRange.class, new ValueObjectStringJacksonDeserializer<>(HourRange.class, HourRange::valueOf)); + deserializers.addDeserializer(HourRanges.class, new ValueObjectStringJacksonDeserializer<>(HourRanges.class, HourRanges::valueOf)); deserializers.addDeserializer(Locale.class, new LocaleJacksonDeserializer()); - deserializers.addDeserializer(MultiDayOfTheWeek.class, new MultiDayOfTheWeekJacksonDeserializer()); - deserializers.addDeserializer(PasswordSha512.class, new PasswordSha512JacksonDeserializer()); - deserializers.addDeserializer(UserName.class, new UserNameJacksonDeserializer()); + deserializers.addDeserializer(MultiDayOfTheWeek.class, new ValueObjectStringJacksonDeserializer<>(MultiDayOfTheWeek.class, MultiDayOfTheWeek::valueOf)); + deserializers.addDeserializer(PasswordSha512.class, new ValueObjectStringJacksonDeserializer<>(PasswordSha512.class, PasswordSha512::valueOf)); + deserializers.addDeserializer(UserName.class, new ValueObjectStringJacksonDeserializer<>(UserName.class, UserName::valueOf)); deserializers.addDeserializer(UUID.class, new UUIDJacksonDeserializer()); - deserializers.addDeserializer(WeeklyOpeningHours.class, new WeeklyOpeningHoursJacksonDeserializer()); + deserializers.addDeserializer(WeeklyOpeningHours.class, new ValueObjectStringJacksonDeserializer<>(WeeklyOpeningHours.class, WeeklyOpeningHours::valueOf)); context.addDeserializers(deserializers); } @Override public Version version() { // Don't forget to change from release to SNAPSHOT and back! - return new Version(0, 10, 0, null); + return new Version(0, 11, 0, "SNAPSHOT"); } } \ No newline at end of file diff --git a/jackson/src/main/java/org/fuin/objects4j/jackson/PasswordSha512JacksonDeserializer.java b/jackson/src/main/java/org/fuin/objects4j/jackson/PasswordSha512JacksonDeserializer.java deleted file mode 100644 index a564b67..0000000 --- a/jackson/src/main/java/org/fuin/objects4j/jackson/PasswordSha512JacksonDeserializer.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Copyright (C) 2015 Michael Schnell. All rights reserved. - * http://www.fuin.org/ - * - * This library is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 3 of the License, or (at your option) any - * later version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see http://www.gnu.org/licenses/. - */ -package org.fuin.objects4j.jackson; - -import org.fuin.objects4j.core.PasswordSha512; - -import javax.annotation.concurrent.ThreadSafe; - -/** - * Converts a String to a {@link PasswordSha512}. - */ -@ThreadSafe -public class PasswordSha512JacksonDeserializer extends ValueObjectStringJacksonDeserializer { - - /** - * Default constructor. - */ - public PasswordSha512JacksonDeserializer() { - super(PasswordSha512.class, PasswordSha512::valueOf); - } - -} diff --git a/jackson/src/main/java/org/fuin/objects4j/jackson/PasswordSha512JacksonSerializer.java b/jackson/src/main/java/org/fuin/objects4j/jackson/PasswordSha512JacksonSerializer.java deleted file mode 100644 index b4b0c64..0000000 --- a/jackson/src/main/java/org/fuin/objects4j/jackson/PasswordSha512JacksonSerializer.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Copyright (C) 2015 Michael Schnell. All rights reserved. - * http://www.fuin.org/ - * - * This library is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 3 of the License, or (at your option) any - * later version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see http://www.gnu.org/licenses/. - */ -package org.fuin.objects4j.jackson; - -import org.fuin.objects4j.core.PasswordSha512; - -import javax.annotation.concurrent.ThreadSafe; - -/** - * Converts a {@link PasswordSha512} into a String. - */ -@ThreadSafe -public class PasswordSha512JacksonSerializer extends ValueObjectStringJacksonSerializer { - - /** - * Default constructor. - */ - public PasswordSha512JacksonSerializer() { - super(PasswordSha512.class, PasswordSha512::valueOf); - } - -} diff --git a/jackson/src/main/java/org/fuin/objects4j/jackson/UserNameJacksonDeserializer.java b/jackson/src/main/java/org/fuin/objects4j/jackson/UserNameJacksonDeserializer.java deleted file mode 100644 index f335673..0000000 --- a/jackson/src/main/java/org/fuin/objects4j/jackson/UserNameJacksonDeserializer.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Copyright (C) 2015 Michael Schnell. All rights reserved. - * http://www.fuin.org/ - *

- * This library is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 3 of the License, or (at your option) any - * later version. - *

- * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. - *

- * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see http://www.gnu.org/licenses/. - */ -package org.fuin.objects4j.jackson; - -import org.fuin.objects4j.core.UserName; - -import javax.annotation.concurrent.ThreadSafe; - -/** - * Converts a String to a {@link UserName}. - */ -@ThreadSafe -public final class UserNameJacksonDeserializer extends ValueObjectStringJacksonDeserializer { - - /** - * Default constructor. - */ - public UserNameJacksonDeserializer() { - super(UserName.class, UserName::valueOf); - } - -} diff --git a/jackson/src/main/java/org/fuin/objects4j/jackson/UserNameJacksonSerializer.java b/jackson/src/main/java/org/fuin/objects4j/jackson/UserNameJacksonSerializer.java deleted file mode 100644 index 49e7c87..0000000 --- a/jackson/src/main/java/org/fuin/objects4j/jackson/UserNameJacksonSerializer.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Copyright (C) 2015 Michael Schnell. All rights reserved. - * http://www.fuin.org/ - * - * This library is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 3 of the License, or (at your option) any - * later version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see http://www.gnu.org/licenses/. - */ -package org.fuin.objects4j.jackson; - -import org.fuin.objects4j.core.UserName; - -import javax.annotation.concurrent.ThreadSafe; - -/** - * Converts {@link UserName} into a String. - */ -@ThreadSafe -public final class UserNameJacksonSerializer extends ValueObjectStringJacksonSerializer { - - /** - * Default constructor. - */ - public UserNameJacksonSerializer() { - super(UserName.class, UserName::valueOf); - } - -} diff --git a/jackson/src/main/java/org/fuin/objects4j/jackson/ValueObjectStringJacksonDeserializer.java b/jackson/src/main/java/org/fuin/objects4j/jackson/ValueObjectStringJacksonDeserializer.java index ecde819..e2af7c8 100644 --- a/jackson/src/main/java/org/fuin/objects4j/jackson/ValueObjectStringJacksonDeserializer.java +++ b/jackson/src/main/java/org/fuin/objects4j/jackson/ValueObjectStringJacksonDeserializer.java @@ -25,6 +25,7 @@ import org.fuin.objects4j.common.Contract; import org.fuin.objects4j.common.AsStringCapable; import org.fuin.objects4j.common.ValueOfCapable; +import org.fuin.utils4j.TestOmitted; import java.io.IOException; @@ -33,7 +34,8 @@ * * @param Type to convert. */ -public abstract class ValueObjectStringJacksonDeserializer extends StdDeserializer { +@TestOmitted("Already tested with other classes") +public final class ValueObjectStringJacksonDeserializer extends StdDeserializer { private final ValueOfCapable vop; @@ -42,7 +44,8 @@ public abstract class ValueObjectStringJacksonDeserializer clasz, @NotNull final ValueOfCapable vop) { + public ValueObjectStringJacksonDeserializer(@NotNull final Class clasz, + @NotNull final ValueOfCapable vop) { super(clasz); Contract.requireArgNotNull("vop", vop); this.vop = vop; diff --git a/jackson/src/main/java/org/fuin/objects4j/jackson/ValueObjectStringJacksonSerializer.java b/jackson/src/main/java/org/fuin/objects4j/jackson/ValueObjectStringJacksonSerializer.java index d6251c2..c94209d 100644 --- a/jackson/src/main/java/org/fuin/objects4j/jackson/ValueObjectStringJacksonSerializer.java +++ b/jackson/src/main/java/org/fuin/objects4j/jackson/ValueObjectStringJacksonSerializer.java @@ -22,7 +22,7 @@ import com.fasterxml.jackson.databind.ser.std.StdSerializer; import jakarta.validation.constraints.NotNull; import org.fuin.objects4j.common.AsStringCapable; -import org.fuin.objects4j.common.ValueOfCapable; +import org.fuin.utils4j.TestOmitted; import java.io.IOException; @@ -31,14 +31,13 @@ * * @param Type to convert. */ -public abstract class ValueObjectStringJacksonSerializer extends StdSerializer { +@TestOmitted("Already tested with other classes") +public final class ValueObjectStringJacksonSerializer extends StdSerializer { /** * Constructor with mandatory data. - * - * @param vop Provides a valueOf method. */ - public ValueObjectStringJacksonSerializer(@NotNull final Class clasz, @NotNull final ValueOfCapable vop) { + public ValueObjectStringJacksonSerializer(@NotNull final Class clasz) { super(clasz); } diff --git a/jackson/src/main/java/org/fuin/objects4j/jackson/WeeklyOpeningHoursJacksonDeserializer.java b/jackson/src/main/java/org/fuin/objects4j/jackson/WeeklyOpeningHoursJacksonDeserializer.java deleted file mode 100644 index b79af65..0000000 --- a/jackson/src/main/java/org/fuin/objects4j/jackson/WeeklyOpeningHoursJacksonDeserializer.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Copyright (C) 2015 Michael Schnell. All rights reserved. - * http://www.fuin.org/ - *

- * This library is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 3 of the License, or (at your option) any - * later version. - *

- * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. - *

- * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see http://www.gnu.org/licenses/. - */ -package org.fuin.objects4j.jackson; - -import org.fuin.objects4j.core.WeeklyOpeningHours; - -import javax.annotation.concurrent.ThreadSafe; - -/** - * Converts String to a {@link WeeklyOpeningHours}. - */ -@ThreadSafe -public final class WeeklyOpeningHoursJacksonDeserializer extends ValueObjectStringJacksonDeserializer { - - /** - * Default constructor. - */ - public WeeklyOpeningHoursJacksonDeserializer() { - super(WeeklyOpeningHours.class, WeeklyOpeningHours::valueOf); - } - -} diff --git a/jackson/src/main/java/org/fuin/objects4j/jackson/WeeklyOpeningHoursJacksonSerializer.java b/jackson/src/main/java/org/fuin/objects4j/jackson/WeeklyOpeningHoursJacksonSerializer.java deleted file mode 100644 index ae2766e..0000000 --- a/jackson/src/main/java/org/fuin/objects4j/jackson/WeeklyOpeningHoursJacksonSerializer.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Copyright (C) 2015 Michael Schnell. All rights reserved. - * http://www.fuin.org/ - * - * This library is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 3 of the License, or (at your option) any - * later version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see http://www.gnu.org/licenses/. - */ -package org.fuin.objects4j.jackson; - -import org.fuin.objects4j.core.WeeklyOpeningHours; - -import javax.annotation.concurrent.ThreadSafe; - -/** - * Converts {@link WeeklyOpeningHours} into a String. - */ -@ThreadSafe -public final class WeeklyOpeningHoursJacksonSerializer extends ValueObjectStringJacksonSerializer { - - /** - * Default constructor. - */ - public WeeklyOpeningHoursJacksonSerializer() { - super(WeeklyOpeningHours.class, WeeklyOpeningHours::valueOf); - } - -} diff --git a/jackson/src/test/java/org/fuin/objects4j/jackson/AnyStr.java b/jackson/src/test/java/org/fuin/objects4j/jackson/AnyStr.java deleted file mode 100644 index 79c1db5..0000000 --- a/jackson/src/test/java/org/fuin/objects4j/jackson/AnyStr.java +++ /dev/null @@ -1,49 +0,0 @@ -package org.fuin.objects4j.jackson; - -import org.fuin.objects4j.common.Contract; -import org.fuin.objects4j.core.AbstractStringValueObject; -import org.fuin.utils4j.TestOmitted; - -import java.io.Serial; - -/** - * Test implementation for a {@link AbstractStringValueObject}. - */ -@TestOmitted("Only a test class") -public final class AnyStr extends AbstractStringValueObject { - - @Serial - private static final long serialVersionUID = 1L; - - private final String str; - - /** - * Constructor with manadatory data. - * - * @param str - * String. - */ - public AnyStr(final String str) { - super(); - Contract.requireArgNotNull("str", str); - this.str = str; - } - - @Override - public String asBaseType() { - return str; - } - - /** - * Converts a given string into an instance of this class. - * - * @param str - * String to convert. - * - * @return New instance. - */ - public static AnyStr valueOf(String str) { - return new AnyStr(str); - } - -} \ No newline at end of file diff --git a/jackson/src/test/java/org/fuin/objects4j/jackson/AnyStrJacksonDeserializer.java b/jackson/src/test/java/org/fuin/objects4j/jackson/AnyStrJacksonDeserializer.java deleted file mode 100644 index fc7bedf..0000000 --- a/jackson/src/test/java/org/fuin/objects4j/jackson/AnyStrJacksonDeserializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.fuin.objects4j.jackson; - -import org.fuin.utils4j.TestOmitted; - -/** - * Test implementation for a {@link ValueObjectStringJacksonDeserializer}. - */ -@TestOmitted("Only a test class") -public class AnyStrJacksonDeserializer extends ValueObjectStringJacksonDeserializer { - - /** - * Default constructor. - */ - public AnyStrJacksonDeserializer() { - super(AnyStr.class, AnyStr::valueOf); - } - -} \ No newline at end of file diff --git a/jackson/src/test/java/org/fuin/objects4j/jackson/AnyStrJacksonSerializer.java b/jackson/src/test/java/org/fuin/objects4j/jackson/AnyStrJacksonSerializer.java deleted file mode 100644 index b697c92..0000000 --- a/jackson/src/test/java/org/fuin/objects4j/jackson/AnyStrJacksonSerializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.fuin.objects4j.jackson; - -import org.fuin.utils4j.TestOmitted; - -/** - * Test implementation for a {@link ValueObjectStringJacksonSerializer}. - */ -@TestOmitted("Only a test class") -public class AnyStrJacksonSerializer extends ValueObjectStringJacksonSerializer { - - /** - * Default constructor. - */ - public AnyStrJacksonSerializer() { - super(AnyStr.class, AnyStr::valueOf); - } - -} \ No newline at end of file diff --git a/jackson/src/test/java/org/fuin/objects4j/jackson/ArchitectureTest.java b/jackson/src/test/java/org/fuin/objects4j/jackson/ArchitectureTest.java index 9bf0407..48328fc 100644 --- a/jackson/src/test/java/org/fuin/objects4j/jackson/ArchitectureTest.java +++ b/jackson/src/test/java/org/fuin/objects4j/jackson/ArchitectureTest.java @@ -46,9 +46,14 @@ class ArchitectureTest { .should() .onlyDependOnClassesThat() .resideInAnyPackage(JACKSON_PACKAGE, COMMON_PACKAGE, CORE_PACKAGE, - "java.lang..", "java.util..", "java.io", - "jakarta.validation..", "jakarta.annotation..", "com.fasterxml.jackson..", - "javax.annotation.concurrent"); + "java.lang..", + "java.util..", + "java.io", + "jakarta.validation..", + "jakarta.annotation..", + "com.fasterxml.jackson..", + "javax.annotation.concurrent", + "org.fuin.utils4j.."); } diff --git a/jackson/src/test/java/org/fuin/objects4j/jackson/BaseTest.java b/jackson/src/test/java/org/fuin/objects4j/jackson/BaseTest.java index d62eac1..f50f7af 100644 --- a/jackson/src/test/java/org/fuin/objects4j/jackson/BaseTest.java +++ b/jackson/src/test/java/org/fuin/objects4j/jackson/BaseTest.java @@ -22,7 +22,7 @@ import com.tngtech.archunit.lang.ArchRule; import org.fuin.units4j.archunit.Units4JConditions; -@AnalyzeClasses(packagesOf = CurrencyAmountJacksonSerializer.class) +@AnalyzeClasses(packagesOf = BaseTest.class) public class BaseTest { @ArchTest diff --git a/jackson/src/test/java/org/fuin/objects4j/jackson/Data.java b/jackson/src/test/java/org/fuin/objects4j/jackson/Data.java index aa7959f..0816618 100644 --- a/jackson/src/test/java/org/fuin/objects4j/jackson/Data.java +++ b/jackson/src/test/java/org/fuin/objects4j/jackson/Data.java @@ -18,8 +18,6 @@ package org.fuin.objects4j.jackson; import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; import org.fuin.objects4j.core.CurrencyAmount; import org.fuin.objects4j.core.DayOfTheWeek; import org.fuin.objects4j.core.DayOpeningHours; @@ -43,67 +41,34 @@ @TestOmitted("Only a test class") public class Data { - @JsonSerialize(using = EmailAddressJacksonSerializer.class) - @JsonDeserialize(using = EmailAddressJacksonDeserializer.class) public EmailAddress email; - @JsonSerialize(using = PasswordSha512JacksonSerializer.class) - @JsonDeserialize(using = PasswordSha512JacksonDeserializer.class) public PasswordSha512 passwordSha512; - @JsonSerialize(using = UserNameJacksonSerializer.class) - @JsonDeserialize(using = UserNameJacksonDeserializer.class) public UserName userName; - @JsonSerialize(using = UUIDJacksonSerializer.class) - @JsonDeserialize(using = UUIDJacksonDeserializer.class) public UUID uuid; @JsonProperty("ca") - @JsonSerialize(using = CurrencyAmountJacksonSerializer.class) - @JsonDeserialize(using = CurrencyAmountJacksonDeserializer.class) public CurrencyAmount currencyAmount; @JsonProperty("c") - @JsonSerialize(using = CurrencyJacksonSerializer.class) - @JsonDeserialize(using = CurrencyJacksonDeserializer.class) public Currency currency; - @JsonProperty("any-str") - @JsonSerialize(using = AnyStrJacksonSerializer.class) - @JsonDeserialize(using = AnyStrJacksonDeserializer.class) - public AnyStr anyStr; - - @JsonSerialize(using = HourJacksonSerializer.class) - @JsonDeserialize(using = HourJacksonDeserializer.class) public Hour hour; - @JsonSerialize(using = HourRangeJacksonSerializer.class) - @JsonDeserialize(using = HourRangeJacksonDeserializer.class) public HourRange hourRange; - @JsonSerialize(using = HourRangesJacksonSerializer.class) - @JsonDeserialize(using = HourRangesJacksonDeserializer.class) public HourRanges hourRanges; - @JsonSerialize(using = DayOfTheWeekJacksonSerializer.class) - @JsonDeserialize(using = DayOfTheWeekJacksonDeserializer.class) public DayOfTheWeek dayOfTheWeek; - @JsonSerialize(using = MultiDayOfTheWeekJacksonSerializer.class) - @JsonDeserialize(using = MultiDayOfTheWeekJacksonDeserializer.class) public MultiDayOfTheWeek multiDayOfTheWeek; - @JsonSerialize(using = DayOpeningHoursJacksonSerializer.class) - @JsonDeserialize(using = DayOpeningHoursJacksonDeserializer.class) public DayOpeningHours dayOpeningHours; - @JsonSerialize(using = WeeklyOpeningHoursJacksonSerializer.class) - @JsonDeserialize(using = WeeklyOpeningHoursJacksonDeserializer.class) public WeeklyOpeningHours weeklyOpeningHours; - @JsonSerialize(using = LocaleJacksonSerializer.class) - @JsonDeserialize(using = LocaleJacksonDeserializer.class) public Locale locale; } diff --git a/jackson/src/test/java/org/fuin/objects4j/jackson/JacksonHelper.java b/jackson/src/test/java/org/fuin/objects4j/jackson/JacksonHelper.java index b888912..5b0ffb3 100644 --- a/jackson/src/test/java/org/fuin/objects4j/jackson/JacksonHelper.java +++ b/jackson/src/test/java/org/fuin/objects4j/jackson/JacksonHelper.java @@ -40,7 +40,7 @@ private JacksonHelper() { */ public static String toJson(final T obj) { try { - final ObjectMapper mapper = new ObjectMapper(); + final ObjectMapper mapper = new ObjectMapper().registerModule(new Objects4JJacksonAdapterModule()); mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); return mapper.writeValueAsString(obj); } catch (JsonProcessingException e) { @@ -57,7 +57,7 @@ public static String toJson(final T obj) { */ public static T fromJson(final String json, final Class clasz) { try { - final ObjectMapper mapper = new ObjectMapper(); + final ObjectMapper mapper = new ObjectMapper().registerModule(new Objects4JJacksonAdapterModule()); return mapper.readValue(json, clasz); } catch (final JsonProcessingException ex) { throw new RuntimeException(ex); diff --git a/jackson/src/test/java/org/fuin/objects4j/jackson/ValueObjectStringJacksonDeserializerTest.java b/jackson/src/test/java/org/fuin/objects4j/jackson/ValueObjectStringJacksonDeserializerTest.java deleted file mode 100644 index 9c1c675..0000000 --- a/jackson/src/test/java/org/fuin/objects4j/jackson/ValueObjectStringJacksonDeserializerTest.java +++ /dev/null @@ -1,41 +0,0 @@ -/** - * Copyright (C) 2013 Future Invent Informationsmanagement GmbH. All rights - * reserved. - *

- * This library is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 3 of the License, or (at your option) any - * later version. - *

- * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. - *

- * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see . - */ -package org.fuin.objects4j.jackson; - -import com.fasterxml.jackson.core.JsonProcessingException; -import org.junit.jupiter.api.Test; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * Test for the {@link ValueObjectStringJacksonDeserializer} class. - */ -public class ValueObjectStringJacksonDeserializerTest { - - private static final String JSON = "{\"any-str\":\"abcd1234\"}"; - - @Test - public final void testMarshalUnmarshal() throws JsonProcessingException { - - final Data data = JacksonHelper.fromJson(JSON, Data.class); - assertThat(data.anyStr).isNotNull(); - assertThat(data.anyStr).isEqualTo(new AnyStr("abcd1234")); - - } - -} diff --git a/jackson/src/test/java/org/fuin/objects4j/jackson/ValueObjectStringJacksonSerializerTest.java b/jackson/src/test/java/org/fuin/objects4j/jackson/ValueObjectStringJacksonSerializerTest.java deleted file mode 100644 index c926283..0000000 --- a/jackson/src/test/java/org/fuin/objects4j/jackson/ValueObjectStringJacksonSerializerTest.java +++ /dev/null @@ -1,42 +0,0 @@ -/** - * Copyright (C) 2013 Future Invent Informationsmanagement GmbH. All rights - * reserved. - *

- * This library is free software; you can redistribute it and/or modify it under - * the terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 3 of the License, or (at your option) any - * later version. - *

- * This library is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. - *

- * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see . - */ -package org.fuin.objects4j.jackson; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import org.junit.jupiter.api.Test; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * Test for the {@link ValueObjectStringJacksonSerializer} class. - */ -public class ValueObjectStringJacksonSerializerTest { - - private static final String JSON = "{\"any-str\":\"abcd1234\"}"; - - @Test - public final void testMarshal() throws JsonProcessingException { - - final Data data = new Data(); - data.anyStr = new AnyStr("abcd1234"); - assertThat(JacksonHelper.toJson(data)).isEqualTo(JSON); - - } - -} diff --git a/jacoco/pom.xml b/jacoco/pom.xml index 4d3f981..72aa040 100644 --- a/jacoco/pom.xml +++ b/jacoco/pom.xml @@ -7,7 +7,7 @@ org.fuin.objects4j objects4j-parent - 0.10.0 + 0.11.0-SNAPSHOT ../pom.xml diff --git a/jaxb/pom.xml b/jaxb/pom.xml index a445462..3fb821c 100644 --- a/jaxb/pom.xml +++ b/jaxb/pom.xml @@ -7,7 +7,7 @@ org.fuin.objects4j objects4j-parent - 0.10.0 + 0.11.0-SNAPSHOT ../pom.xml diff --git a/jpa/pom.xml b/jpa/pom.xml index 45a16f9..f512fde 100644 --- a/jpa/pom.xml +++ b/jpa/pom.xml @@ -7,7 +7,7 @@ org.fuin.objects4j objects4j-parent - 0.10.0 + 0.11.0-SNAPSHOT ../pom.xml diff --git a/jsonb/pom.xml b/jsonb/pom.xml index 4a0c51c..38a854f 100644 --- a/jsonb/pom.xml +++ b/jsonb/pom.xml @@ -7,7 +7,7 @@ org.fuin.objects4j objects4j-parent - 0.10.0 + 0.11.0-SNAPSHOT ../pom.xml diff --git a/junit/pom.xml b/junit/pom.xml index f97d539..62d5072 100644 --- a/junit/pom.xml +++ b/junit/pom.xml @@ -7,7 +7,7 @@ org.fuin.objects4j objects4j-parent - 0.10.0 + 0.11.0-SNAPSHOT ../pom.xml diff --git a/pom.xml b/pom.xml index f18bc43..d2c0de7 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ org.fuin.objects4j objects4j-parent pom - 0.10.0 + 0.11.0-SNAPSHOT A library with common Java types that are mostly immutable value objects. http://www.fuin.org/objects4j/ diff --git a/quarkus/pom.xml b/quarkus/pom.xml index 076528f..2ed9d1e 100644 --- a/quarkus/pom.xml +++ b/quarkus/pom.xml @@ -7,7 +7,7 @@ org.fuin.objects4j objects4j-parent - 0.10.0 + 0.11.0-SNAPSHOT ../pom.xml diff --git a/release-notes.md b/release-notes.md index 5030c3d..3373130 100644 --- a/release-notes.md +++ b/release-notes.md @@ -1,5 +1,8 @@ # Release Notes +## 0.11.0 +- Removed unnecessary Jackson serializer/deserializer classes + ## 0.10.0 ### General diff --git a/spring-boot/pom.xml b/spring-boot/pom.xml index ebb7a6a..4c512db 100644 --- a/spring-boot/pom.xml +++ b/spring-boot/pom.xml @@ -7,7 +7,7 @@ org.fuin.objects4j objects4j-parent - 0.10.0 + 0.11.0-SNAPSHOT ../pom.xml diff --git a/ui/pom.xml b/ui/pom.xml index 33362d6..3b8604b 100644 --- a/ui/pom.xml +++ b/ui/pom.xml @@ -7,7 +7,7 @@ org.fuin.objects4j objects4j-parent - 0.10.0 + 0.11.0-SNAPSHOT ../pom.xml From 1fd81ce8f4defe05dc86714048f3aafd661bd08a Mon Sep 17 00:00:00 2001 From: Michael Schnell Date: Tue, 22 Apr 2025 07:57:05 +0200 Subject: [PATCH 02/10] Added new utility class --- .../jackson/Objects4JacksonUtils.java | 140 ++++++++++ ...CurrencyAmountJacksonDeserializerTest.java | 2 +- .../CurrencyAmountJacksonSerializerTest.java | 2 +- .../DayOfTheWeekJacksonDeserializerTest.java | 2 +- .../DayOfTheWeekJacksonSerializerTest.java | 2 +- ...ayOpeningHoursJacksonDeserializerTest.java | 2 +- .../DayOpeningHoursJacksonSerializerTest.java | 2 +- .../EmailAddressJacksonDeserializerTest.java | 2 +- .../EmailAddressJacksonSerializerTest.java | 2 +- .../jackson/HourJacksonDeserializerTest.java | 2 +- .../jackson/HourJacksonSerializerTest.java | 2 +- .../HourRangeJacksonDeserializerTest.java | 2 +- .../HourRangeJacksonSerializerTest.java | 2 +- .../HourRangesJacksonDeserializerTest.java | 2 +- .../HourRangesJacksonSerializerTest.java | 2 +- ...tiDayOfTheWeekJacksonDeserializerTest.java | 2 +- ...ultiDayOfTheWeekJacksonSerializerTest.java | 2 +- .../jackson/Objects4JacksonUtilsTest.java | 247 ++++++++++++++++++ ...PasswordSha512JacksonDeserializerTest.java | 2 +- .../PasswordSha512JacksonSerializerTest.java | 2 +- .../UserNameJacksonDeserializerTest.java | 2 +- .../UserNameJacksonSerializerTest.java | 2 +- ...lyOpeningHoursJacksonDeserializerTest.java | 2 +- ...eklyOpeningHoursJacksonSerializerTest.java | 2 +- release-notes.md | 1 + 25 files changed, 410 insertions(+), 22 deletions(-) create mode 100644 jackson/src/main/java/org/fuin/objects4j/jackson/Objects4JacksonUtils.java create mode 100644 jackson/src/test/java/org/fuin/objects4j/jackson/Objects4JacksonUtilsTest.java diff --git a/jackson/src/main/java/org/fuin/objects4j/jackson/Objects4JacksonUtils.java b/jackson/src/main/java/org/fuin/objects4j/jackson/Objects4JacksonUtils.java new file mode 100644 index 0000000..5b32dc4 --- /dev/null +++ b/jackson/src/main/java/org/fuin/objects4j/jackson/Objects4JacksonUtils.java @@ -0,0 +1,140 @@ +/** + * Copyright (C) 2015 Michael Schnell. All rights reserved. + * http://www.fuin.org/ + *

+ * This library is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the Free + * Software Foundation; either version 3 of the License, or (at your option) any + * later version. + *

+ * This library is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more + * details. + *

+ * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see http://www.gnu.org/licenses/. + */ +package org.fuin.objects4j.jackson; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JavaType; +import com.fasterxml.jackson.databind.JsonDeserializer; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.JsonSerializer; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * Utilities for the Jackson serialization module. + */ +public final class Objects4JacksonUtils { + + /** + * Private utility constructor. + */ + private Objects4JacksonUtils() { + throw new UnsupportedOperationException("Creating instances of a utility class is not allowed."); + } + + /** + * Creates all available Jakcson serializers necessary for the ESC implementation. + * + * @return New array with serializers. + */ + public static JsonSerializer[] joinJacksonSerializers(final JsonSerializer[] serializersA, + final JsonSerializer... serializersB) { + return joinJacksonSerializerArrays(serializersA, serializersB); + } + + /** + * Creates all available JSON-B serializers necessary for the ESC implementation. + * + * @return New array with serializers. + */ + public static JsonSerializer[] joinJacksonSerializerArrays(final JsonSerializer[]... serializerArrays) { + final List> all = joinArrays(serializerArrays); + return all.toArray(new JsonSerializer[0]); + } + + /** + * Creates all available JSON-B deserializers necessary for the ESC implementation. + * + * @return New array with deserializers. + */ + public static JsonDeserializer[] joinJacksonDeserializers(final JsonDeserializer[] deserializersA, + final JsonDeserializer... deserializersB) { + return joinJacksonDeserializerArrays(deserializersA, deserializersB); + } + + /** + * Creates all available JSON-B deserializers necessary for the ESC implementation. + * + * @return New array with deserializers. + */ + public static JsonDeserializer[] joinJacksonDeserializerArrays(final JsonDeserializer[]... deserializerArrays) { + final List> all = joinArrays(deserializerArrays); + return all.toArray(new JsonDeserializer[0]); + } + + /** + * Creates all available JSON-B serializers necessary for the ESC implementation. + * + * @return New array with serializers. + */ + @SafeVarargs + static List joinArrays(final T[]... arrays) { + final List all = new ArrayList<>(); + for (final T[] array : arrays) { + all.addAll(Arrays.asList(array)); + } + return all; + } + + /** + * Deserializes a node to the given type. + * + * @param jp Parser used for reading JSON content + * @param ctxt Context that can be used to access information about this deserialization activity. + * @param fqnClassName Fullyqualified name of the expected class. + * @param node Node with object. + * @param Expected type. + * @return Deserialized instance. + */ + @SuppressWarnings("unchecked") + public static T deserialize(JsonParser jp, DeserializationContext ctxt, String fqnClassName, JsonNode node) { + try { + final Class clasz = (Class) Class.forName(fqnClassName); + return deserialize(jp, ctxt, clasz, node); + } catch (final ClassNotFoundException ex) { + throw new IllegalStateException("The class '" + fqnClassName + "' needed to deserialize the node is unknwon: " + node, ex); + } + } + + /** + * Deserializes a node to the given type. + * + * @param jp Parser used for reading JSON content + * @param ctxt Context that can be used to access information about this deserialization activity. + * @param clasz Expected class. + * @param node Node with object. + * @param Expected type. + * @return Deserialized instance. + */ + @SuppressWarnings("unchecked") + public static T deserialize(JsonParser jp, DeserializationContext ctxt, Class clasz, JsonNode node) { + try { + final JavaType javaType = ctxt.getTypeFactory().constructType(clasz); + final JsonDeserializer deserializer = ctxt.findRootValueDeserializer(javaType); + final JsonParser parser = node.traverse(jp.getCodec()); + parser.nextToken(); + return (T) deserializer.deserialize(parser, ctxt); + } catch (final Exception ex) { + throw new IllegalStateException("Failed to deserialize '" + clasz.getName() + "' from: " + node, ex); + } + } + +} diff --git a/jackson/src/test/java/org/fuin/objects4j/jackson/CurrencyAmountJacksonDeserializerTest.java b/jackson/src/test/java/org/fuin/objects4j/jackson/CurrencyAmountJacksonDeserializerTest.java index b3135bb..cbb36b4 100644 --- a/jackson/src/test/java/org/fuin/objects4j/jackson/CurrencyAmountJacksonDeserializerTest.java +++ b/jackson/src/test/java/org/fuin/objects4j/jackson/CurrencyAmountJacksonDeserializerTest.java @@ -26,7 +26,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; /** - * Test for the {@link CurrencyAmountJacksonDeserializer} class. + * Test for {@link CurrencyAmount} deserialization. */ class CurrencyAmountJacksonDeserializerTest { diff --git a/jackson/src/test/java/org/fuin/objects4j/jackson/CurrencyAmountJacksonSerializerTest.java b/jackson/src/test/java/org/fuin/objects4j/jackson/CurrencyAmountJacksonSerializerTest.java index 70414f1..aa1ec4a 100644 --- a/jackson/src/test/java/org/fuin/objects4j/jackson/CurrencyAmountJacksonSerializerTest.java +++ b/jackson/src/test/java/org/fuin/objects4j/jackson/CurrencyAmountJacksonSerializerTest.java @@ -25,7 +25,7 @@ import static org.assertj.core.api.Assertions.assertThat; /** - * Test for the {@link CurrencyAmountJacksonSerializer} class. + * Test for {@link CurrencyAmount} serialization. */ class CurrencyAmountJacksonSerializerTest { diff --git a/jackson/src/test/java/org/fuin/objects4j/jackson/DayOfTheWeekJacksonDeserializerTest.java b/jackson/src/test/java/org/fuin/objects4j/jackson/DayOfTheWeekJacksonDeserializerTest.java index 032e56e..b40208c 100644 --- a/jackson/src/test/java/org/fuin/objects4j/jackson/DayOfTheWeekJacksonDeserializerTest.java +++ b/jackson/src/test/java/org/fuin/objects4j/jackson/DayOfTheWeekJacksonDeserializerTest.java @@ -26,7 +26,7 @@ /** - * Test for the {@link DayOfTheWeekJacksonDeserializer} class. + * Test for {@link DayOfTheWeek} deserialization. */ public class DayOfTheWeekJacksonDeserializerTest { diff --git a/jackson/src/test/java/org/fuin/objects4j/jackson/DayOfTheWeekJacksonSerializerTest.java b/jackson/src/test/java/org/fuin/objects4j/jackson/DayOfTheWeekJacksonSerializerTest.java index f4c85ec..55fb088 100644 --- a/jackson/src/test/java/org/fuin/objects4j/jackson/DayOfTheWeekJacksonSerializerTest.java +++ b/jackson/src/test/java/org/fuin/objects4j/jackson/DayOfTheWeekJacksonSerializerTest.java @@ -25,7 +25,7 @@ /** - * Test for the {@link DayOfTheWeekJacksonSerializer} class. + * Test for {@link DayOfTheWeek} serialization. */ public class DayOfTheWeekJacksonSerializerTest { diff --git a/jackson/src/test/java/org/fuin/objects4j/jackson/DayOpeningHoursJacksonDeserializerTest.java b/jackson/src/test/java/org/fuin/objects4j/jackson/DayOpeningHoursJacksonDeserializerTest.java index e29d75d..50fff61 100644 --- a/jackson/src/test/java/org/fuin/objects4j/jackson/DayOpeningHoursJacksonDeserializerTest.java +++ b/jackson/src/test/java/org/fuin/objects4j/jackson/DayOpeningHoursJacksonDeserializerTest.java @@ -26,7 +26,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; /** - * Test for the {@link DayOpeningHoursJacksonDeserializer} class. + * Test for {@link DayOpeningHours} deserialization. */ public class DayOpeningHoursJacksonDeserializerTest { diff --git a/jackson/src/test/java/org/fuin/objects4j/jackson/DayOpeningHoursJacksonSerializerTest.java b/jackson/src/test/java/org/fuin/objects4j/jackson/DayOpeningHoursJacksonSerializerTest.java index 05ce03c..fe3aeab 100644 --- a/jackson/src/test/java/org/fuin/objects4j/jackson/DayOpeningHoursJacksonSerializerTest.java +++ b/jackson/src/test/java/org/fuin/objects4j/jackson/DayOpeningHoursJacksonSerializerTest.java @@ -26,7 +26,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; /** - * Test for the {@link DayOpeningHoursJacksonSerializer} class. + * Test for {@link DayOpeningHours} serialization. */ public class DayOpeningHoursJacksonSerializerTest { diff --git a/jackson/src/test/java/org/fuin/objects4j/jackson/EmailAddressJacksonDeserializerTest.java b/jackson/src/test/java/org/fuin/objects4j/jackson/EmailAddressJacksonDeserializerTest.java index 00f826b..44222b0 100644 --- a/jackson/src/test/java/org/fuin/objects4j/jackson/EmailAddressJacksonDeserializerTest.java +++ b/jackson/src/test/java/org/fuin/objects4j/jackson/EmailAddressJacksonDeserializerTest.java @@ -26,7 +26,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; /** - * Test for the {@link EmailAddressJacksonDeserializer} class. + * Test for the {@link EmailAddress} deserialization. */ public class EmailAddressJacksonDeserializerTest { diff --git a/jackson/src/test/java/org/fuin/objects4j/jackson/EmailAddressJacksonSerializerTest.java b/jackson/src/test/java/org/fuin/objects4j/jackson/EmailAddressJacksonSerializerTest.java index 77b5639..4bb8896 100644 --- a/jackson/src/test/java/org/fuin/objects4j/jackson/EmailAddressJacksonSerializerTest.java +++ b/jackson/src/test/java/org/fuin/objects4j/jackson/EmailAddressJacksonSerializerTest.java @@ -24,7 +24,7 @@ import static org.assertj.core.api.Assertions.assertThat; /** - * Test for the {@link EmailAddressJacksonSerializer} class. + * Test for {@link EmailAddress} serialization. */ public class EmailAddressJacksonSerializerTest { diff --git a/jackson/src/test/java/org/fuin/objects4j/jackson/HourJacksonDeserializerTest.java b/jackson/src/test/java/org/fuin/objects4j/jackson/HourJacksonDeserializerTest.java index c0503bc..8e22693 100644 --- a/jackson/src/test/java/org/fuin/objects4j/jackson/HourJacksonDeserializerTest.java +++ b/jackson/src/test/java/org/fuin/objects4j/jackson/HourJacksonDeserializerTest.java @@ -26,7 +26,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; /** - * Test for the {@link HourJacksonDeserializer} class. + * Test for {@link Hour} deserialization. */ public class HourJacksonDeserializerTest { diff --git a/jackson/src/test/java/org/fuin/objects4j/jackson/HourJacksonSerializerTest.java b/jackson/src/test/java/org/fuin/objects4j/jackson/HourJacksonSerializerTest.java index 96af327..07f1325 100644 --- a/jackson/src/test/java/org/fuin/objects4j/jackson/HourJacksonSerializerTest.java +++ b/jackson/src/test/java/org/fuin/objects4j/jackson/HourJacksonSerializerTest.java @@ -24,7 +24,7 @@ import static org.assertj.core.api.Assertions.assertThat; /** - * Test for the {@link HourJacksonSerializer} class. + * Test for {@link Hour} serialization. */ public class HourJacksonSerializerTest { diff --git a/jackson/src/test/java/org/fuin/objects4j/jackson/HourRangeJacksonDeserializerTest.java b/jackson/src/test/java/org/fuin/objects4j/jackson/HourRangeJacksonDeserializerTest.java index cf90927..2dcc704 100644 --- a/jackson/src/test/java/org/fuin/objects4j/jackson/HourRangeJacksonDeserializerTest.java +++ b/jackson/src/test/java/org/fuin/objects4j/jackson/HourRangeJacksonDeserializerTest.java @@ -26,7 +26,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; /** - * Test for the {@link HourRangeJacksonDeserializer} class. + * Test for {@link HourRange} deserialization. */ public class HourRangeJacksonDeserializerTest { diff --git a/jackson/src/test/java/org/fuin/objects4j/jackson/HourRangeJacksonSerializerTest.java b/jackson/src/test/java/org/fuin/objects4j/jackson/HourRangeJacksonSerializerTest.java index c1f48af..0850ea1 100644 --- a/jackson/src/test/java/org/fuin/objects4j/jackson/HourRangeJacksonSerializerTest.java +++ b/jackson/src/test/java/org/fuin/objects4j/jackson/HourRangeJacksonSerializerTest.java @@ -24,7 +24,7 @@ import static org.assertj.core.api.Assertions.assertThat; /** - * Test for the {@link HourRangeJacksonSerializer} class. + * Test for {@link HourRange} serialization. */ public class HourRangeJacksonSerializerTest { diff --git a/jackson/src/test/java/org/fuin/objects4j/jackson/HourRangesJacksonDeserializerTest.java b/jackson/src/test/java/org/fuin/objects4j/jackson/HourRangesJacksonDeserializerTest.java index b64bd0d..b299206 100644 --- a/jackson/src/test/java/org/fuin/objects4j/jackson/HourRangesJacksonDeserializerTest.java +++ b/jackson/src/test/java/org/fuin/objects4j/jackson/HourRangesJacksonDeserializerTest.java @@ -26,7 +26,7 @@ import static org.assertj.core.api.AssertionsForClassTypes.assertThat; /** - * Test for the {@link HourRangesJacksonDeserializer} class. + * Test for {@link HourRanges} deserialization. */ public class HourRangesJacksonDeserializerTest { diff --git a/jackson/src/test/java/org/fuin/objects4j/jackson/HourRangesJacksonSerializerTest.java b/jackson/src/test/java/org/fuin/objects4j/jackson/HourRangesJacksonSerializerTest.java index b4ee8cd..b9937f4 100644 --- a/jackson/src/test/java/org/fuin/objects4j/jackson/HourRangesJacksonSerializerTest.java +++ b/jackson/src/test/java/org/fuin/objects4j/jackson/HourRangesJacksonSerializerTest.java @@ -26,7 +26,7 @@ import static org.assertj.core.api.AssertionsForClassTypes.assertThat; /** - * Test for the {@link HourRangesJacksonSerializer} class. + * Test for {@link HourRanges} serialization. */ public class HourRangesJacksonSerializerTest { diff --git a/jackson/src/test/java/org/fuin/objects4j/jackson/MultiDayOfTheWeekJacksonDeserializerTest.java b/jackson/src/test/java/org/fuin/objects4j/jackson/MultiDayOfTheWeekJacksonDeserializerTest.java index 44bf8f3..efc275f 100644 --- a/jackson/src/test/java/org/fuin/objects4j/jackson/MultiDayOfTheWeekJacksonDeserializerTest.java +++ b/jackson/src/test/java/org/fuin/objects4j/jackson/MultiDayOfTheWeekJacksonDeserializerTest.java @@ -26,7 +26,7 @@ import static org.assertj.core.api.AssertionsForClassTypes.assertThat; /** - * Test for the {@link MultiDayOfTheWeekJacksonDeserializer} class. + * Test for {@link MultiDayOfTheWeek} deserialization. */ public class MultiDayOfTheWeekJacksonDeserializerTest { diff --git a/jackson/src/test/java/org/fuin/objects4j/jackson/MultiDayOfTheWeekJacksonSerializerTest.java b/jackson/src/test/java/org/fuin/objects4j/jackson/MultiDayOfTheWeekJacksonSerializerTest.java index 03f4c16..c996955 100644 --- a/jackson/src/test/java/org/fuin/objects4j/jackson/MultiDayOfTheWeekJacksonSerializerTest.java +++ b/jackson/src/test/java/org/fuin/objects4j/jackson/MultiDayOfTheWeekJacksonSerializerTest.java @@ -24,7 +24,7 @@ import static org.assertj.core.api.AssertionsForClassTypes.assertThat; /** - * Test for the {@link MultiDayOfTheWeekJacksonSerializer} class. + * Test for {@link MultiDayOfTheWeek} serialization. */ public class MultiDayOfTheWeekJacksonSerializerTest { diff --git a/jackson/src/test/java/org/fuin/objects4j/jackson/Objects4JacksonUtilsTest.java b/jackson/src/test/java/org/fuin/objects4j/jackson/Objects4JacksonUtilsTest.java new file mode 100644 index 0000000..1e36926 --- /dev/null +++ b/jackson/src/test/java/org/fuin/objects4j/jackson/Objects4JacksonUtilsTest.java @@ -0,0 +1,247 @@ +/** + * Copyright (C) 2015 Michael Schnell. All rights reserved. + * http://www.fuin.org/ + *

+ * This library is free software; you can redistribute it and/or modify it under + * the terms of the GNU Lesser General Public License as published by the Free + * Software Foundation; either version 3 of the License, or (at your option) any + * later version. + *

+ * This library is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more + * details. + *

+ * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see http://www.gnu.org/licenses/. + */ +package org.fuin.objects4j.jackson; + +import com.fasterxml.jackson.core.JacksonException; +import com.fasterxml.jackson.core.JsonGenerator; +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.JsonDeserializer; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.Module; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import com.fasterxml.jackson.databind.module.SimpleDeserializers; +import org.junit.jupiter.api.Test; + +import java.io.IOException; +import java.util.Currency; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests the {@link Objects4JacksonUtils} class. + */ +@SuppressWarnings("java:S1186") // Methods should not be empty is fine here for the test +public class Objects4JacksonUtilsTest { + + @Test + public void testJacksonJacksonSerializers() { + + final JsonSerializer a = new JsonSerializer() { + @Override + public void serialize(Object value, JsonGenerator gen, SerializerProvider serializers) throws IOException { + } + }; + final JsonSerializer b = new JsonSerializer() { + @Override + public void serialize(Object value, JsonGenerator gen, SerializerProvider serializers) throws IOException { + } + }; + final JsonSerializer c = new JsonSerializer() { + @Override + public void serialize(Object value, JsonGenerator gen, SerializerProvider serializers) throws IOException { + } + }; + final JsonSerializer d = new JsonSerializer() { + @Override + public void serialize(Object value, JsonGenerator gen, SerializerProvider serializers) throws IOException { + } + }; + + assertThat(Objects4JacksonUtils.joinJacksonSerializers(new JsonSerializer[]{})).isEmpty(); + assertThat(Objects4JacksonUtils.joinJacksonSerializers(new JsonSerializer[]{}, a)).containsExactly(a); + assertThat(Objects4JacksonUtils.joinJacksonSerializers(new JsonSerializer[]{a}, b)).containsExactly(a, b); + assertThat(Objects4JacksonUtils.joinJacksonSerializers(new JsonSerializer[]{a, b}, c)).containsExactly(a, b, c); + assertThat(Objects4JacksonUtils.joinJacksonSerializers(new JsonSerializer[]{a, b}, c, d)).containsExactly(a, b, c, d); + + } + + @Test + public void testJoinJacksonSerializerArrays() { + + final JsonSerializer a = new JsonSerializer() { + @Override + public void serialize(Object value, JsonGenerator gen, SerializerProvider serializers) throws IOException { + } + }; + final JsonSerializer b = new JsonSerializer() { + @Override + public void serialize(Object value, JsonGenerator gen, SerializerProvider serializers) throws IOException { + } + }; + final JsonSerializer c = new JsonSerializer() { + @Override + public void serialize(Object value, JsonGenerator gen, SerializerProvider serializers) throws IOException { + } + }; + final JsonSerializer d = new JsonSerializer() { + @Override + public void serialize(Object value, JsonGenerator gen, SerializerProvider serializers) throws IOException { + } + }; + + assertThat(Objects4JacksonUtils.joinJacksonSerializerArrays(new JsonSerializer[]{})).isEmpty(); + assertThat(Objects4JacksonUtils.joinJacksonSerializerArrays(new JsonSerializer[]{}, new JsonSerializer[]{a})).containsExactly(a); + assertThat(Objects4JacksonUtils.joinJacksonSerializerArrays(new JsonSerializer[]{a}, new JsonSerializer[]{b})).contains(a, b); + assertThat(Objects4JacksonUtils.joinJacksonSerializerArrays(new JsonSerializer[]{a, b}, new JsonSerializer[]{c})).contains(a, b, c); + assertThat(Objects4JacksonUtils.joinJacksonSerializerArrays(new JsonSerializer[]{a, b}, new JsonSerializer[]{c, d})).contains(a, b, c, d); + assertThat(Objects4JacksonUtils.joinJacksonSerializerArrays(new JsonSerializer[]{a}, new JsonSerializer[]{b}, new JsonSerializer[]{c})).contains(a, b, c); + + } + + @Test + public void testJoinJacksonDeserializers() { + + final JsonDeserializer a = new JsonDeserializer() { + @Override + public Object deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JacksonException { + return null; + } + }; + final JsonDeserializer b = new JsonDeserializer() { + @Override + public Object deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JacksonException { + return null; + } + }; + final JsonDeserializer c = new JsonDeserializer() { + @Override + public Object deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JacksonException { + return null; + } + }; + final JsonDeserializer d = new JsonDeserializer() { + @Override + public Object deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JacksonException { + return null; + } + }; + + assertThat(Objects4JacksonUtils.joinJacksonDeserializers(new JsonDeserializer[]{})).isEmpty(); + assertThat(Objects4JacksonUtils.joinJacksonDeserializers(new JsonDeserializer[]{}, a)).containsExactly(a); + assertThat(Objects4JacksonUtils.joinJacksonDeserializers(new JsonDeserializer[]{a}, b)).containsExactly(a, b); + assertThat(Objects4JacksonUtils.joinJacksonDeserializers(new JsonDeserializer[]{a, b}, c)).containsExactly(a, b, c); + assertThat(Objects4JacksonUtils.joinJacksonDeserializers(new JsonDeserializer[]{a, b}, c, d)).containsExactly(a, b, c, d); + + } + + @Test + public void testJoinJacksonDeserializerArrays() { + + final JsonDeserializer a = new JsonDeserializer() { + @Override + public Object deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JacksonException { + return null; + } + }; + final JsonDeserializer b = new JsonDeserializer() { + @Override + public Object deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JacksonException { + return null; + } + }; + final JsonDeserializer c = new JsonDeserializer() { + @Override + public Object deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JacksonException { + return null; + } + }; + final JsonDeserializer d = new JsonDeserializer() { + @Override + public Object deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JacksonException { + return null; + } + }; + + assertThat(Objects4JacksonUtils.joinJacksonDeserializerArrays(new JsonDeserializer[]{})).isEmpty(); + assertThat(Objects4JacksonUtils.joinJacksonDeserializerArrays(new JsonDeserializer[]{}, new JsonDeserializer[]{a})).containsExactly(a); + assertThat(Objects4JacksonUtils.joinJacksonDeserializerArrays(new JsonDeserializer[]{a}, new JsonDeserializer[]{b})).contains(a, b); + assertThat(Objects4JacksonUtils.joinJacksonDeserializerArrays(new JsonDeserializer[]{a, b}, new JsonDeserializer[]{c})).contains(a, b, c); + assertThat(Objects4JacksonUtils.joinJacksonDeserializerArrays(new JsonDeserializer[]{a, b}, new JsonDeserializer[]{c, d})).contains(a, b, c, d); + assertThat(Objects4JacksonUtils.joinJacksonDeserializerArrays(new JsonDeserializer[]{a}, new JsonDeserializer[]{b}, new JsonDeserializer[]{c})).contains(a, b, c); + + } + + @Test + public void testDeserialize() throws JsonProcessingException { + final ObjectMapper mapper = new ObjectMapper().registerModule(new TestModule()); + final ContainerExample example = mapper.readValue(""" + { + "className" : "org.fuin.objects4j.jackson.Objects4JacksonUtilsTest$Foo", + "instance" : { + "name" : "Bar" + } + } + """, ContainerExample.class); + assertThat(example).isNotNull(); + assertThat(example.className()).isEqualTo(Foo.class.getName()); + assertThat(example.instance()).isInstanceOf(Foo.class); + assertThat(((Foo) example.instance()).name()).isEqualTo("Bar"); + } + + public record ContainerExample(String className, Object instance) { + } + + public record Foo(String name) { + } + + public static final class ContainerExampleDeserializer extends StdDeserializer { + + public ContainerExampleDeserializer() { + super(Currency.class); + } + + @Override + public ContainerExample deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException { + final JsonNode node = jp.getCodec().readTree(jp); + final String className = node.get("className").asText(); + final JsonNode instanceNode = node.get("instance"); + final Object instance = Objects4JacksonUtils.deserialize(jp, ctxt, className, instanceNode); + return new ContainerExample(className, instance); + } + + } + + public static final class TestModule extends Module { + + @Override + public String getModuleName() { + return "TestModule"; + } + + @Override + public Version version() { + return new Version(1, 0, 0, null); + } + + @Override + public void setupModule(SetupContext context) { + final SimpleDeserializers deserializers = new SimpleDeserializers(); + deserializers.addDeserializer(ContainerExample.class, new ContainerExampleDeserializer()); + context.addDeserializers(deserializers); + } + + } + +} + diff --git a/jackson/src/test/java/org/fuin/objects4j/jackson/PasswordSha512JacksonDeserializerTest.java b/jackson/src/test/java/org/fuin/objects4j/jackson/PasswordSha512JacksonDeserializerTest.java index 577495b..c98f654 100644 --- a/jackson/src/test/java/org/fuin/objects4j/jackson/PasswordSha512JacksonDeserializerTest.java +++ b/jackson/src/test/java/org/fuin/objects4j/jackson/PasswordSha512JacksonDeserializerTest.java @@ -26,7 +26,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; /** - * Test for the {@link PasswordSha512JacksonDeserializer} class. + * Test for {@link PasswordSha512} deserialization. */ public class PasswordSha512JacksonDeserializerTest { diff --git a/jackson/src/test/java/org/fuin/objects4j/jackson/PasswordSha512JacksonSerializerTest.java b/jackson/src/test/java/org/fuin/objects4j/jackson/PasswordSha512JacksonSerializerTest.java index 7bf68be..50f6d98 100644 --- a/jackson/src/test/java/org/fuin/objects4j/jackson/PasswordSha512JacksonSerializerTest.java +++ b/jackson/src/test/java/org/fuin/objects4j/jackson/PasswordSha512JacksonSerializerTest.java @@ -26,7 +26,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; /** - * Test for the {@link PasswordSha512JacksonSerializer} class. + * Test for {@link PasswordSha512} serialization. */ public class PasswordSha512JacksonSerializerTest { diff --git a/jackson/src/test/java/org/fuin/objects4j/jackson/UserNameJacksonDeserializerTest.java b/jackson/src/test/java/org/fuin/objects4j/jackson/UserNameJacksonDeserializerTest.java index 2ddd5b2..a9453cc 100644 --- a/jackson/src/test/java/org/fuin/objects4j/jackson/UserNameJacksonDeserializerTest.java +++ b/jackson/src/test/java/org/fuin/objects4j/jackson/UserNameJacksonDeserializerTest.java @@ -26,7 +26,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; /** - * Test for the {@link UserNameJacksonDeserializer} class. + * Test for {@link UserName} deserialization. */ public class UserNameJacksonDeserializerTest { diff --git a/jackson/src/test/java/org/fuin/objects4j/jackson/UserNameJacksonSerializerTest.java b/jackson/src/test/java/org/fuin/objects4j/jackson/UserNameJacksonSerializerTest.java index 2fea62d..674e95b 100644 --- a/jackson/src/test/java/org/fuin/objects4j/jackson/UserNameJacksonSerializerTest.java +++ b/jackson/src/test/java/org/fuin/objects4j/jackson/UserNameJacksonSerializerTest.java @@ -26,7 +26,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; /** - * Test for the {@link UserNameJacksonSerializer} class. + * Test for {@link UserName} serialization. */ public class UserNameJacksonSerializerTest { diff --git a/jackson/src/test/java/org/fuin/objects4j/jackson/WeeklyOpeningHoursJacksonDeserializerTest.java b/jackson/src/test/java/org/fuin/objects4j/jackson/WeeklyOpeningHoursJacksonDeserializerTest.java index cd0acce..6ffb7e7 100644 --- a/jackson/src/test/java/org/fuin/objects4j/jackson/WeeklyOpeningHoursJacksonDeserializerTest.java +++ b/jackson/src/test/java/org/fuin/objects4j/jackson/WeeklyOpeningHoursJacksonDeserializerTest.java @@ -26,7 +26,7 @@ import static org.assertj.core.api.AssertionsForClassTypes.assertThat; /** - * Test for the {@link WeeklyOpeningHoursJacksonDeserializer} class. + * Test for {@link WeeklyOpeningHours} deserialization. */ public class WeeklyOpeningHoursJacksonDeserializerTest { diff --git a/jackson/src/test/java/org/fuin/objects4j/jackson/WeeklyOpeningHoursJacksonSerializerTest.java b/jackson/src/test/java/org/fuin/objects4j/jackson/WeeklyOpeningHoursJacksonSerializerTest.java index bd95170..9d3040c 100644 --- a/jackson/src/test/java/org/fuin/objects4j/jackson/WeeklyOpeningHoursJacksonSerializerTest.java +++ b/jackson/src/test/java/org/fuin/objects4j/jackson/WeeklyOpeningHoursJacksonSerializerTest.java @@ -26,7 +26,7 @@ import static org.assertj.core.api.AssertionsForClassTypes.assertThat; /** - * Test for the {@link WeeklyOpeningHoursJacksonSerializer} class. + * Test for {@link WeeklyOpeningHours} serialization. */ public class WeeklyOpeningHoursJacksonSerializerTest { diff --git a/release-notes.md b/release-notes.md index 3373130..2a05a56 100644 --- a/release-notes.md +++ b/release-notes.md @@ -2,6 +2,7 @@ ## 0.11.0 - Removed unnecessary Jackson serializer/deserializer classes +- Added new [Objects4JacksonUtils](jackson/src/main/java/org/fuin/objects4j/jackson/Objects4JacksonUtils.java) utility class ## 0.10.0 From e665efaf5bb476d7bbdea5122b05c00966c48243 Mon Sep 17 00:00:00 2001 From: Michael Schnell Date: Thu, 24 Apr 2025 08:38:15 +0200 Subject: [PATCH 03/10] Added new Jackson helper classes --- .../jackson/ImmutableObjectMapper.java | 117 ++++++++++++++++++ .../jackson/ImmutableObjectMapperTest.java | 54 ++++++++ release-notes.md | 1 + 3 files changed, 172 insertions(+) create mode 100644 jackson/src/main/java/org/fuin/objects4j/jackson/ImmutableObjectMapper.java create mode 100644 jackson/src/test/java/org/fuin/objects4j/jackson/ImmutableObjectMapperTest.java diff --git a/jackson/src/main/java/org/fuin/objects4j/jackson/ImmutableObjectMapper.java b/jackson/src/main/java/org/fuin/objects4j/jackson/ImmutableObjectMapper.java new file mode 100644 index 0000000..3003e21 --- /dev/null +++ b/jackson/src/main/java/org/fuin/objects4j/jackson/ImmutableObjectMapper.java @@ -0,0 +1,117 @@ +package org.fuin.objects4j.jackson; + +import com.fasterxml.jackson.databind.Module; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectReader; +import com.fasterxml.jackson.databind.ObjectWriter; + +import java.util.Objects; + +/** + * Thread-safe access to Jacksons {@link com.fasterxml.jackson.databind.ObjectMapper}. + * + * @param reader Reader that is thread-safe to use. + * @param writer Writer that is thread-safe to use. + */ +public record ImmutableObjectMapper(ObjectReader reader, ObjectWriter writer) { + + /** + * Helper to allow late initialization of the mapper. + */ + public static final class Provider { + + private final Builder builder; + + private ImmutableObjectMapper mapper; + + /** + * Constructor with builder. + * + * @param builder Builder to use. + */ + public Provider(Builder builder) { + this.builder = Objects.requireNonNull(builder, "builder==null"); + } + + /** + * Returns the mapper. The instance will be built on first access. + * + * @return Instance. + */ + public ImmutableObjectMapper mapper() { + if (mapper == null) { + mapper = builder.build(); + } + return mapper; + } + + /** + * Convenience method to return the reader. + * + * @return Reader. + */ + public ObjectReader reader() { + return mapper().reader(); + } + + /** + * Convenience method to return the writer. + * + * @return Writer. + */ + public ObjectWriter writer() { + return mapper().writer(); + } + + } + + /** + * Builds an instance of the outer class. + */ + public static final class Builder { + + private final ObjectMapper mapper; + + private boolean built; + + /** + * Constructor with mapper. + * + * @param mapper Delegate. + */ + public Builder(ObjectMapper mapper) { + this.mapper = Objects.requireNonNull(mapper, "mapper==null"); + built = false; + } + + /** + * Registers a module. + * + * @param module Module to register. + */ + public void registerModule(Module module) { + ensureNotBuilt(); + mapper.registerModule(module); + } + + /** + * Creates an immutable object mapper. After calling this method the builder cannot be used anymore. + * + * @return Instance. + */ + public ImmutableObjectMapper build() { + ensureNotBuilt(); + built = true; + return new ImmutableObjectMapper(mapper.reader(), mapper.writer()); + } + + private void ensureNotBuilt() { + if (built) { + throw new IllegalStateException("The object mapper was already built. Modifications are not allowed anymore."); + } + } + + } + + +} diff --git a/jackson/src/test/java/org/fuin/objects4j/jackson/ImmutableObjectMapperTest.java b/jackson/src/test/java/org/fuin/objects4j/jackson/ImmutableObjectMapperTest.java new file mode 100644 index 0000000..e660e63 --- /dev/null +++ b/jackson/src/test/java/org/fuin/objects4j/jackson/ImmutableObjectMapperTest.java @@ -0,0 +1,54 @@ +package org.fuin.objects4j.jackson; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.module.SimpleModule; +import org.fuin.objects4j.core.EmailAddress; +import org.junit.jupiter.api.Test; + +import java.io.IOException; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +/** + * Test for the {@link ImmutableObjectMapper.Builder} class. + */ +class ImmutableObjectMapperTest { + + @Test + void testProvider() throws IOException { + + final ImmutableObjectMapper.Builder builder = new ImmutableObjectMapper.Builder(new ObjectMapper()); + final ImmutableObjectMapper.Provider provider = new ImmutableObjectMapper.Provider(builder); + builder.registerModule(new Objects4JJacksonAdapterModule()); + + final EmailAddress emailAddress = new EmailAddress("oh-no@mowhere.com"); + String str = provider.writer().writeValueAsString(emailAddress); + assertThat(str).isEqualTo("\"oh-no@mowhere.com\""); + assertThat(provider.reader().readValue(str, EmailAddress.class)).isEqualTo(emailAddress); + + assertThatThrownBy(() -> builder.registerModule(new SimpleModule("Bar"))) + .isInstanceOf(IllegalStateException.class) + .hasMessage("The object mapper was already built. Modifications are not allowed anymore."); + + } + + @Test + void testBuilder() throws IOException { + + final ImmutableObjectMapper.Builder builder = new ImmutableObjectMapper.Builder(new ObjectMapper()); + builder.registerModule(new Objects4JJacksonAdapterModule()); + final ImmutableObjectMapper mapper = builder.build(); + + assertThatThrownBy(() -> builder.registerModule(new SimpleModule("Bar"))) + .isInstanceOf(IllegalStateException.class) + .hasMessage("The object mapper was already built. Modifications are not allowed anymore."); + + final EmailAddress emailAddress = new EmailAddress("oh-no@mowhere.com"); + String str = mapper.writer().writeValueAsString(emailAddress); + assertThat(str).isEqualTo("\"oh-no@mowhere.com\""); + assertThat(mapper.reader().readValue(str, EmailAddress.class)).isEqualTo(emailAddress); + + } + +} \ No newline at end of file diff --git a/release-notes.md b/release-notes.md index 2a05a56..81197ec 100644 --- a/release-notes.md +++ b/release-notes.md @@ -3,6 +3,7 @@ ## 0.11.0 - Removed unnecessary Jackson serializer/deserializer classes - Added new [Objects4JacksonUtils](jackson/src/main/java/org/fuin/objects4j/jackson/Objects4JacksonUtils.java) utility class +- Added new [ImmutableObjectMapper](jackson/src/main/java/org/fuin/objects4j/jackson/ImmutableObjectMapper.java) to allow thread-safe access and late creation. ## 0.10.0 From db21e9c6d2c8bcd09c9839bf64969b9e2d07c7b2 Mon Sep 17 00:00:00 2001 From: Michael Schnell Date: Thu, 24 Apr 2025 11:39:40 +0200 Subject: [PATCH 04/10] Added new JSON-B helper class --- .../fuin/objects4j/jsonb/JsonbProvider.java | 50 +++++++++++++++++++ .../objects4j/jsonb/JsonbProviderTest.java | 32 ++++++++++++ release-notes.md | 3 +- 3 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 jsonb/src/main/java/org/fuin/objects4j/jsonb/JsonbProvider.java create mode 100644 jsonb/src/test/java/org/fuin/objects4j/jsonb/JsonbProviderTest.java diff --git a/jsonb/src/main/java/org/fuin/objects4j/jsonb/JsonbProvider.java b/jsonb/src/main/java/org/fuin/objects4j/jsonb/JsonbProvider.java new file mode 100644 index 0000000..67aec78 --- /dev/null +++ b/jsonb/src/main/java/org/fuin/objects4j/jsonb/JsonbProvider.java @@ -0,0 +1,50 @@ +package org.fuin.objects4j.jsonb; + +import jakarta.json.bind.Jsonb; +import jakarta.json.bind.JsonbBuilder; +import jakarta.json.bind.JsonbConfig; + +import java.util.Objects; + +/** + * Helper to allow late initialization of the JSON-B instance. + */ +public final class JsonbProvider implements AutoCloseable { + + private final JsonbConfig config; + + private Jsonb jsonb; + + /** + * Constructor with config. + * + * @param config Config to use. + */ + public JsonbProvider(JsonbConfig config) { + this.config = Objects.requireNonNull(config, "config==null"); + } + + /** + * Returns the JSON-B instance. It will be built on first access. + * + * @return Instance. + */ + public Jsonb jsonb() { + if (jsonb == null) { + jsonb = JsonbBuilder.create(config); + } + return jsonb; + } + + @Override + public void close() { + if (jsonb != null) { + try { + jsonb.close(); + } catch (final Exception ex) { + throw new IllegalStateException("Failed to close JSON-B instance", ex); + } + } + } + +} diff --git a/jsonb/src/test/java/org/fuin/objects4j/jsonb/JsonbProviderTest.java b/jsonb/src/test/java/org/fuin/objects4j/jsonb/JsonbProviderTest.java new file mode 100644 index 0000000..dd414d1 --- /dev/null +++ b/jsonb/src/test/java/org/fuin/objects4j/jsonb/JsonbProviderTest.java @@ -0,0 +1,32 @@ +package org.fuin.objects4j.jsonb; + +import jakarta.json.bind.JsonbConfig; +import org.fuin.objects4j.core.EmailAddress; +import org.junit.jupiter.api.Test; + +import java.io.IOException; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Test for the {@link JsonbProvider} class. + */ +class JsonbProviderTest { + + @Test + void testProvider() throws IOException { + + final JsonbConfig config = new JsonbConfig(); + try (final JsonbProvider provider = new JsonbProvider(config)) { + config.withAdapters(JsonbUtils.getJsonbAdapterArray()); + + final EmailAddress emailAddress = new EmailAddress("oh-no@mowhere.com"); + String str = provider.jsonb().toJson(emailAddress); + assertThat(str).isEqualTo("\"oh-no@mowhere.com\""); + assertThat(provider.jsonb().fromJson(str, EmailAddress.class)).isEqualTo(emailAddress); + + } + } + + +} \ No newline at end of file diff --git a/release-notes.md b/release-notes.md index 81197ec..9ac6d88 100644 --- a/release-notes.md +++ b/release-notes.md @@ -3,7 +3,8 @@ ## 0.11.0 - Removed unnecessary Jackson serializer/deserializer classes - Added new [Objects4JacksonUtils](jackson/src/main/java/org/fuin/objects4j/jackson/Objects4JacksonUtils.java) utility class -- Added new [ImmutableObjectMapper](jackson/src/main/java/org/fuin/objects4j/jackson/ImmutableObjectMapper.java) to allow thread-safe access and late creation. +- Added new [ImmutableObjectMapper](jackson/src/main/java/org/fuin/objects4j/jackson/ImmutableObjectMapper.java) to allow thread-safe access and late creation. +- Added new [JsonbProvider](jsonb/src/main/java/org/fuin/objects4j/jsonb/JsonbProvider.java) to allow late creation. ## 0.10.0 From 111cc660594aa4630070c8f3ff524672010f6df5 Mon Sep 17 00:00:00 2001 From: Michael Schnell Date: Tue, 29 Apr 2025 07:13:38 +0200 Subject: [PATCH 05/10] Fixed Sonar issues --- .../fuin/objects4j/common/ValueObjectConverter.java | 2 -- .../objects4j/common/FileExistsValidatorTest.java | 5 +---- .../HasPublicStaticIsValidMethodValidatorTest.java | 1 + .../HasPublicStaticValueOfMethodValidatorTest.java | 1 + .../objects4j/common/IsDirectoryValidatorTest.java | 5 +---- .../fuin/objects4j/common/IsFileValidatorTest.java | 5 +---- .../org/fuin/objects4j/core/CurrencyAmountTest.java | 1 + .../fuin/objects4j/core/UUIDStrValidatorTest.java | 8 +------- .../objects4j/jackson/ImmutableObjectMapper.java | 13 ++++++++++++- .../jackson/LocaleJacksonDeserializer.java | 1 - .../jackson/Objects4JJacksonAdapterModule.java | 3 ++- .../ValueObjectStringJacksonDeserializer.java | 1 - .../CurrencyAmountJacksonDeserializerTest.java | 1 - .../CurrencyAmountJacksonSerializerTest.java | 1 - .../jackson/CurrencyJacksonDeserializerTest.java | 1 - .../jackson/CurrencyJacksonSerializerTest.java | 1 - .../DayOpeningHoursJacksonSerializerTest.java | 2 -- .../jackson/HourRangesJacksonSerializerTest.java | 2 -- .../jackson/LocaleJacksonSerializerTest.java | 2 -- .../objects4j/jackson/Objects4JacksonUtilsTest.java | 3 ++- .../PasswordSha512JacksonSerializerTest.java | 2 -- .../jackson/UUIDJacksonSerializerTest.java | 2 -- .../jackson/UserNameJacksonSerializerTest.java | 2 -- .../WeeklyOpeningHoursJacksonSerializerTest.java | 2 -- .../jaxb/CurrencyAmountXmlAdapterTest.java | 2 -- .../objects4j/jaxb/DayOfTheWeekXmlAdapterTest.java | 2 -- .../jaxb/DayOpeningHoursXmlAdapterTest.java | 2 -- .../objects4j/jaxb/EmailAddressXmlAdapterTest.java | 2 -- .../org/fuin/objects4j/jaxb/HourXmlAdapterTest.java | 2 -- .../objects4j/jpa/CurrencyAmountParentEntity.java | 6 ++---- .../org/fuin/objects4j/jpa/CurrencyAmountTest.java | 12 ------------ .../fuin/objects4j/jpa/CurrencyParentEntity.java | 1 - .../org/fuin/objects4j/jsonb/JsonbProvider.java | 8 ++++++++ src/main/resources/.gitkeep | 0 src/test/resources/.gitkeep | 0 .../org/fuin/objects4j/ui/AnnotationAnalyzer.java | 1 + .../java/org/fuin/objects4j/ui/UsageExamples.java | 1 + 37 files changed, 35 insertions(+), 71 deletions(-) delete mode 100644 src/main/resources/.gitkeep delete mode 100644 src/test/resources/.gitkeep diff --git a/common/src/main/java/org/fuin/objects4j/common/ValueObjectConverter.java b/common/src/main/java/org/fuin/objects4j/common/ValueObjectConverter.java index 0532030..c7f3e69 100644 --- a/common/src/main/java/org/fuin/objects4j/common/ValueObjectConverter.java +++ b/common/src/main/java/org/fuin/objects4j/common/ValueObjectConverter.java @@ -17,8 +17,6 @@ */ package org.fuin.objects4j.common; -import org.fuin.objects4j.common.ValueObjectWithBaseType; - /** * Converts a value object into it's base type and back. * diff --git a/common/src/test/java/org/fuin/objects4j/common/FileExistsValidatorTest.java b/common/src/test/java/org/fuin/objects4j/common/FileExistsValidatorTest.java index 5b6e7f4..1126d8b 100644 --- a/common/src/test/java/org/fuin/objects4j/common/FileExistsValidatorTest.java +++ b/common/src/test/java/org/fuin/objects4j/common/FileExistsValidatorTest.java @@ -42,11 +42,8 @@ public final class FileExistsValidatorTest { public final void setUp() throws IOException { testee = new FileExistsValidator(); existingFile = new File(Utils4J.getTempDir(), "FileExistsValidatorTest_File"); - final OutputStream out = new FileOutputStream(existingFile); - try { + try (final OutputStream out = new FileOutputStream(existingFile)) { out.write("Test".getBytes()); - } finally { - out.close(); } existingDir = new File(Utils4J.getTempDir(), "FileExistsValidatorTest_Dir"); existingDir.mkdir(); diff --git a/common/src/test/java/org/fuin/objects4j/common/HasPublicStaticIsValidMethodValidatorTest.java b/common/src/test/java/org/fuin/objects4j/common/HasPublicStaticIsValidMethodValidatorTest.java index fcc5b97..820cc70 100644 --- a/common/src/test/java/org/fuin/objects4j/common/HasPublicStaticIsValidMethodValidatorTest.java +++ b/common/src/test/java/org/fuin/objects4j/common/HasPublicStaticIsValidMethodValidatorTest.java @@ -149,6 +149,7 @@ public static boolean isValid(String str) { @HasPublicStaticIsValidMethod public static final class MyClassNotStatic { + @SuppressWarnings("java:S1172") // Unused method parameter is ok here public boolean isValid(String str) { return true; } diff --git a/common/src/test/java/org/fuin/objects4j/common/HasPublicStaticValueOfMethodValidatorTest.java b/common/src/test/java/org/fuin/objects4j/common/HasPublicStaticValueOfMethodValidatorTest.java index 60ffa11..fbfcf1a 100644 --- a/common/src/test/java/org/fuin/objects4j/common/HasPublicStaticValueOfMethodValidatorTest.java +++ b/common/src/test/java/org/fuin/objects4j/common/HasPublicStaticValueOfMethodValidatorTest.java @@ -182,6 +182,7 @@ public static Integer valueOf(String str) { @HasPublicStaticValueOfMethod public static final class MyClassWrongReturnValue { + @SuppressWarnings("java:S1172") // Unused method parameter is ok here public static MyClassWrongReturnValue valueOf(String str) { return new MyClassWrongReturnValue(); } diff --git a/common/src/test/java/org/fuin/objects4j/common/IsDirectoryValidatorTest.java b/common/src/test/java/org/fuin/objects4j/common/IsDirectoryValidatorTest.java index 18702cb..23b1570 100644 --- a/common/src/test/java/org/fuin/objects4j/common/IsDirectoryValidatorTest.java +++ b/common/src/test/java/org/fuin/objects4j/common/IsDirectoryValidatorTest.java @@ -41,11 +41,8 @@ public final class IsDirectoryValidatorTest { public final void setUp() throws IOException { testee = new IsDirectoryValidator(); existingFile = new File(Utils4J.getTempDir(), "IsDirectoryValidatorTest_File"); - final OutputStream out = new FileOutputStream(existingFile); - try { + try (final OutputStream out = new FileOutputStream(existingFile)) { out.write("Test".getBytes()); - } finally { - out.close(); } existingDir = new File(Utils4J.getTempDir(), "IsDirectoryValidatorTest_Dir"); existingDir.mkdir(); diff --git a/common/src/test/java/org/fuin/objects4j/common/IsFileValidatorTest.java b/common/src/test/java/org/fuin/objects4j/common/IsFileValidatorTest.java index 4a4474d..71a48b2 100644 --- a/common/src/test/java/org/fuin/objects4j/common/IsFileValidatorTest.java +++ b/common/src/test/java/org/fuin/objects4j/common/IsFileValidatorTest.java @@ -41,11 +41,8 @@ public final class IsFileValidatorTest { public final void setUp() throws IOException { testee = new IsFileValidator(); existingFile = new File(Utils4J.getTempDir(), "IsFileValidatorTest_File"); - final OutputStream out = new FileOutputStream(existingFile); - try { + try (final OutputStream out = new FileOutputStream(existingFile)) { out.write("Test".getBytes()); - } finally { - out.close(); } existingDir = new File(Utils4J.getTempDir(), "IsFileValidatorTest_Dir"); existingDir.mkdir(); diff --git a/core/src/test/java/org/fuin/objects4j/core/CurrencyAmountTest.java b/core/src/test/java/org/fuin/objects4j/core/CurrencyAmountTest.java index fe75d4c..6591fe5 100644 --- a/core/src/test/java/org/fuin/objects4j/core/CurrencyAmountTest.java +++ b/core/src/test/java/org/fuin/objects4j/core/CurrencyAmountTest.java @@ -42,6 +42,7 @@ void testEqualsHashCode() { } @Test + @SuppressWarnings("java:S117") // Underscore in var name is ok here void testCompareTo() { final CurrencyAmount eur123_2 = new CurrencyAmount(bd(123, 2), cu("EUR")); diff --git a/core/src/test/java/org/fuin/objects4j/core/UUIDStrValidatorTest.java b/core/src/test/java/org/fuin/objects4j/core/UUIDStrValidatorTest.java index d61a7c5..0c01085 100644 --- a/core/src/test/java/org/fuin/objects4j/core/UUIDStrValidatorTest.java +++ b/core/src/test/java/org/fuin/objects4j/core/UUIDStrValidatorTest.java @@ -44,7 +44,6 @@ public final void tearDown() { @Test void testValidConstantLowerCase() { - final String value = "089ba5d3-1027-421d-add7-7e65f95b6ed6"; assertThat(testee.isValid(value, null)).isTrue(); assertThat(UUIDStrValidator.parseArg("a", value)).isEqualTo(UUID.fromString(value)); @@ -53,7 +52,7 @@ void testValidConstantLowerCase() { @Test void testValidConstantUpperCase() { - final String value = "089ba5d3-1027-421d-add7-7e65f95b6ed6"; + final String value = "089BA5D3-1027-421D-ADD7-7E65F95B6ED6"; assertThat(testee.isValid(value, null)).isTrue(); assertThat(UUIDStrValidator.parseArg("a", value)).isEqualTo(UUID.fromString(value)); } @@ -117,10 +116,5 @@ void testInvalidSpecialCharacters() { } - @Test - void testParseArg() { - - } - } // CHECKSTYLE:ON diff --git a/jackson/src/main/java/org/fuin/objects4j/jackson/ImmutableObjectMapper.java b/jackson/src/main/java/org/fuin/objects4j/jackson/ImmutableObjectMapper.java index 3003e21..d412e93 100644 --- a/jackson/src/main/java/org/fuin/objects4j/jackson/ImmutableObjectMapper.java +++ b/jackson/src/main/java/org/fuin/objects4j/jackson/ImmutableObjectMapper.java @@ -5,19 +5,29 @@ import com.fasterxml.jackson.databind.ObjectReader; import com.fasterxml.jackson.databind.ObjectWriter; +import javax.annotation.concurrent.NotThreadSafe; +import javax.annotation.concurrent.ThreadSafe; import java.util.Objects; /** - * Thread-safe access to Jacksons {@link com.fasterxml.jackson.databind.ObjectMapper}. + * Thread-safe access to Jackson's {@link com.fasterxml.jackson.databind.ObjectMapper}. * * @param reader Reader that is thread-safe to use. * @param writer Writer that is thread-safe to use. */ +@ThreadSafe public record ImmutableObjectMapper(ObjectReader reader, ObjectWriter writer) { /** * Helper to allow late initialization of the mapper. + *

+ * To make the provider thread-safe for processing you need to finalize the instance + * by calling the {@link #mapper()} once your application startup has finished. + * For Spring and Quarkus a good option is to have another "@ApplicationScope" + * bean with a "@PostConstruct" method that will do it. + *

*/ + @NotThreadSafe public static final class Provider { private final Builder builder; @@ -68,6 +78,7 @@ public ObjectWriter writer() { /** * Builds an instance of the outer class. */ + @NotThreadSafe public static final class Builder { private final ObjectMapper mapper; diff --git a/jackson/src/main/java/org/fuin/objects4j/jackson/LocaleJacksonDeserializer.java b/jackson/src/main/java/org/fuin/objects4j/jackson/LocaleJacksonDeserializer.java index 769cf7f..6510ae2 100644 --- a/jackson/src/main/java/org/fuin/objects4j/jackson/LocaleJacksonDeserializer.java +++ b/jackson/src/main/java/org/fuin/objects4j/jackson/LocaleJacksonDeserializer.java @@ -25,7 +25,6 @@ import javax.annotation.concurrent.ThreadSafe; import java.io.IOException; -import java.util.Currency; import java.util.Locale; /** diff --git a/jackson/src/main/java/org/fuin/objects4j/jackson/Objects4JJacksonAdapterModule.java b/jackson/src/main/java/org/fuin/objects4j/jackson/Objects4JJacksonAdapterModule.java index 4668edc..1d24bbc 100644 --- a/jackson/src/main/java/org/fuin/objects4j/jackson/Objects4JJacksonAdapterModule.java +++ b/jackson/src/main/java/org/fuin/objects4j/jackson/Objects4JJacksonAdapterModule.java @@ -71,7 +71,8 @@ public void setupModule(Module.SetupContext context) { @Override public Version version() { // Don't forget to change from release to SNAPSHOT and back! - return new Version(0, 11, 0, "SNAPSHOT"); + return new Version(0, 11, 0, "SNAPSHOT", + "org.fuin.objects4j", "objects4j-jackson"); } } \ No newline at end of file diff --git a/jackson/src/main/java/org/fuin/objects4j/jackson/ValueObjectStringJacksonDeserializer.java b/jackson/src/main/java/org/fuin/objects4j/jackson/ValueObjectStringJacksonDeserializer.java index e2af7c8..e859bc6 100644 --- a/jackson/src/main/java/org/fuin/objects4j/jackson/ValueObjectStringJacksonDeserializer.java +++ b/jackson/src/main/java/org/fuin/objects4j/jackson/ValueObjectStringJacksonDeserializer.java @@ -23,7 +23,6 @@ import com.fasterxml.jackson.databind.deser.std.StdDeserializer; import jakarta.validation.constraints.NotNull; import org.fuin.objects4j.common.Contract; -import org.fuin.objects4j.common.AsStringCapable; import org.fuin.objects4j.common.ValueOfCapable; import org.fuin.utils4j.TestOmitted; diff --git a/jackson/src/test/java/org/fuin/objects4j/jackson/CurrencyAmountJacksonDeserializerTest.java b/jackson/src/test/java/org/fuin/objects4j/jackson/CurrencyAmountJacksonDeserializerTest.java index cbb36b4..822b29b 100644 --- a/jackson/src/test/java/org/fuin/objects4j/jackson/CurrencyAmountJacksonDeserializerTest.java +++ b/jackson/src/test/java/org/fuin/objects4j/jackson/CurrencyAmountJacksonDeserializerTest.java @@ -18,7 +18,6 @@ package org.fuin.objects4j.jackson; import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; import org.fuin.objects4j.core.CurrencyAmount; import org.junit.jupiter.api.Test; diff --git a/jackson/src/test/java/org/fuin/objects4j/jackson/CurrencyAmountJacksonSerializerTest.java b/jackson/src/test/java/org/fuin/objects4j/jackson/CurrencyAmountJacksonSerializerTest.java index aa1ec4a..1722876 100644 --- a/jackson/src/test/java/org/fuin/objects4j/jackson/CurrencyAmountJacksonSerializerTest.java +++ b/jackson/src/test/java/org/fuin/objects4j/jackson/CurrencyAmountJacksonSerializerTest.java @@ -18,7 +18,6 @@ package org.fuin.objects4j.jackson; import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; import org.fuin.objects4j.core.CurrencyAmount; import org.junit.jupiter.api.Test; diff --git a/jackson/src/test/java/org/fuin/objects4j/jackson/CurrencyJacksonDeserializerTest.java b/jackson/src/test/java/org/fuin/objects4j/jackson/CurrencyJacksonDeserializerTest.java index 2a0f935..e0640e5 100644 --- a/jackson/src/test/java/org/fuin/objects4j/jackson/CurrencyJacksonDeserializerTest.java +++ b/jackson/src/test/java/org/fuin/objects4j/jackson/CurrencyJacksonDeserializerTest.java @@ -18,7 +18,6 @@ package org.fuin.objects4j.jackson; import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.Test; import java.util.Currency; diff --git a/jackson/src/test/java/org/fuin/objects4j/jackson/CurrencyJacksonSerializerTest.java b/jackson/src/test/java/org/fuin/objects4j/jackson/CurrencyJacksonSerializerTest.java index 5e1fee1..e6392a5 100644 --- a/jackson/src/test/java/org/fuin/objects4j/jackson/CurrencyJacksonSerializerTest.java +++ b/jackson/src/test/java/org/fuin/objects4j/jackson/CurrencyJacksonSerializerTest.java @@ -18,7 +18,6 @@ package org.fuin.objects4j.jackson; import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.Test; import java.util.Currency; diff --git a/jackson/src/test/java/org/fuin/objects4j/jackson/DayOpeningHoursJacksonSerializerTest.java b/jackson/src/test/java/org/fuin/objects4j/jackson/DayOpeningHoursJacksonSerializerTest.java index fe3aeab..dea561b 100644 --- a/jackson/src/test/java/org/fuin/objects4j/jackson/DayOpeningHoursJacksonSerializerTest.java +++ b/jackson/src/test/java/org/fuin/objects4j/jackson/DayOpeningHoursJacksonSerializerTest.java @@ -18,12 +18,10 @@ package org.fuin.objects4j.jackson; import com.fasterxml.jackson.core.JsonProcessingException; -import org.fuin.objects4j.common.ConstraintViolationException; import org.fuin.objects4j.core.DayOpeningHours; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; /** * Test for {@link DayOpeningHours} serialization. diff --git a/jackson/src/test/java/org/fuin/objects4j/jackson/HourRangesJacksonSerializerTest.java b/jackson/src/test/java/org/fuin/objects4j/jackson/HourRangesJacksonSerializerTest.java index b9937f4..8ebc23a 100644 --- a/jackson/src/test/java/org/fuin/objects4j/jackson/HourRangesJacksonSerializerTest.java +++ b/jackson/src/test/java/org/fuin/objects4j/jackson/HourRangesJacksonSerializerTest.java @@ -18,11 +18,9 @@ package org.fuin.objects4j.jackson; import com.fasterxml.jackson.core.JsonProcessingException; -import org.fuin.objects4j.common.ConstraintViolationException; import org.fuin.objects4j.core.HourRanges; import org.junit.jupiter.api.Test; -import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; /** diff --git a/jackson/src/test/java/org/fuin/objects4j/jackson/LocaleJacksonSerializerTest.java b/jackson/src/test/java/org/fuin/objects4j/jackson/LocaleJacksonSerializerTest.java index ff13756..4e0fcae 100644 --- a/jackson/src/test/java/org/fuin/objects4j/jackson/LocaleJacksonSerializerTest.java +++ b/jackson/src/test/java/org/fuin/objects4j/jackson/LocaleJacksonSerializerTest.java @@ -18,12 +18,10 @@ package org.fuin.objects4j.jackson; import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.Test; import java.util.Locale; -import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; /** diff --git a/jackson/src/test/java/org/fuin/objects4j/jackson/Objects4JacksonUtilsTest.java b/jackson/src/test/java/org/fuin/objects4j/jackson/Objects4JacksonUtilsTest.java index 1e36926..9318c67 100644 --- a/jackson/src/test/java/org/fuin/objects4j/jackson/Objects4JacksonUtilsTest.java +++ b/jackson/src/test/java/org/fuin/objects4j/jackson/Objects4JacksonUtilsTest.java @@ -231,7 +231,8 @@ public String getModuleName() { @Override public Version version() { - return new Version(1, 0, 0, null); + return new Version(1, 0, 0, null, + "foo", "bar"); } @Override diff --git a/jackson/src/test/java/org/fuin/objects4j/jackson/PasswordSha512JacksonSerializerTest.java b/jackson/src/test/java/org/fuin/objects4j/jackson/PasswordSha512JacksonSerializerTest.java index 50f6d98..8493a12 100644 --- a/jackson/src/test/java/org/fuin/objects4j/jackson/PasswordSha512JacksonSerializerTest.java +++ b/jackson/src/test/java/org/fuin/objects4j/jackson/PasswordSha512JacksonSerializerTest.java @@ -18,12 +18,10 @@ package org.fuin.objects4j.jackson; import com.fasterxml.jackson.core.JsonProcessingException; -import org.fuin.objects4j.common.ConstraintViolationException; import org.fuin.objects4j.core.PasswordSha512; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; /** * Test for {@link PasswordSha512} serialization. diff --git a/jackson/src/test/java/org/fuin/objects4j/jackson/UUIDJacksonSerializerTest.java b/jackson/src/test/java/org/fuin/objects4j/jackson/UUIDJacksonSerializerTest.java index 458e368..3a2521c 100644 --- a/jackson/src/test/java/org/fuin/objects4j/jackson/UUIDJacksonSerializerTest.java +++ b/jackson/src/test/java/org/fuin/objects4j/jackson/UUIDJacksonSerializerTest.java @@ -18,13 +18,11 @@ package org.fuin.objects4j.jackson; import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.Test; import java.util.UUID; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; /** * Test for the {@link UUIDJacksonSerializer} class. diff --git a/jackson/src/test/java/org/fuin/objects4j/jackson/UserNameJacksonSerializerTest.java b/jackson/src/test/java/org/fuin/objects4j/jackson/UserNameJacksonSerializerTest.java index 674e95b..e41ebfe 100644 --- a/jackson/src/test/java/org/fuin/objects4j/jackson/UserNameJacksonSerializerTest.java +++ b/jackson/src/test/java/org/fuin/objects4j/jackson/UserNameJacksonSerializerTest.java @@ -18,12 +18,10 @@ package org.fuin.objects4j.jackson; import com.fasterxml.jackson.core.JsonProcessingException; -import org.fuin.objects4j.common.ConstraintViolationException; import org.fuin.objects4j.core.UserName; import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; /** * Test for {@link UserName} serialization. diff --git a/jackson/src/test/java/org/fuin/objects4j/jackson/WeeklyOpeningHoursJacksonSerializerTest.java b/jackson/src/test/java/org/fuin/objects4j/jackson/WeeklyOpeningHoursJacksonSerializerTest.java index 9d3040c..b4e8cbb 100644 --- a/jackson/src/test/java/org/fuin/objects4j/jackson/WeeklyOpeningHoursJacksonSerializerTest.java +++ b/jackson/src/test/java/org/fuin/objects4j/jackson/WeeklyOpeningHoursJacksonSerializerTest.java @@ -18,11 +18,9 @@ package org.fuin.objects4j.jackson; import com.fasterxml.jackson.core.JsonProcessingException; -import org.fuin.objects4j.common.ConstraintViolationException; import org.fuin.objects4j.core.WeeklyOpeningHours; import org.junit.jupiter.api.Test; -import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; /** diff --git a/jaxb/src/test/java/org/fuin/objects4j/jaxb/CurrencyAmountXmlAdapterTest.java b/jaxb/src/test/java/org/fuin/objects4j/jaxb/CurrencyAmountXmlAdapterTest.java index c618eb7..9861353 100644 --- a/jaxb/src/test/java/org/fuin/objects4j/jaxb/CurrencyAmountXmlAdapterTest.java +++ b/jaxb/src/test/java/org/fuin/objects4j/jaxb/CurrencyAmountXmlAdapterTest.java @@ -29,8 +29,6 @@ public class CurrencyAmountXmlAdapterTest { private static final String XML = XML_PREFIX + ""; - private static final String JSON = "{\"ca\":\"1234.56 EUR\"}"; - @Test public final void testMarshalJaxb() throws JAXBException { diff --git a/jaxb/src/test/java/org/fuin/objects4j/jaxb/DayOfTheWeekXmlAdapterTest.java b/jaxb/src/test/java/org/fuin/objects4j/jaxb/DayOfTheWeekXmlAdapterTest.java index bf94d90..e54d18e 100644 --- a/jaxb/src/test/java/org/fuin/objects4j/jaxb/DayOfTheWeekXmlAdapterTest.java +++ b/jaxb/src/test/java/org/fuin/objects4j/jaxb/DayOfTheWeekXmlAdapterTest.java @@ -29,8 +29,6 @@ public class DayOfTheWeekXmlAdapterTest { private static final String XML = XML_PREFIX + ""; - private static final String JSON = "{\"dayOfTheWeek\":\"FRI\"}"; - @Test public final void testMarshal() throws JAXBException { diff --git a/jaxb/src/test/java/org/fuin/objects4j/jaxb/DayOpeningHoursXmlAdapterTest.java b/jaxb/src/test/java/org/fuin/objects4j/jaxb/DayOpeningHoursXmlAdapterTest.java index 9d62bc5..35c65c7 100644 --- a/jaxb/src/test/java/org/fuin/objects4j/jaxb/DayOpeningHoursXmlAdapterTest.java +++ b/jaxb/src/test/java/org/fuin/objects4j/jaxb/DayOpeningHoursXmlAdapterTest.java @@ -30,8 +30,6 @@ public class DayOpeningHoursXmlAdapterTest { private static final String XML = XML_PREFIX + ""; - private static final String JSON = "{\"dayOpeningHours\":\"MON 00:00-24:00\"}"; - @Test public final void testMarshal() throws JAXBException { diff --git a/jaxb/src/test/java/org/fuin/objects4j/jaxb/EmailAddressXmlAdapterTest.java b/jaxb/src/test/java/org/fuin/objects4j/jaxb/EmailAddressXmlAdapterTest.java index 81923e2..5d7cc3b 100644 --- a/jaxb/src/test/java/org/fuin/objects4j/jaxb/EmailAddressXmlAdapterTest.java +++ b/jaxb/src/test/java/org/fuin/objects4j/jaxb/EmailAddressXmlAdapterTest.java @@ -30,8 +30,6 @@ public class EmailAddressXmlAdapterTest { private static final String XML = XML_PREFIX + ""; - private static final String JSON = "{\"email\":\"a@b.c\"}"; - @Test public final void testMarshal() throws JAXBException { diff --git a/jaxb/src/test/java/org/fuin/objects4j/jaxb/HourXmlAdapterTest.java b/jaxb/src/test/java/org/fuin/objects4j/jaxb/HourXmlAdapterTest.java index e3fa637..203e27c 100644 --- a/jaxb/src/test/java/org/fuin/objects4j/jaxb/HourXmlAdapterTest.java +++ b/jaxb/src/test/java/org/fuin/objects4j/jaxb/HourXmlAdapterTest.java @@ -30,8 +30,6 @@ public class HourXmlAdapterTest { private static final String XML = XML_PREFIX + ""; - private static final String JSON = "{\"hour\":\"23:59\"}"; - @Test public final void testMarshal() throws JAXBException { diff --git a/jpa/src/test/java/org/fuin/objects4j/jpa/CurrencyAmountParentEntity.java b/jpa/src/test/java/org/fuin/objects4j/jpa/CurrencyAmountParentEntity.java index 543535c..5cd6634 100644 --- a/jpa/src/test/java/org/fuin/objects4j/jpa/CurrencyAmountParentEntity.java +++ b/jpa/src/test/java/org/fuin/objects4j/jpa/CurrencyAmountParentEntity.java @@ -18,7 +18,6 @@ package org.fuin.objects4j.jpa; import jakarta.persistence.AttributeOverride; -import jakarta.persistence.AttributeOverrides; import jakarta.persistence.Basic; import jakarta.persistence.Column; import jakarta.persistence.Convert; @@ -36,9 +35,8 @@ public class CurrencyAmountParentEntity { // @formatter:off @Embedded - @AttributeOverrides({ - @AttributeOverride(name = "amount", column = @Column(name = "AMOUNT", precision = 12, scale = 2, nullable = true)), - @AttributeOverride(name = "currency", column = @Column(name = "CURRENCY", columnDefinition = "varchar(255)", nullable = true)) }) + @AttributeOverride(name = "amount", column = @Column(name = "AMOUNT", precision = 12, scale = 2, nullable = true)) + @AttributeOverride(name = "currency", column = @Column(name = "CURRENCY", columnDefinition = "varchar(255)", nullable = true)) // @formatter:on private CurrencyAmount amount; diff --git a/jpa/src/test/java/org/fuin/objects4j/jpa/CurrencyAmountTest.java b/jpa/src/test/java/org/fuin/objects4j/jpa/CurrencyAmountTest.java index 08ade7b..d4d6944 100644 --- a/jpa/src/test/java/org/fuin/objects4j/jpa/CurrencyAmountTest.java +++ b/jpa/src/test/java/org/fuin/objects4j/jpa/CurrencyAmountTest.java @@ -72,16 +72,4 @@ private Object executeSingleResult(String sql) { return query.getSingleResult(); } - private static Currency cu(String code) { - return Currency.getInstance(code); - } - - private static BigDecimal bd(int number, int scale) { - return new BigDecimal(number).setScale(scale, RoundingMode.HALF_UP); - } - - private static BigDecimal bd(double number, int scale) { - return new BigDecimal(number).setScale(scale, RoundingMode.HALF_UP); - } - } diff --git a/jpa/src/test/java/org/fuin/objects4j/jpa/CurrencyParentEntity.java b/jpa/src/test/java/org/fuin/objects4j/jpa/CurrencyParentEntity.java index 4058999..6d35917 100644 --- a/jpa/src/test/java/org/fuin/objects4j/jpa/CurrencyParentEntity.java +++ b/jpa/src/test/java/org/fuin/objects4j/jpa/CurrencyParentEntity.java @@ -17,7 +17,6 @@ */ package org.fuin.objects4j.jpa; -import jakarta.persistence.Basic; import jakarta.persistence.Column; import jakarta.persistence.Convert; import jakarta.persistence.Entity; diff --git a/jsonb/src/main/java/org/fuin/objects4j/jsonb/JsonbProvider.java b/jsonb/src/main/java/org/fuin/objects4j/jsonb/JsonbProvider.java index 67aec78..9f67c15 100644 --- a/jsonb/src/main/java/org/fuin/objects4j/jsonb/JsonbProvider.java +++ b/jsonb/src/main/java/org/fuin/objects4j/jsonb/JsonbProvider.java @@ -4,11 +4,19 @@ import jakarta.json.bind.JsonbBuilder; import jakarta.json.bind.JsonbConfig; +import javax.annotation.concurrent.NotThreadSafe; import java.util.Objects; /** * Helper to allow late initialization of the JSON-B instance. + *

+ * To make the provider thread-safe for processing you need to finalize the instance + * by calling the {@link #jsonb()} once your application startup has finished. + * For Spring and Quarkus a good option is to have another "@ApplicationScope" + * bean with a "@PostConstruct" method that will do it. + *

*/ +@NotThreadSafe public final class JsonbProvider implements AutoCloseable { private final JsonbConfig config; diff --git a/src/main/resources/.gitkeep b/src/main/resources/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/src/test/resources/.gitkeep b/src/test/resources/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/ui/src/main/java/org/fuin/objects4j/ui/AnnotationAnalyzer.java b/ui/src/main/java/org/fuin/objects4j/ui/AnnotationAnalyzer.java index 546173d..5632ca3 100644 --- a/ui/src/main/java/org/fuin/objects4j/ui/AnnotationAnalyzer.java +++ b/ui/src/main/java/org/fuin/objects4j/ui/AnnotationAnalyzer.java @@ -386,6 +386,7 @@ private static String name(@NotNull final Class clasz) { return name; } + @SuppressWarnings("java:S101") // We don't care here about class name private static final class UNKNOWN_CLASS { } diff --git a/ui/src/test/java/org/fuin/objects4j/ui/UsageExamples.java b/ui/src/test/java/org/fuin/objects4j/ui/UsageExamples.java index f29a718..0795f48 100644 --- a/ui/src/test/java/org/fuin/objects4j/ui/UsageExamples.java +++ b/ui/src/test/java/org/fuin/objects4j/ui/UsageExamples.java @@ -40,6 +40,7 @@ public class UsageExamples { * @throws Exception * Something went wrong. */ + @SuppressWarnings("java:S125") // Code is commented out intentionally public static void main(String[] args) throws Exception { AnnotationAnalyzer analyzer = new AnnotationAnalyzer(); From 47f14befe4edddda50dad2672a1b2776f42714d6 Mon Sep 17 00:00:00 2001 From: Michael Schnell Date: Tue, 29 Apr 2025 09:07:38 +0200 Subject: [PATCH 06/10] Added missing jackson module to Sonar --- jacoco/pom.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/jacoco/pom.xml b/jacoco/pom.xml index 72aa040..389a788 100644 --- a/jacoco/pom.xml +++ b/jacoco/pom.xml @@ -40,6 +40,11 @@ objects4j-jsonb + + org.fuin.objects4j + objects4j-jackson + + org.fuin.objects4j objects4j-ui From 6d58e76e46ec8c6db107316b0e9a4e34ddddb231 Mon Sep 17 00:00:00 2001 From: Michael Schnell Date: Tue, 29 Apr 2025 19:16:58 +0200 Subject: [PATCH 07/10] Added option to return the object mapper itself --- .../jackson/ImmutableObjectMapper.java | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/jackson/src/main/java/org/fuin/objects4j/jackson/ImmutableObjectMapper.java b/jackson/src/main/java/org/fuin/objects4j/jackson/ImmutableObjectMapper.java index d412e93..5000da2 100644 --- a/jackson/src/main/java/org/fuin/objects4j/jackson/ImmutableObjectMapper.java +++ b/jackson/src/main/java/org/fuin/objects4j/jackson/ImmutableObjectMapper.java @@ -12,11 +12,28 @@ /** * Thread-safe access to Jackson's {@link com.fasterxml.jackson.databind.ObjectMapper}. * - * @param reader Reader that is thread-safe to use. - * @param writer Writer that is thread-safe to use. + * @param objectMapper Mapper that provides the reader and writer. */ @ThreadSafe -public record ImmutableObjectMapper(ObjectReader reader, ObjectWriter writer) { +public record ImmutableObjectMapper(ObjectMapper objectMapper) { + + /** + * Thread-safe reader. + * + * @return Reader. + */ + public ObjectReader reader() { + return objectMapper.reader(); + } + + /** + * Thread-safe writer. + * + * @return Writer. + */ + public ObjectWriter writer() { + return objectMapper.writer(); + } /** * Helper to allow late initialization of the mapper. @@ -113,7 +130,7 @@ public void registerModule(Module module) { public ImmutableObjectMapper build() { ensureNotBuilt(); built = true; - return new ImmutableObjectMapper(mapper.reader(), mapper.writer()); + return new ImmutableObjectMapper(mapper); } private void ensureNotBuilt() { From 46a6a4b41d3122dcb199dd45d993f84e292b8088 Mon Sep 17 00:00:00 2001 From: Michael Schnell Date: Thu, 1 May 2025 06:55:21 +0200 Subject: [PATCH 08/10] Renamed Jackson module --- ...JJacksonAdapterModule.java => Objects4JJacksonModule.java} | 2 +- .../META-INF/services/com.fasterxml.jackson.databind.Module | 2 +- .../org/fuin/objects4j/jackson/ImmutableObjectMapperTest.java | 4 ++-- .../test/java/org/fuin/objects4j/jackson/JacksonHelper.java | 4 ++-- ...AdapterModuleTest.java => Objects4JJacksonModuleTest.java} | 4 ++-- pom.xml | 4 ++-- {quarkus => quarkus-test}/pom.xml | 0 .../src/main/java/org/fuin/objects4j/quarkus/Data.java | 0 .../main/java/org/fuin/objects4j/quarkus/DataResource.java | 0 .../src/main/java/org/fuin/objects4j/quarkus/QuarkusApp.java | 0 .../src/main/resources/application.properties | 0 .../test/java/org/fuin/objects4j/quarkus/MariaDbResource.java | 0 .../test/java/org/fuin/objects4j/quarkus/QuarkusAppTest.java | 0 {spring-boot => spring-boot-test}/pom.xml | 0 .../src/main/java/org/fuin/objects4j/springboot/Data.java | 0 .../main/java/org/fuin/objects4j/springboot/DataResource.java | 0 .../java/org/fuin/objects4j/springboot/SpringBootApp.java | 0 .../java/org/fuin/objects4j/springboot/SpringBootConfig.java | 4 ++-- .../src/main/resources/application.properties | 0 .../java/org/fuin/objects4j/springboot/SpringBootAppTest.java | 0 20 files changed, 12 insertions(+), 12 deletions(-) rename jackson/src/main/java/org/fuin/objects4j/jackson/{Objects4JJacksonAdapterModule.java => Objects4JJacksonModule.java} (98%) rename jackson/src/test/java/org/fuin/objects4j/jackson/{Objects4JJacksonAdapterModuleTest.java => Objects4JJacksonModuleTest.java} (51%) rename {quarkus => quarkus-test}/pom.xml (100%) rename {quarkus => quarkus-test}/src/main/java/org/fuin/objects4j/quarkus/Data.java (100%) rename {quarkus => quarkus-test}/src/main/java/org/fuin/objects4j/quarkus/DataResource.java (100%) rename {quarkus => quarkus-test}/src/main/java/org/fuin/objects4j/quarkus/QuarkusApp.java (100%) rename {quarkus => quarkus-test}/src/main/resources/application.properties (100%) rename {quarkus => quarkus-test}/src/test/java/org/fuin/objects4j/quarkus/MariaDbResource.java (100%) rename {quarkus => quarkus-test}/src/test/java/org/fuin/objects4j/quarkus/QuarkusAppTest.java (100%) rename {spring-boot => spring-boot-test}/pom.xml (100%) rename {spring-boot => spring-boot-test}/src/main/java/org/fuin/objects4j/springboot/Data.java (100%) rename {spring-boot => spring-boot-test}/src/main/java/org/fuin/objects4j/springboot/DataResource.java (100%) rename {spring-boot => spring-boot-test}/src/main/java/org/fuin/objects4j/springboot/SpringBootApp.java (100%) rename {spring-boot => spring-boot-test}/src/main/java/org/fuin/objects4j/springboot/SpringBootConfig.java (80%) rename {spring-boot => spring-boot-test}/src/main/resources/application.properties (100%) rename {spring-boot => spring-boot-test}/src/test/java/org/fuin/objects4j/springboot/SpringBootAppTest.java (100%) diff --git a/jackson/src/main/java/org/fuin/objects4j/jackson/Objects4JJacksonAdapterModule.java b/jackson/src/main/java/org/fuin/objects4j/jackson/Objects4JJacksonModule.java similarity index 98% rename from jackson/src/main/java/org/fuin/objects4j/jackson/Objects4JJacksonAdapterModule.java rename to jackson/src/main/java/org/fuin/objects4j/jackson/Objects4JJacksonModule.java index 1d24bbc..1593757 100644 --- a/jackson/src/main/java/org/fuin/objects4j/jackson/Objects4JJacksonAdapterModule.java +++ b/jackson/src/main/java/org/fuin/objects4j/jackson/Objects4JJacksonModule.java @@ -23,7 +23,7 @@ /** * Module that registers the adapters for the package. */ -public class Objects4JJacksonAdapterModule extends Module { +public class Objects4JJacksonModule extends Module { @Override public String getModuleName() { diff --git a/jackson/src/main/resources/META-INF/services/com.fasterxml.jackson.databind.Module b/jackson/src/main/resources/META-INF/services/com.fasterxml.jackson.databind.Module index 8f83398..2084454 100644 --- a/jackson/src/main/resources/META-INF/services/com.fasterxml.jackson.databind.Module +++ b/jackson/src/main/resources/META-INF/services/com.fasterxml.jackson.databind.Module @@ -1 +1 @@ -org.fuin.objects4j.jackson.Objects4JJacksonAdapterModule \ No newline at end of file +org.fuin.objects4j.jackson.Objects4JJacksonModule \ No newline at end of file diff --git a/jackson/src/test/java/org/fuin/objects4j/jackson/ImmutableObjectMapperTest.java b/jackson/src/test/java/org/fuin/objects4j/jackson/ImmutableObjectMapperTest.java index e660e63..0555e30 100644 --- a/jackson/src/test/java/org/fuin/objects4j/jackson/ImmutableObjectMapperTest.java +++ b/jackson/src/test/java/org/fuin/objects4j/jackson/ImmutableObjectMapperTest.java @@ -20,7 +20,7 @@ void testProvider() throws IOException { final ImmutableObjectMapper.Builder builder = new ImmutableObjectMapper.Builder(new ObjectMapper()); final ImmutableObjectMapper.Provider provider = new ImmutableObjectMapper.Provider(builder); - builder.registerModule(new Objects4JJacksonAdapterModule()); + builder.registerModule(new Objects4JJacksonModule()); final EmailAddress emailAddress = new EmailAddress("oh-no@mowhere.com"); String str = provider.writer().writeValueAsString(emailAddress); @@ -37,7 +37,7 @@ void testProvider() throws IOException { void testBuilder() throws IOException { final ImmutableObjectMapper.Builder builder = new ImmutableObjectMapper.Builder(new ObjectMapper()); - builder.registerModule(new Objects4JJacksonAdapterModule()); + builder.registerModule(new Objects4JJacksonModule()); final ImmutableObjectMapper mapper = builder.build(); assertThatThrownBy(() -> builder.registerModule(new SimpleModule("Bar"))) diff --git a/jackson/src/test/java/org/fuin/objects4j/jackson/JacksonHelper.java b/jackson/src/test/java/org/fuin/objects4j/jackson/JacksonHelper.java index 5b0ffb3..bc23ccf 100644 --- a/jackson/src/test/java/org/fuin/objects4j/jackson/JacksonHelper.java +++ b/jackson/src/test/java/org/fuin/objects4j/jackson/JacksonHelper.java @@ -40,7 +40,7 @@ private JacksonHelper() { */ public static String toJson(final T obj) { try { - final ObjectMapper mapper = new ObjectMapper().registerModule(new Objects4JJacksonAdapterModule()); + final ObjectMapper mapper = new ObjectMapper().registerModule(new Objects4JJacksonModule()); mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); return mapper.writeValueAsString(obj); } catch (JsonProcessingException e) { @@ -57,7 +57,7 @@ public static String toJson(final T obj) { */ public static T fromJson(final String json, final Class clasz) { try { - final ObjectMapper mapper = new ObjectMapper().registerModule(new Objects4JJacksonAdapterModule()); + final ObjectMapper mapper = new ObjectMapper().registerModule(new Objects4JJacksonModule()); return mapper.readValue(json, clasz); } catch (final JsonProcessingException ex) { throw new RuntimeException(ex); diff --git a/jackson/src/test/java/org/fuin/objects4j/jackson/Objects4JJacksonAdapterModuleTest.java b/jackson/src/test/java/org/fuin/objects4j/jackson/Objects4JJacksonModuleTest.java similarity index 51% rename from jackson/src/test/java/org/fuin/objects4j/jackson/Objects4JJacksonAdapterModuleTest.java rename to jackson/src/test/java/org/fuin/objects4j/jackson/Objects4JJacksonModuleTest.java index 236bbd9..cb9e10a 100644 --- a/jackson/src/test/java/org/fuin/objects4j/jackson/Objects4JJacksonAdapterModuleTest.java +++ b/jackson/src/test/java/org/fuin/objects4j/jackson/Objects4JJacksonModuleTest.java @@ -1,10 +1,10 @@ package org.fuin.objects4j.jackson; /** - * Test for the {@link Objects4JJacksonAdapterModule} class. + * Test for the {@link Objects4JJacksonModule} class. */ @SuppressWarnings("java:S2187") -class Objects4JJacksonAdapterModuleTest { +class Objects4JJacksonModuleTest { // Nothing to test yet diff --git a/pom.xml b/pom.xml index d2c0de7..863cba2 100644 --- a/pom.xml +++ b/pom.xml @@ -397,8 +397,8 @@ jsonb junit jacoco - quarkus - spring-boot + quarkus-test + spring-boot-test diff --git a/quarkus/pom.xml b/quarkus-test/pom.xml similarity index 100% rename from quarkus/pom.xml rename to quarkus-test/pom.xml diff --git a/quarkus/src/main/java/org/fuin/objects4j/quarkus/Data.java b/quarkus-test/src/main/java/org/fuin/objects4j/quarkus/Data.java similarity index 100% rename from quarkus/src/main/java/org/fuin/objects4j/quarkus/Data.java rename to quarkus-test/src/main/java/org/fuin/objects4j/quarkus/Data.java diff --git a/quarkus/src/main/java/org/fuin/objects4j/quarkus/DataResource.java b/quarkus-test/src/main/java/org/fuin/objects4j/quarkus/DataResource.java similarity index 100% rename from quarkus/src/main/java/org/fuin/objects4j/quarkus/DataResource.java rename to quarkus-test/src/main/java/org/fuin/objects4j/quarkus/DataResource.java diff --git a/quarkus/src/main/java/org/fuin/objects4j/quarkus/QuarkusApp.java b/quarkus-test/src/main/java/org/fuin/objects4j/quarkus/QuarkusApp.java similarity index 100% rename from quarkus/src/main/java/org/fuin/objects4j/quarkus/QuarkusApp.java rename to quarkus-test/src/main/java/org/fuin/objects4j/quarkus/QuarkusApp.java diff --git a/quarkus/src/main/resources/application.properties b/quarkus-test/src/main/resources/application.properties similarity index 100% rename from quarkus/src/main/resources/application.properties rename to quarkus-test/src/main/resources/application.properties diff --git a/quarkus/src/test/java/org/fuin/objects4j/quarkus/MariaDbResource.java b/quarkus-test/src/test/java/org/fuin/objects4j/quarkus/MariaDbResource.java similarity index 100% rename from quarkus/src/test/java/org/fuin/objects4j/quarkus/MariaDbResource.java rename to quarkus-test/src/test/java/org/fuin/objects4j/quarkus/MariaDbResource.java diff --git a/quarkus/src/test/java/org/fuin/objects4j/quarkus/QuarkusAppTest.java b/quarkus-test/src/test/java/org/fuin/objects4j/quarkus/QuarkusAppTest.java similarity index 100% rename from quarkus/src/test/java/org/fuin/objects4j/quarkus/QuarkusAppTest.java rename to quarkus-test/src/test/java/org/fuin/objects4j/quarkus/QuarkusAppTest.java diff --git a/spring-boot/pom.xml b/spring-boot-test/pom.xml similarity index 100% rename from spring-boot/pom.xml rename to spring-boot-test/pom.xml diff --git a/spring-boot/src/main/java/org/fuin/objects4j/springboot/Data.java b/spring-boot-test/src/main/java/org/fuin/objects4j/springboot/Data.java similarity index 100% rename from spring-boot/src/main/java/org/fuin/objects4j/springboot/Data.java rename to spring-boot-test/src/main/java/org/fuin/objects4j/springboot/Data.java diff --git a/spring-boot/src/main/java/org/fuin/objects4j/springboot/DataResource.java b/spring-boot-test/src/main/java/org/fuin/objects4j/springboot/DataResource.java similarity index 100% rename from spring-boot/src/main/java/org/fuin/objects4j/springboot/DataResource.java rename to spring-boot-test/src/main/java/org/fuin/objects4j/springboot/DataResource.java diff --git a/spring-boot/src/main/java/org/fuin/objects4j/springboot/SpringBootApp.java b/spring-boot-test/src/main/java/org/fuin/objects4j/springboot/SpringBootApp.java similarity index 100% rename from spring-boot/src/main/java/org/fuin/objects4j/springboot/SpringBootApp.java rename to spring-boot-test/src/main/java/org/fuin/objects4j/springboot/SpringBootApp.java diff --git a/spring-boot/src/main/java/org/fuin/objects4j/springboot/SpringBootConfig.java b/spring-boot-test/src/main/java/org/fuin/objects4j/springboot/SpringBootConfig.java similarity index 80% rename from spring-boot/src/main/java/org/fuin/objects4j/springboot/SpringBootConfig.java rename to spring-boot-test/src/main/java/org/fuin/objects4j/springboot/SpringBootConfig.java index ac70166..21c3fc5 100644 --- a/spring-boot/src/main/java/org/fuin/objects4j/springboot/SpringBootConfig.java +++ b/spring-boot-test/src/main/java/org/fuin/objects4j/springboot/SpringBootConfig.java @@ -2,7 +2,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.databind.ObjectMapper; -import org.fuin.objects4j.jackson.Objects4JJacksonAdapterModule; +import org.fuin.objects4j.jackson.Objects4JJacksonModule; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; @@ -15,7 +15,7 @@ public class SpringBootConfig { public ObjectMapper jsonMapper() { return new ObjectMapper() .setSerializationInclusion(JsonInclude.Include.NON_NULL) - .registerModule(new Objects4JJacksonAdapterModule()); + .registerModule(new Objects4JJacksonModule()); } } diff --git a/spring-boot/src/main/resources/application.properties b/spring-boot-test/src/main/resources/application.properties similarity index 100% rename from spring-boot/src/main/resources/application.properties rename to spring-boot-test/src/main/resources/application.properties diff --git a/spring-boot/src/test/java/org/fuin/objects4j/springboot/SpringBootAppTest.java b/spring-boot-test/src/test/java/org/fuin/objects4j/springboot/SpringBootAppTest.java similarity index 100% rename from spring-boot/src/test/java/org/fuin/objects4j/springboot/SpringBootAppTest.java rename to spring-boot-test/src/test/java/org/fuin/objects4j/springboot/SpringBootAppTest.java From cbfb3b4dfc6f923f5143a24475fa164d35ab2d9a Mon Sep 17 00:00:00 2001 From: Michael Schnell Date: Thu, 1 May 2025 07:05:22 +0200 Subject: [PATCH 09/10] Disable dependabot --- .github/dependabot.yml | 9 --------- 1 file changed, 9 deletions(-) delete mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml deleted file mode 100644 index ecf1325..0000000 --- a/.github/dependabot.yml +++ /dev/null @@ -1,9 +0,0 @@ -version: 2 -updates: -- package-ecosystem: maven - directory: "/" - schedule: - interval: monthly - time: "04:00" - open-pull-requests-limit: 10 - From 40f684903dee73265f41f938cfcb3b0f36fd44e9 Mon Sep 17 00:00:00 2001 From: Michael Schnell Date: Thu, 1 May 2025 18:15:48 +0200 Subject: [PATCH 10/10] Updated utils4j dependency --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 863cba2..cea2d03 100644 --- a/pom.xml +++ b/pom.xml @@ -89,7 +89,7 @@ org.fuin utils4j - 0.14.0 + 0.15.0