You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2015/12/23 17:09:52 UTC

[4/5] isis git commit: ISIS-1193: shouldn't return a 404 if void action, instead 200 (per RO spec).

ISIS-1193: shouldn't return a 404 if void action, instead 200 (per RO spec).

The issue was because of the ContentNegotationServiceXRoDomainType expecting there to always be an object from an action invocation, and throwing a 404 otherwise.  Changed around so that this logic only fires if there is a mime type parameter specifying the x-ro-domain-type (ie brought that checking forward).

Also:
- fixed rendering of void action result for the RO Spec v1.0 renderer, to include the "resulttype" json-prop.


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/f3ed6994
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/f3ed6994
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/f3ed6994

Branch: refs/heads/master
Commit: f3ed6994d8239be195954507a4cfe2c4802fca31
Parents: e446af1
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed Dec 23 15:59:55 2015 +0000
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed Dec 23 15:59:55 2015 +0000

----------------------------------------------------------------------
 .../domainobjects/ActionResultReprRenderer.java |  2 +-
 .../RepresentationServiceContentNegotiator.java |  3 +-
 .../ContentNegotiationServiceAbstract.java      |  3 --
 .../ContentNegotiationServiceXRoDomainType.java | 46 +++++++++++++++-----
 .../domainapp/dom/simple/SimpleObjects.java     | 10 ++++-
 5 files changed, 46 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/f3ed6994/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ActionResultReprRenderer.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ActionResultReprRenderer.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ActionResultReprRenderer.java
index 7ebaaec..b357321 100644
--- a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ActionResultReprRenderer.java
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/domainobjects/ActionResultReprRenderer.java
@@ -99,8 +99,8 @@ public class ActionResultReprRenderer extends ReprRendererAbstract<ActionResultR
         final JsonRepresentation result = JsonRepresentation.newMap();
         addResultTo(resultType, result);
 
