This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch v2
in repository https://gitbox.apache.org/repos/asf/isis.git

commit fd3b782ee09d271bb4c458a28a055ab611e348cd
Author: danhaywood <d...@haywood-associates.co.uk>
AuthorDate: Tue Oct 23 18:47:39 2018 +0100

    ISIS-2019: adds guards for missing facets
    
    if missing TypeOfFacet or CollectionSemantcsFacet when invoking a 
collection mixin
---
 .../apache/isis/core/metamodel/specloader/SpecificationLoader.java | 2 +-
 .../metamodel/specloader/specimpl/OneToManyAssociationDefault.java | 3 ++-
 .../conneg/ContentNegotiationServiceForRestfulObjectsV1_0.java     | 7 ++++++-
 3 files changed, 9 insertions(+), 3 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java
index 3ef0654..878f3eb 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java
@@ -576,7 +576,7 @@ public class SpecificationLoader implements 
ApplicationScopedComponent {
      * </p>
      */
     @Programmatic
-    public Collection<ObjectSpecification> allSpecifications() {
+    public List<ObjectSpecification> allSpecifications() {
         return _Lists.newArrayList(allCachedSpecifications());
     }
 
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationDefault.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationDefault.java
index 90691bb..7acfbd9 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationDefault.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationDefault.java
@@ -68,7 +68,8 @@ public class OneToManyAssociationDefault extends 
ObjectAssociationAbstract imple
 
     @Override
     public CollectionSemantics getCollectionSemantics() {
-        return getFacet(CollectionSemanticsFacet.class).value();
+        final CollectionSemanticsFacet facet = 
getFacet(CollectionSemanticsFacet.class);
+        return facet != null ? facet.value() : 
CollectionSemantics.OTHER_IMPLEMENTATION;
     }
 
 
diff --git 
a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceForRestfulObjectsV1_0.java
 
b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceForRestfulObjectsV1_0.java
index 21ad5a6..ad82bda 100644
--- 
a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceForRestfulObjectsV1_0.java
+++ 
b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceForRestfulObjectsV1_0.java
@@ -38,6 +38,8 @@ import 
org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
 import 
org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
+import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
+import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
 import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
 import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse;
@@ -314,7 +316,7 @@ public class ContentNegotiationServiceForRestfulObjectsV1_0 
implements ContentNe
 
     private ObjectSpecification elementSpecFrom(final 
ObjectAndActionInvocation objectAndActionInvocation) {
         final TypeOfFacet typeOfFacet = 
objectAndActionInvocation.getAction().getFacet(TypeOfFacet.class);
-        return typeOfFacet.valueSpec();
+        return typeOfFacet != null ? typeOfFacet.valueSpec() :  
getSpecificationLoader().loadSpecification(Object.class) ;
     }
 
     private Collection<ObjectAdapter> objectAdaptersFrom(final 
ObjectAndActionInvocation objectAndActionInvocation) {
@@ -411,6 +413,9 @@ public class ContentNegotiationServiceForRestfulObjectsV1_0 
implements ContentNe
         return true;
     }
 
+    private SpecificationLoader getSpecificationLoader() {
+        return IsisContext.getSpecificationLoader();
+    }
 
 
 }

Reply via email to