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/01/28 08:30:13 UTC

[isis] branch master updated: ISIS-2948: respond w/ 404, when logical-type-name to type resolution fails

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 2056e7a  ISIS-2948: respond w/ 404, when logical-type-name to type resolution fails
2056e7a is described below

commit 2056e7ac7920c6758604766feaaf7fdc149c21b2
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Jan 28 09:26:07 2022 +0100

    ISIS-2948: respond w/ 404, when logical-type-name to type resolution
    fails
---
 .../apache/isis/core/metamodel/specloader/SpecificationLoader.java  | 6 ++++++
 .../viewer/resources/DomainTypeResourceServerside.java              | 4 ++++
 2 files changed, 10 insertions(+)

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 a54d242..f8d1321 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
@@ -24,6 +24,7 @@ import java.util.function.Consumer;
 import org.springframework.lang.Nullable;
 
 import org.apache.isis.applib.Identifier;
+import org.apache.isis.applib.annotation.LogicalTypeName;
 import org.apache.isis.applib.id.LogicalType;
 import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.commons.collections.Can;
@@ -147,6 +148,11 @@ public interface SpecificationLoader {
 
     // -- SUPPORT FOR LOOKUP BY LOGICAL TYPE NAME
 
+    /**
+     * The lookup may also fail (result with null), when there is no concrete or abstract resolvable type,
+     * that matches given {@code logicalTypeName}. Eg. when using {@link LogicalTypeName} on an interface,
+     * while overriding with a different logical-type-name on the concrete or abstract type.
+     */
     @Nullable
     default ObjectSpecification loadSpecification(
             final @Nullable String logicalTypeName,
diff --git a/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/DomainTypeResourceServerside.java b/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/DomainTypeResourceServerside.java
index 74c87b7..00dc92c 100644
--- a/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/DomainTypeResourceServerside.java
+++ b/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/DomainTypeResourceServerside.java
@@ -126,6 +126,10 @@ implements DomainTypeResource {
                 RepresentationType.DOMAIN_TYPE, Where.ANYWHERE, RepresentationService.Intent.NOT_APPLICABLE);
 
         val objectSpec = getSpecificationLoader().specForLogicalTypeName(domainType).orElse(null);
+        if(objectSpec==null) {
+            throw _EndpointLogging.error(log, "GET /domain-types/{}", domainType,
+                    RestfulObjectsApplicationException.create(HttpStatusCode.NOT_FOUND));
+        }
 
         val renderer = new DomainTypeReprRenderer(resourceContext, null, JsonRepresentation.newMap());
         renderer.with(objectSpec).includesSelf();