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 <[email protected]>
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();

Reply via email to