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 16a6fcb  ISIS-2681: use fully qualified class names in 
DomainObjectList, rather than objectType(s), to ensure proper deserialization
16a6fcb is described below

commit 16a6fcb2a8ac9675da4a6aa3683671ab63852e63
Author: [email protected] <[email protected]@luna>
AuthorDate: Mon May 17 11:33:36 2021 +0200

    ISIS-2681: use fully qualified class names in DomainObjectList, rather
    than objectType(s), to ensure proper deserialization
---
 .../isis/applib/domain/DomainObjectList.java       | 24 ++++++++++------------
 .../core/metamodel/spec/ObjectSpecification.java   |  4 ++++
 .../runtimeservices/jaxb/JaxbServiceDefault.java   |  3 ++-
 ...entNegotiationServiceForRestfulObjectsV1_0.java | 12 +++++------
 4 files changed, 23 insertions(+), 20 deletions(-)

diff --git 
a/api/applib/src/main/java/org/apache/isis/applib/domain/DomainObjectList.java 
b/api/applib/src/main/java/org/apache/isis/applib/domain/DomainObjectList.java
index 10adaed..806c18e 100644
--- 
a/api/applib/src/main/java/org/apache/isis/applib/domain/DomainObjectList.java
+++ 
b/api/applib/src/main/java/org/apache/isis/applib/domain/DomainObjectList.java
@@ -37,6 +37,8 @@ import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.jaxb.PersistentEntitiesAdapter;
 
