You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2022/08/09 06:56:23 UTC
[isis] branch master updated: ISIS-3115: hotfix for IdStringifierLookupService does not honor IdStringifier precedence
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/master by this push:
new 6697f3f205 ISIS-3115: hotfix for IdStringifierLookupService does not honor IdStringifier precedence
6697f3f205 is described below
commit 6697f3f205b1622dbf0de9d6c843c8e3de67618b
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue Aug 9 08:56:14 2022 +0200
ISIS-3115: hotfix for IdStringifierLookupService does not honor
IdStringifier precedence
---
.../idstringifiers/IdStringifierForSerializable.java | 9 ++-------
.../bookmark/IdStringifierForSerializable_Test.java | 9 ++++-----
.../runtime/idstringifier/IdStringifierLookupService.java | 15 +++++++++++----
3 files changed, 17 insertions(+), 16 deletions(-)
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/idstringifiers/IdStringifierForSerializable.java b/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/idstringifiers/IdStringifierForSerializable.java
index 03224ba2a2..889a5e2f2f 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/idstringifiers/IdStringifierForSerializable.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/idstringifiers/IdStringifierForSerializable.java
@@ -29,7 +29,6 @@ import org.springframework.stereotype.Component;
import org.apache.isis.applib.annotation.PriorityPrecedence;
import org.apache.isis.applib.services.bookmark.IdStringifier;
import org.apache.isis.applib.services.urlencoding.UrlEncodingService;
-import org.apache.isis.commons.internal.base._Casts;
import org.apache.isis.commons.internal.base._Strings;
import org.apache.isis.commons.internal.resources._Serializables;
@@ -65,16 +64,12 @@ public class IdStringifierForSerializable extends IdStringifier.Abstract<Seriali
public Serializable destring(
final @NonNull String stringified,
final @NonNull Class<?> targetEntityClass) {
-
- final Class<? extends Serializable> requiredClass =
- _Casts.uncheckedCast(targetEntityClass);
-
- return destringAs(stringified, requiredClass);
+ return destringAs(stringified, Serializable.class);
}
// -- HELPER
- public <T extends Serializable> T destringAs(
+ private <T extends Serializable> T destringAs(
final @NonNull String stringified,
final @NonNull Class<T> requiredClass) {
return _Strings.isNotEmpty(stringified)
diff --git a/api/applib/src/test/java/org/apache/isis/applib/services/bookmark/IdStringifierForSerializable_Test.java b/api/applib/src/test/java/org/apache/isis/applib/services/bookmark/IdStringifierForSerializable_Test.java
index 9279df0f6c..a802b6fc5f 100644
--- a/api/applib/src/test/java/org/apache/isis/applib/services/bookmark/IdStringifierForSerializable_Test.java
+++ b/api/applib/src/test/java/org/apache/isis/applib/services/bookmark/IdStringifierForSerializable_Test.java
@@ -41,6 +41,9 @@ class IdStringifierForSerializable_Test {
// -- SCENARIO
+ static class Customer {
+ }
+
@Value
static class CustomerPK implements Serializable{
private static final long serialVersionUID = 1L;
@@ -66,14 +69,10 @@ class IdStringifierForSerializable_Test {
@MethodSource()
void roundtrip(final Serializable value) {
- val idClass = value != null
- ? value.getClass()
- : void.class;
-
val stringifier = new IdStringifierForSerializable(codec);
String stringified = stringifier.enstring(value);
- Serializable parse = stringifier.destring(stringified, idClass);
+ Serializable parse = stringifier.destring(stringified, Customer.class);
assertThat(parse).isEqualTo(value);
}
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/idstringifier/IdStringifierLookupService.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/idstringifier/IdStringifierLookupService.java
index 21b36353ea..8fef47c3cf 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/idstringifier/IdStringifierLookupService.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/idstringifier/IdStringifierLookupService.java
@@ -34,10 +34,11 @@ import org.springframework.stereotype.Service;
import org.apache.isis.applib.annotation.PriorityPrecedence;
import org.apache.isis.applib.services.bookmark.IdStringifier;
+import org.apache.isis.applib.services.bookmark.idstringifiers.IdStringifierForSerializable;
+import org.apache.isis.commons.collections.Can;
import org.apache.isis.commons.internal.base._Casts;
import org.apache.isis.core.runtime.IsisModuleCoreRuntime;
-import lombok.RequiredArgsConstructor;
import lombok.val;
/**
@@ -54,13 +55,19 @@ import lombok.val;
@Named(IsisModuleCoreRuntime.NAMESPACE + ".IdStringifierLookupService")
@Priority(PriorityPrecedence.MIDPOINT)
@Qualifier("Default")
-@RequiredArgsConstructor
public class IdStringifierLookupService {
- @Inject
- private final List<IdStringifier<?>> idStringifiers;
+ private final Can<IdStringifier<?>> idStringifiers;
private final Map<Class<?>, IdStringifier<?>> stringifierByClass = new ConcurrentHashMap<>();
+ @Inject
+ public IdStringifierLookupService(final List<IdStringifier<?>> idStringifiers, final IdStringifierForSerializable x) {
+ //FIXME[ISIS-3115] remove this hotfix
+ idStringifiers.removeIf(s->IdStringifierForSerializable.class.equals(s.getClass()));
+ idStringifiers.add(x); // put last
+ this.idStringifiers = Can.ofCollection(idStringifiers);
+ }
+
public <T> IdStringifier<T> lookupElseFail(final Class<T> candidateValueClass) {
val idStringifier = stringifierByClass.computeIfAbsent(candidateValueClass, aClass -> {
for (val candidateStringifier : idStringifiers) {