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