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());
}