+import lombok.Getter;
+
 /**
  * The initial idea of {@link DomainObjectList} was to simplify restful 
clients.
  * <p>
@@ -97,13 +99,13 @@ public class DomainObjectList {
     }
     public DomainObjectList(
             final String title,
-            final String elementObjectType,
-            final String actionOwningType,
+            final String elementTypeFqcn,
+            final String actionOwnerFqcn,
             final String actionId,
             final String actionArguments) {
         this.title = title;
-        this.elementObjectType = elementObjectType;
-        this.actionOwningType = actionOwningType;
+        this.elementTypeFqcn = elementTypeFqcn;
+        this.actionOwnerFqcn = actionOwnerFqcn;
         this.actionId = actionId;
         this.actionArguments = actionArguments;
     }
@@ -119,30 +121,26 @@ public class DomainObjectList {
     // -- property: elementObjectType
     public static class ElementObjectTypeDomainEvent extends 
PropertyDomainEvent<String> {  }
 
-    private String elementObjectType;
     @Property(
             domainEvent = ElementObjectTypeDomainEvent.class,
             editing = Editing.DISABLED
             )
-    public String getElementObjectType() {
-        return elementObjectType;
-    }
+    @Getter
+    private String elementTypeFqcn;
 
 
     // -- property: actionOwningType
     public static class ActionOwningTypeDomainEvent extends 
PropertyDomainEvent<String> {  }
 
-    private String actionOwningType;
+
 
     @Property(
             domainEvent = ActionOwningTypeDomainEvent.class,
             optionality = Optionality.OPTIONAL,
             editing = Editing.DISABLED
             )
-    public String getActionOwningType() {
-        return actionOwningType;
-    }
-
+    @Getter
+    private String actionOwnerFqcn;
 
     // -- property: actionId
     public static class ActionIdDomainEvent extends 
PropertyDomainEvent<String> {  }
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
index 037d763..4d54193 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectSpecification.java
@@ -541,4 +541,8 @@ extends
                 || 
Externalizable.class.isAssignableFrom(getCorrespondingClass());
     }
 
+    default String fqcn() {
+        return  getCorrespondingClass().getName();
+    }
+
 }
diff --git 
a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/jaxb/JaxbServiceDefault.java
 
b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/jaxb/JaxbServiceDefault.java
index 5775bff..0596d78 100644
--- 
a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/jaxb/JaxbServiceDefault.java
+++ 
b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/jaxb/JaxbServiceDefault.java
@@ -39,6 +39,7 @@ import org.apache.isis.applib.jaxb.PersistentEntitiesAdapter;
 import org.apache.isis.applib.jaxb.PersistentEntityAdapter;
 import org.apache.isis.applib.services.inject.ServiceInjector;
 import org.apache.isis.applib.services.jaxb.JaxbService.Simple;
+import org.apache.isis.commons.internal.context._Context;
 import org.apache.isis.commons.internal.resources._Xml;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
@@ -66,7 +67,7 @@ public class JaxbServiceDefault extends Simple {
             val domainObjectList = (DomainObjectList) domainObject;
             try {
                 val elementType = specificationLoader
-                        
.specForLogicalTypeName(domainObjectList.getElementObjectType())
+                        
.specForType(_Context.loadClass(domainObjectList.getElementTypeFqcn()))
                         .map(ObjectSpecification::getCorrespondingClass)
                         .orElse(null);
                 if (elementType!=null
diff --git 
a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceForRestfulObjectsV1_0.java
 
b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceForRestfulObjectsV1_0.java
index 35b3790..d838804 100644
--- 
a/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceForRestfulObjectsV1_0.java
+++ 
b/viewers/restfulobjects/rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceForRestfulObjectsV1_0.java
@@ -216,10 +216,10 @@ public class 
ContentNegotiationServiceForRestfulObjectsV1_0 implements ContentNe
 
             if(collectionAdapters != null) {
                 final ObjectSpecification elementSpec = 
elementSpecFrom(objectAndActionInvocation);
-                final String actionOwningType = 
actionOwningTypeFrom(objectAndActionInvocation);
+                final ObjectSpecification actionOwnerSpec = 
actionOwnerSpecFrom(objectAndActionInvocation);
                 final String actionId = 
actionIdFrom(objectAndActionInvocation);
                 final String actionArguments = 
actionArgumentsFrom(objectAndActionInvocation);
-                final DomainObjectList list = 
domainObjectListFrom(collectionAdapters, elementSpec, actionOwningType, 
actionId, actionArguments);
+                final DomainObjectList list = 
domainObjectListFrom(collectionAdapters, elementSpec, actionOwnerSpec, 
actionId, actionArguments);
 
                 adapter = 
ManagedObject.lazy(resourceContext.getSpecificationLoader(), list);
 
@@ -237,8 +237,8 @@ public class ContentNegotiationServiceForRestfulObjectsV1_0 
implements ContentNe
         return responseBuilder(responseBuilder);
     }
 
-    private static String actionOwningTypeFrom(final ObjectAndActionInvocation 
objectAndActionInvocation) {
-        return 
objectAndActionInvocation.getAction().getOnType().getLogicalTypeName();
+    private static ObjectSpecification actionOwnerSpecFrom(final 
ObjectAndActionInvocation objectAndActionInvocation) {
+        return objectAndActionInvocation.getAction().getOnType();
     }
 
     private static String actionIdFrom(final ObjectAndActionInvocation 
objectAndActionInvocation) {
@@ -278,14 +278,14 @@ public class 
ContentNegotiationServiceForRestfulObjectsV1_0 implements ContentNe
     private static DomainObjectList domainObjectListFrom(
             final Collection<ManagedObject> collectionAdapters,
             final ObjectSpecification elementSpec,
-            final String actionOwningType,
+            final ObjectSpecification actionOwnerSpec,
             final String actionId,
             final String actionArguments) {
 
         final String title = titleFrom(collectionAdapters, elementSpec);
 
         final DomainObjectList list = new DomainObjectList(
-                title, elementSpec.getLogicalTypeName(), actionOwningType, 
actionId, actionArguments);
+                title, elementSpec.fqcn(), actionOwnerSpec.fqcn(), actionId, 
actionArguments);
         for (val adapter : collectionAdapters) {
             list.getObjects().add(adapter.getPojo());
         }

Reply via email to