+        putResultType(representation, resultType);
         if (!resultType.isVoid()) {
-            putResultType(representation, resultType);
             if(returnedAdapter != null) {
                 representation.mapPut("result", result);
             } else {

http://git-wip-us.apache.org/repos/asf/isis/blob/f3ed6994/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/RepresentationServiceContentNegotiator.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/RepresentationServiceContentNegotiator.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/RepresentationServiceContentNegotiator.java
index 65ced88..fc521cd 100644
--- a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/RepresentationServiceContentNegotiator.java
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/RepresentationServiceContentNegotiator.java
@@ -191,9 +191,8 @@ public class RepresentationServiceContentNegotiator implements RepresentationSer
      */
     ResponseBuilder buildResponse(
             final Function<ContentNegotiationService, ResponseBuilder> connegServiceBuildResponse) {
-        ResponseBuilder responseBuilder = null;
         for (final ContentNegotiationService contentNegotiationService : contentNegotiationServices) {
-            responseBuilder = connegServiceBuildResponse.apply(contentNegotiationService);
+            final ResponseBuilder responseBuilder = connegServiceBuildResponse.apply(contentNegotiationService);
             if(responseBuilder != null) {
                 return responseBuilder;
             }

http://git-wip-us.apache.org/repos/asf/isis/blob/f3ed6994/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceAbstract.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceAbstract.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceAbstract.java
index 2b3fe26..d33fbad 100644
--- a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceAbstract.java
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceAbstract.java
@@ -97,9 +97,6 @@ public abstract class ContentNegotiationServiceAbstract implements ContentNegoti
 
     protected Object returnedObjectOf(final ObjectAndActionInvocation objectAndActionInvocation) {
         final ObjectAdapter returnedAdapter = objectAndActionInvocation.getReturnedAdapter();
-        if(returnedAdapter == null) {
-            throw RestfulObjectsApplicationException.create(RestfulResponse.HttpStatusCode.NOT_FOUND);
-        }
         return objectOf(returnedAdapter);
     }
 

http://git-wip-us.apache.org/repos/asf/isis/blob/f3ed6994/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceXRoDomainType.java
----------------------------------------------------------------------
diff --git a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceXRoDomainType.java b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceXRoDomainType.java
index 3b8905d..6905cd7 100644
--- a/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceXRoDomainType.java
+++ b/core/viewer-restfulobjects-rendering/src/main/java/org/apache/isis/viewer/restfulobjects/rendering/service/conneg/ContentNegotiationServiceXRoDomainType.java
@@ -28,6 +28,8 @@ import org.apache.isis.applib.annotation.DomainServiceLayout;
 import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
+import org.apache.isis.viewer.restfulobjects.applib.client.RestfulResponse;
+import org.apache.isis.viewer.restfulobjects.rendering.RestfulObjectsApplicationException;
 import org.apache.isis.viewer.restfulobjects.rendering.domainobjects.ObjectAndActionInvocation;
 import org.apache.isis.viewer.restfulobjects.rendering.service.RepresentationService;
 import org.apache.isis.viewer.restfulobjects.rendering.service.conmap.ContentMappingService;
@@ -65,7 +67,28 @@ public class ContentNegotiationServiceXRoDomainType extends ContentNegotiationSe
             final ObjectAdapter objectAdapter) {
 
         final Object domainObject = objectOf(objectAdapter);
-        return buildResponse(renderContext2, domainObject, RepresentationType.DOMAIN_OBJECT);
+        final RepresentationType representationType = RepresentationType.DOMAIN_OBJECT;
+
+        final MediaType mediaType = mediaTypeFrom(renderContext2, representationType);
+        if (mediaType == null) {
+            return null;
+        }
+
+        return buildResponse(renderContext2, domainObject, representationType);
+    }
+
+    protected MediaType mediaTypeFrom(
+            final RepresentationService.Context2 renderContext2,
+            final RepresentationType representationType) {
+        final List<MediaType> acceptableMediaTypes = renderContext2.getAcceptableMediaTypes();
+        MediaType mediaType =
+                representationType.matchesXmlProfileWithParameter(acceptableMediaTypes, X_RO_DOMAIN_TYPE);
+
+        if (mediaType == null) {
+            mediaType =
+                    representationType.matchesJsonProfileWithParameter(acceptableMediaTypes, X_RO_DOMAIN_TYPE);
+        }
+        return mediaType;
     }
 
     /**
@@ -76,8 +99,18 @@ public class ContentNegotiationServiceXRoDomainType extends ContentNegotiationSe
             final RepresentationService.Context2 renderContext2,
             final ObjectAndActionInvocation objectAndActionInvocation) {
 
+        final RepresentationType representationType = RepresentationType.ACTION_RESULT;
+
+        final MediaType mediaType = mediaTypeFrom(renderContext2, representationType);
+        if (mediaType == null) {
+            return null;
+        }
+
         final Object domainObject = returnedObjectOf(objectAndActionInvocation);
-        return buildResponse(renderContext2, domainObject, RepresentationType.ACTION_RESULT);
+        if(domainObject == null) {
+            throw RestfulObjectsApplicationException.create(RestfulResponse.HttpStatusCode.NOT_FOUND);
+        }
+        return buildResponse(renderContext2, domainObject, representationType);
     }
 
     protected Response.ResponseBuilder buildResponse(
@@ -86,14 +119,8 @@ public class ContentNegotiationServiceXRoDomainType extends ContentNegotiationSe
             final RepresentationType representationType) {
 
         final List<MediaType> acceptableMediaTypes = renderContext2.getAcceptableMediaTypes();
-        MediaType mediaType =
-                representationType.matchesXmlProfileWithParameter(acceptableMediaTypes, X_RO_DOMAIN_TYPE);
-
-        if (mediaType == null) {
-            mediaType =
-                representationType.matchesJsonProfileWithParameter(acceptableMediaTypes, X_RO_DOMAIN_TYPE);
-        }
 
+        final MediaType mediaType = mediaTypeFrom(renderContext2, representationType);
         if (mediaType == null) {
             return null;
         }
@@ -110,7 +137,6 @@ public class ContentNegotiationServiceXRoDomainType extends ContentNegotiationSe
         }
 
         return Response.ok(mappedDomainObject, mediaType);
-
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/isis/blob/f3ed6994/example/application/simpleapp/dom/src/main/java/domainapp/dom/simple/SimpleObjects.java
----------------------------------------------------------------------
diff --git a/example/application/simpleapp/dom/src/main/java/domainapp/dom/simple/SimpleObjects.java b/example/application/simpleapp/dom/src/main/java/domainapp/dom/simple/SimpleObjects.java
index ea629d5..dcbb191 100644
--- a/example/application/simpleapp/dom/src/main/java/domainapp/dom/simple/SimpleObjects.java
+++ b/example/application/simpleapp/dom/src/main/java/domainapp/dom/simple/SimpleObjects.java
@@ -28,14 +28,20 @@ import org.apache.isis.applib.annotation.BookmarkPolicy;
 import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.annotation.DomainServiceLayout;
 import org.apache.isis.applib.annotation.MemberOrder;
+import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.annotation.ParameterLayout;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.query.QueryDefault;
 import org.apache.isis.applib.services.eventbus.ActionDomainEvent;
 import org.apache.isis.applib.services.i18n.TranslatableString;
 
-@DomainService(repositoryFor = SimpleObject.class)
-@DomainServiceLayout(menuOrder = "10")
+@DomainService(
+        nature = NatureOfService.VIEW,
+        repositoryFor = SimpleObject.class
+)
+@DomainServiceLayout(
+        menuOrder = "10"
+)
 public class SimpleObjects {
 
     //region > title