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 2011/09/09 11:59:56 UTC

svn commit: r1167064 [2/2] - in /incubator/isis/trunk/framework/viewer/json: json-applib/src/main/java/org/apache/isis/viewer/json/applib/ json-applib/src/main/java/org/apache/isis/viewer/json/applib/blocks/ json-applib/src/main/java/org/apache/isis/vi...

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/LinkBuilder.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/LinkBuilder.java?rev=1167064&r1=1167063&r2=1167064&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/LinkBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/LinkBuilder.java Fri Sep  9 09:59:37 2011
@@ -50,11 +50,11 @@ public class LinkBuilder extends Represe
         return this;
     }
     public JsonRepresentation build() {
-        representation.put("rel", rel);
-        representation.put("href", resourceContext.urlFor(href));
-        representation.put("method", method);
-        representation.put("title", title);
-        representation.put("arguments", arguments);
+        representation.mapPut("rel", rel);
+        representation.mapPut("href", resourceContext.urlFor(href));
+        representation.mapPut("method", method);
+        representation.mapPut("title", title);
+        representation.mapPut("arguments", arguments);
         return representation;
     }
 

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/RepresentationBuilder.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/RepresentationBuilder.java?rev=1167064&r1=1167063&r2=1167064&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/RepresentationBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/RepresentationBuilder.java Fri Sep  9 09:59:37 2011
@@ -36,7 +36,7 @@ public abstract class RepresentationBuil
 
 
     public T withSelf(String href) {
-        representation.put("self", LinkBuilder.newBuilder(resourceContext, "self", href).build());
+        representation.mapPut("self", LinkBuilder.newBuilder(resourceContext, "self", href).build());
         return cast(this);
     }
 
@@ -48,7 +48,7 @@ public abstract class RepresentationBuil
         if(!links.isArray()) {
             throw new IllegalArgumentException("links must be a list");
         }
-        representation.put("links", links);
+        representation.mapPut("links", links);
         return cast(this);
     }
 
@@ -60,7 +60,7 @@ public abstract class RepresentationBuil
         if(!extensions.isMap()) {
             throw new IllegalArgumentException("extensions must be a map");
         }
-        representation.put("extensions", extensions);
+        representation.mapPut("extensions", extensions);
         return cast(this);
     }
 

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/RepresentationType.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/RepresentationType.java?rev=1167064&r1=1167063&r2=1167064&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/RepresentationType.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/RepresentationType.java Fri Sep  9 09:59:37 2011
@@ -1,5 +1,7 @@
 package org.apache.isis.viewer.json.viewer.resources;
 
+import org.apache.isis.viewer.json.applib.util.Enums;
+
 public enum RepresentationType {
 
     HOME_PAGE,
@@ -17,17 +19,7 @@ public enum RepresentationType {
     DOMAIN_ACTION_PARAMETER;
     
     public String getName() {
-        StringBuilder builder = new StringBuilder();
-        boolean nextUpper = false;
-        for(char c: name().toCharArray()) {
-            if(c == '_') {
-                nextUpper = true;
-            } else {
-                builder.append(nextUpper?c:Character.toLowerCase(c));
-                nextUpper = false;
-            }
-        }
-        return builder.toString();
+        return Enums.enumToCamelCase(this);
     }
 
 }

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/ResourceAbstract.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/ResourceAbstract.java?rev=1167064&r1=1167063&r2=1167064&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/ResourceAbstract.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/ResourceAbstract.java Fri Sep  9 09:59:37 2011
@@ -53,6 +53,7 @@ import org.apache.isis.viewer.json.appli
 import org.apache.isis.viewer.json.applib.JsonRepresentation;
 import org.apache.isis.viewer.json.applib.RestfulResponse;
 import org.apache.isis.viewer.json.applib.util.JsonMapper;
+import org.apache.isis.viewer.json.viewer.JsonApplicationException;
 import org.apache.isis.viewer.json.viewer.ResourceContext;
 import org.apache.isis.viewer.json.viewer.representations.RepresentationBuilder;
 import org.apache.isis.viewer.json.viewer.resources.domainobjects.DomainObjectRepBuilder;
@@ -110,6 +111,12 @@ public abstract class ResourceAbstract {
     protected void init() {
         this.resourceContext =
             new ResourceContext(httpHeaders, uriInfo, request, httpServletRequest, httpServletResponse, securityContext);
+        
+        List<MediaType> mediaTypes = getResourceContext().getHttpHeaders().getAcceptableMediaTypes();
+        if(!mediaTypes.contains(MediaType.APPLICATION_JSON_TYPE)) {
+            throw JsonApplicationException.create(HttpStatusCode.NOT_ACCEPTABLE); 
+        }
+
     }
 
     protected ResourceContext getResourceContext() {
@@ -268,69 +275,8 @@ public abstract class ResourceAbstract {
         return Response.status(httpStatusCode.getJaxrsStatusType()).header(RestfulResponse.Header.WARNING.getName(), String.format(reason, args)).build();
     }
 
-    protected static Response responseOf(HttpStatusCode httpStatusCode, final Exception ex) {
-        ResponseBuilder builder = Response.status(httpStatusCode.getJaxrsStatusType()).header(RestfulResponse.Header.WARNING.getName(), ex.getMessage());
-        return withStackTrace(builder, ex).build();
-    }
-
-    protected static Response responseOf(HttpStatusCode httpStatusCode, final String reason, Exception ex, final Object... args) {
-        ResponseBuilder builder = Response.status(Status.BAD_REQUEST).header(RestfulResponse.Header.WARNING.getName(), String.format(reason, args));
-        return withStackTrace(builder,ex).build();
-    }
-
     
-    private static ResponseBuilder withStackTrace(ResponseBuilder builder, final Exception ex) {
-        return builder.type(MediaType.APPLICATION_JSON_TYPE).entity(jsonFor(ex));
-    }
-
-
-    static class ExceptionPojo {
-
-        public static ExceptionPojo create(Exception ex) {
-            return new ExceptionPojo(ex);
-        }
-
-        private static String format(StackTraceElement stackTraceElement) {
-            return stackTraceElement.toString();
-        }
 
-        private final String message;
-        private final List<String> stackTrace = Lists.newArrayList();
-        private ExceptionPojo causedBy;
-
-        public ExceptionPojo(Throwable ex) {
-            this.message = ex.getMessage();
-            StackTraceElement[] stackTraceElements = ex.getStackTrace();
-            for (StackTraceElement stackTraceElement : stackTraceElements) {
-                this.stackTrace.add(format(stackTraceElement));
-            }
-            Throwable cause = ex.getCause();
-            if(cause != null && cause != ex) {
-                this.causedBy = new ExceptionPojo(cause);
-            }
-        }
-        
-        public String getMessage() {
-            return message;
-        }
-        
-        public List<String> getStackTrace() {
-            return stackTrace;
-        }
-        
-        public ExceptionPojo getCausedBy() {
-            return causedBy;
-        }
-
-    }
-    static String jsonFor(Exception ex) {
-        try {
-            return JsonMapper.instance().write(ExceptionPojo.create(ex));
-        } catch (Exception e) {
-            // fallback
-            return "{ \"exception\": \"" + ExceptionUtils.getFullStackTrace(ex) + "\" }";
-        }
-    }
 
     // //////////////////////////////////////////////////////////////
     // Dependencies (from singletons)

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/capabilities/CapabilitiesResourceServerside.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/capabilities/CapabilitiesResourceServerside.java?rev=1167064&r1=1167063&r2=1167064&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/capabilities/CapabilitiesResourceServerside.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/capabilities/CapabilitiesResourceServerside.java Fri Sep  9 09:59:37 2011
@@ -43,24 +43,24 @@ public class CapabilitiesResourceServers
         init();
 
         JsonRepresentation representation = JsonRepresentation.newMap();
-        representation.put("self", LinkBuilder.newBuilder(getResourceContext(), "self", "capabilities/").build());
+        representation.mapPut("self", LinkBuilder.newBuilder(getResourceContext(), "self", "capabilities/").build());
         
         JsonRepresentation capabilities = JsonRepresentation.newMap();
-        representation.put("capabilities", capabilities);
+        representation.mapPut("capabilities", capabilities);
 
-        capabilities.put("concurrencyChecking", "no");
-        capabilities.put("transientObjects", "no");
-        capabilities.put("deleteObjects", "no");
-        capabilities.put("simpleArguments", "no");
-        capabilities.put("partialArguments", "no");
-        capabilities.put("followLinks", "no");
-        capabilities.put("validateOnly", "no");
-        capabilities.put("pagination", "no");
-        capabilities.put("sorting", "no");
-        capabilities.put("domainModel", "rich");
+        capabilities.mapPut("concurrencyChecking", "no");
+        capabilities.mapPut("transientObjects", "no");
+        capabilities.mapPut("deleteObjects", "no");
+        capabilities.mapPut("simpleArguments", "no");
+        capabilities.mapPut("partialArguments", "no");
+        capabilities.mapPut("followLinks", "no");
+        capabilities.mapPut("validateOnly", "no");
+        capabilities.mapPut("pagination", "no");
+        capabilities.mapPut("sorting", "no");
+        capabilities.mapPut("domainModel", "rich");
 
-        representation.put("links", JsonRepresentation.newArray());
-        representation.put("extensions", JsonRepresentation.newMap());
+        representation.mapPut("links", JsonRepresentation.newArray());
+        representation.mapPut("extensions", JsonRepresentation.newMap());
         
         return responseOfOk(jsonFor(representation));
     }

Copied: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/AbstractObjectMemberRepBuilder.java (from r1166100, incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/AbstractMemberRepBuilder.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/AbstractObjectMemberRepBuilder.java?p2=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/AbstractObjectMemberRepBuilder.java&p1=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/AbstractMemberRepBuilder.java&r1=1166100&r2=1167064&rev=1167064&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/AbstractMemberRepBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/AbstractObjectMemberRepBuilder.java Fri Sep  9 09:59:37 2011
@@ -29,13 +29,13 @@ import org.apache.isis.viewer.json.viewe
 import org.apache.isis.viewer.json.viewer.representations.LinkBuilder;
 import org.apache.isis.viewer.json.viewer.representations.RepresentationBuilder;
 
-public abstract class AbstractMemberRepBuilder<R extends RepresentationBuilder<R>, T extends ObjectMember> extends RepresentationBuilder<R> {
+public abstract class AbstractObjectMemberRepBuilder<R extends RepresentationBuilder<R>, T extends ObjectMember> extends RepresentationBuilder<R> {
 
     protected final ObjectAdapter objectAdapter;
     protected final MemberType memberType;
     protected final T objectMember;
 
-    public AbstractMemberRepBuilder(ResourceContext resourceContext, ObjectAdapter objectAdapter, MemberType memberType, T objectMember) {
+    public AbstractObjectMemberRepBuilder(ResourceContext resourceContext, ObjectAdapter objectAdapter, MemberType memberType, T objectMember) {
         super(resourceContext);
         this.objectAdapter = objectAdapter;
         this.memberType = memberType;
@@ -43,19 +43,19 @@ public abstract class AbstractMemberRepB
     }
 
     public R withSelf() {
-        String url = AbstractMemberRepBuilder.urlForMember(objectAdapter, memberType, objectMember, getOidStringifier());
+        String url = AbstractObjectMemberRepBuilder.urlForMember(objectAdapter, memberType, objectMember, getOidStringifier());
         JsonRepresentation self = LinkBuilder.newBuilder(resourceContext, "self", url).build();
-        representation.put("self", self);
+        representation.mapPut("self", self);
         
         return cast(this);
     }
 
     protected void putMemberType() {
-        representation.put("memberType", memberType.name().toLowerCase());
+        representation.mapPut("memberType", memberType.getName());
     }
 
     protected void putId() {
-        representation.put(memberType.key(), objectMember.getId());
+        representation.mapPut(memberType.getJsProp(), objectMember.getId());
     }
 
     public R withMutatorsIfEnabled() {
@@ -73,7 +73,7 @@ public abstract class AbstractMemberRepB
                         .withHttpMethod(mutatorSpec.httpMethod)
                         .withArguments(arguments)
                         .build();
-                representation.put(mutator, detailsLink);
+                representation.mapPut(mutator, detailsLink);
             }
         }
         return cast(this);
@@ -96,7 +96,7 @@ public abstract class AbstractMemberRepB
 
     
     protected R withValue() {
-        representation.put("value", valueRep());
+        representation.mapPut("value", valueRep());
         return cast(this);
     }
 
@@ -109,13 +109,13 @@ public abstract class AbstractMemberRepB
 
     protected final void putDisabledReasonIfDisabled() {
         String disabledReasonRep = usability().getReason();
-        representation.put("disabledReason", disabledReasonRep);
+        representation.mapPut("disabledReason", disabledReasonRep);
     }
 
-    public R withDetails() {
+    public R withDetailsLink() {
         String urlForMember = urlForMember();
-        JsonRepresentation detailsLink = LinkBuilder.newBuilder(resourceContext, memberType.name().toLowerCase(), urlForMember).build();
-        representation.put(memberType.getDetailsRel(), detailsLink);
+        JsonRepresentation detailsLink = LinkBuilder.newBuilder(resourceContext, memberType.getDetailsRel(), urlForMember).build();
+        representation.mapPut(memberType.getDetailsRel(), detailsLink);
         
         return cast(this);
     }

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectListRepBuilder.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectListRepBuilder.java?rev=1167064&r1=1167063&r2=1167064&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectListRepBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectListRepBuilder.java Fri Sep  9 09:59:37 2011
@@ -37,9 +37,9 @@ public class DomainObjectListRepBuilder 
         JsonRepresentation list = JsonRepresentation.newArray();
         for(ObjectAdapter adapter: objectAdapters) {
             JsonRepresentation linkToObject = linkTo(adapter);
-            list.add(linkToObject);
+            list.arrayAdd(linkToObject);
         }
-        representation.put("values", list);
+        representation.mapPut("values", list);
         return this;
     }
 

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectRepBuilder.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectRepBuilder.java?rev=1167064&r1=1167063&r2=1167064&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectRepBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectRepBuilder.java Fri Sep  9 09:59:37 2011
@@ -58,11 +58,11 @@ public class DomainObjectRepBuilder exte
 
     public DomainObjectRepBuilder withAdapter(ObjectAdapter objectAdapter) {
         JsonRepresentation self = linkTo(objectAdapter);
-        representation.put("self", self);
+        representation.mapPut("self", self);
 
         String title = objectAdapter.titleString();
-        representation.put("oid", OidUtils.getOidStr(objectAdapter, getOidStringifier()));
-        representation.put("title", title);
+        representation.mapPut("oid", OidUtils.getOidStr(objectAdapter, getOidStringifier()));
+        representation.mapPut("title", title);
         withMembers(objectAdapter);
         return this;
     }
@@ -74,7 +74,7 @@ public class DomainObjectRepBuilder exte
         
         List<ObjectAction> actions = objectAdapter.getSpecification().getObjectActions(Contributed.INCLUDED);
         addActions(objectAdapter, actions, members);
-        representation.put("members", members);
+        representation.mapPut("members", members);
         return this;
     }
 
@@ -86,13 +86,19 @@ public class DomainObjectRepBuilder exte
             } 
             if(assoc instanceof OneToOneAssociation) {
                 OneToOneAssociation property = (OneToOneAssociation)assoc;
-                JsonRepresentation propertyRep = PropertyRepBuilder.newBuilder(resourceContext, objectAdapter, property).build();
-                members.add(propertyRep);
+                JsonRepresentation propertyRep = 
+                        ObjectPropertyRepBuilder.newBuilder(resourceContext, objectAdapter, property)
+                        .withDetailsLink()
+                        .build();
+                members.arrayAdd(propertyRep);
             }
             if(assoc instanceof OneToManyAssociation) {
                 OneToManyAssociation collection = (OneToManyAssociation) assoc;
-                JsonRepresentation collectionRep = CollectionRepBuilder.newBuilder(resourceContext, objectAdapter, collection).build();
-                members.add(collectionRep);
+                JsonRepresentation collectionRep = 
+                        ObjectCollectionRepBuilder.newBuilder(resourceContext, objectAdapter, collection)
+                        .withDetailsLink()
+                        .build();
+                members.arrayAdd(collectionRep);
             }
         }
     }
@@ -109,8 +115,11 @@ public class DomainObjectRepBuilder exte
         		List<ObjectAction> subactions = objectActionSet.getActions();
         		addActions(objectAdapter, subactions, members);
         	} else {
-                JsonRepresentation actionRep = ActionRepBuilder.newBuilder(resourceContext, objectAdapter, action).build();
-                members.add(actionRep);
+                JsonRepresentation actionRep = 
+                        ObjectActionRepBuilder.newBuilder(resourceContext, objectAdapter, action)
+                        .withDetailsLink()
+                        .build();
+                members.arrayAdd(actionRep);
         	}
         }
 	}
@@ -166,4 +175,5 @@ public class DomainObjectRepBuilder exte
 	}
 
 
+
 }
\ No newline at end of file

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectResourceServerside.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectResourceServerside.java?rev=1167064&r1=1167063&r2=1167064&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectResourceServerside.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectResourceServerside.java Fri Sep  9 09:59:37 2011
@@ -109,7 +109,7 @@ public class DomainObjectResourceServers
         final OneToOneAssociation property = getPropertyThatIsVisibleAndUsable(
                 objectAdapter, propertyId, Intent.ACCESS);
 
-        final PropertyRepBuilder builder = PropertyRepBuilder.newBuilder(
+        final ObjectPropertyRepBuilder builder = ObjectPropertyRepBuilder.newBuilder(
                 getResourceContext(), objectAdapter, property);
         return responseOfOk(jsonFrom(builder));
     }
@@ -176,7 +176,7 @@ public class DomainObjectResourceServers
         final OneToManyAssociation collection = getCollectionThatIsVisibleAndUsable(
                 objectAdapter, collectionId, Intent.ACCESS);
 
-        final CollectionRepBuilder builder = CollectionRepBuilder.newBuilder(
+        final ObjectCollectionRepBuilder builder = ObjectCollectionRepBuilder.newBuilder(
                 getResourceContext(), objectAdapter, collection);
         return responseOfOk(jsonFrom(builder));
     }
@@ -282,7 +282,7 @@ public class DomainObjectResourceServers
         final ObjectAction action = getObjectActionThatIsVisibleAndUsable(
                 objectAdapter, actionId, Intent.ACCESS);
 
-        ActionRepBuilder builder = ActionRepBuilder.newBuilder(
+        ObjectActionRepBuilder builder = ObjectActionRepBuilder.newBuilder(
                 getResourceContext(), objectAdapter, action);
         return responseOfOk(jsonFrom(builder));
     }
@@ -565,11 +565,11 @@ public class DomainObjectResourceServers
         ObjectAssociation association = objectAdapter.getSpecification()
                 .getAssociation(propertyId);
         if (association == null || !association.isOneToOneAssociation()) {
-            throwNotFoundException(propertyId, MemberType.PROPERTY);
+            throwNotFoundException(propertyId, MemberType.OBJECT_PROPERTY);
         }
         OneToOneAssociation property = (OneToOneAssociation) association;
         return ensureVisibleAndUsableForIntent(objectAdapter, property,
-                MemberType.PROPERTY, intent);
+                MemberType.OBJECT_PROPERTY, intent);
     }
 
     private OneToManyAssociation getCollectionThatIsVisibleAndUsable(
@@ -580,11 +580,11 @@ public class DomainObjectResourceServers
         ObjectAssociation association = objectAdapter.getSpecification()
                 .getAssociation(collectionId);
         if (association == null || !association.isOneToManyAssociation()) {
-            throwNotFoundException(collectionId, MemberType.COLLECTION);
+            throwNotFoundException(collectionId, MemberType.OBJECT_COLLECTION);
         }
         OneToManyAssociation collection = (OneToManyAssociation) association;
         return ensureVisibleAndUsableForIntent(objectAdapter, collection,
-                MemberType.COLLECTION, intent);
+                MemberType.OBJECT_COLLECTION, intent);
     }
 
     private ObjectAction getObjectActionThatIsVisibleAndUsable(
@@ -593,7 +593,7 @@ public class DomainObjectResourceServers
         Intent intent) {
         
         ObjectAction action = objectAdapter.getSpecification().getObjectAction(actionId);
-        return ensureVisibleAndUsableForIntent(objectAdapter, action, MemberType.ACTION, intent);
+        return ensureVisibleAndUsableForIntent(objectAdapter, action, MemberType.OBJECT_ACTION, intent);
     }
 
     public <T extends ObjectMember> T ensureVisibleAndUsableForIntent(

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MemberSelfRepBuilder.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MemberSelfRepBuilder.java?rev=1167064&r1=1167063&r2=1167064&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MemberSelfRepBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MemberSelfRepBuilder.java Fri Sep  9 09:59:37 2011
@@ -41,13 +41,13 @@ public class MemberSelfRepBuilder extend
     }
     
     public JsonRepresentation build() {
-        representation.put("link", memberLinkRep());
-        representation.put("object", domainObjectLinkRep());
+        representation.mapPut("link", memberLinkRep());
+        representation.mapPut("object", domainObjectLinkRep());
         return representation;
     }
 
     private JsonRepresentation memberLinkRep() {
-        String url = AbstractMemberRepBuilder.urlForMember(objectAdapter, memberType, objectMember, getOidStringifier());
+        String url = AbstractObjectMemberRepBuilder.urlForMember(objectAdapter, memberType, objectMember, getOidStringifier());
         return LinkBuilder.newBuilder(resourceContext, "member", url).build();
     }
     

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MemberType.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MemberType.java?rev=1167064&r1=1167063&r2=1167064&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MemberType.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/MemberType.java Fri Sep  9 09:59:37 2011
@@ -30,13 +30,14 @@ import org.apache.isis.core.progmodel.fa
 import org.apache.isis.core.progmodel.facets.collections.validate.CollectionValidateAddToFacet;
 import org.apache.isis.core.progmodel.facets.collections.validate.CollectionValidateRemoveFromFacet;
 import org.apache.isis.core.progmodel.facets.properties.validate.PropertyValidateFacet;
+import org.apache.isis.viewer.json.applib.util.Enums;
 import org.apache.isis.viewer.json.viewer.representations.HttpMethod;
 
 import com.google.common.collect.ImmutableMap;
 
 public enum MemberType {
 
-    PROPERTY("properties/", "propertyDetails", ImmutableMap.of(
+    OBJECT_PROPERTY("properties/", "propertyId", "propertyDetails", ImmutableMap.of(
             "modify", MutatorSpec.of(PropertyValidateFacet.class, PropertySetterFacet.class, HttpMethod.PUT, BodyArgs.ONE),
             "clear", MutatorSpec.of(PropertyValidateFacet.class, PropertyClearFacet.class, HttpMethod.DELETE, BodyArgs.NONE)
             )) {
@@ -45,7 +46,7 @@ public enum MemberType {
             return objectMember.getSpecification();
         }
     },
-    COLLECTION("collections/", "collectionDetails", ImmutableMap.of(
+    OBJECT_COLLECTION("collections/", "collectionId", "collectionDetails", ImmutableMap.of(
             "addTo", MutatorSpec.of(CollectionValidateAddToFacet.class, CollectionAddToFacet.class, HttpMethod.PUT, BodyArgs.ONE),
             "removeFrom", MutatorSpec.of(CollectionValidateRemoveFromFacet.class, CollectionRemoveFromFacet.class, HttpMethod.DELETE, BodyArgs.ONE)
             )) {
@@ -54,7 +55,7 @@ public enum MemberType {
             return objectMember.getSpecification();
         }
     },
-    ACTION("actions/", "actionDetails", ImmutableMap.of(
+    OBJECT_ACTION("actions/", "actionId", "actionDetails", ImmutableMap.of(
             "invoke", MutatorSpec.of(ActionValidationFacet.class, ActionInvocationFacet.class, HttpMethod.POST, BodyArgs.MANY, "invoke")
             )) {
         @Override
@@ -68,15 +69,19 @@ public enum MemberType {
     
     private final String urlPart;
     private final String detailsRel;
+    private final String name;
+    private final String jsProp;
     
-    private MemberType(String urlPart, String detailsRel, Map<String, MutatorSpec> mutators) {
+    private MemberType(String urlPart, String jsProp, String detailsRel, Map<String, MutatorSpec> mutators) {
         this.urlPart = urlPart;
+        this.jsProp = jsProp;
         this.detailsRel = detailsRel;
         this.mutators = mutators;
+        name = Enums.enumToCamelCase(this);
     }
 
-    public String key() {
-        return name().toLowerCase() + "Id";
+    public String getJsProp() {
+        return jsProp;
     }
 
     public String urlPart() {
@@ -90,31 +95,40 @@ public enum MemberType {
     public abstract ObjectSpecification specFor(ObjectMember objectMember);
 
     public boolean isProperty() {
-        return this == MemberType.PROPERTY;
+        return this == MemberType.OBJECT_PROPERTY;
     }
 
     public boolean isCollection() {
-        return this == MemberType.COLLECTION;
+        return this == MemberType.OBJECT_COLLECTION;
     }
 
     public boolean isAction() {
-        return this == MemberType.ACTION;
+        return this == MemberType.OBJECT_ACTION;
     }
 
-    public static MemberType lookup(final String memberType) {
-    	return valueOf(memberType.toUpperCase());
+    public static MemberType lookup(final String memberTypeName) {
+        for (MemberType memberType : values()) {
+            if(memberType.getName().equals(memberTypeName)) {
+                return memberType;
+            }
+        }
+    	return null;
     }
 
 	public static MemberType of(ObjectMember objectMember) {
 		return objectMember.isAction()?
-				ACTION:
+				OBJECT_ACTION:
 					objectMember.isOneToOneAssociation()?
-						PROPERTY:
-						COLLECTION;
+						OBJECT_PROPERTY:
+						OBJECT_COLLECTION;
 	}
 
     public String getDetailsRel() {
         return detailsRel;
     }
 
+    public String getName() {
+        return name;
+    }
+
 }

Copied: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectActionRepBuilder.java (from r1166100, incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ActionRepBuilder.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectActionRepBuilder.java?p2=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectActionRepBuilder.java&p1=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ActionRepBuilder.java&r1=1166100&r2=1167064&rev=1167064&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ActionRepBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectActionRepBuilder.java Fri Sep  9 09:59:37 2011
@@ -24,48 +24,54 @@ import org.apache.isis.core.metamodel.sp
 import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
 import org.apache.isis.viewer.json.applib.JsonRepresentation;
 import org.apache.isis.viewer.json.viewer.ResourceContext;
+import org.apache.isis.viewer.json.viewer.resources.domaintypes.DomainTypeRepBuilder;
+import org.apache.isis.viewer.json.viewer.resources.domaintypes.TypeActionRepBuilder;
 
 import com.google.common.collect.Lists;
 
-public class ActionRepBuilder extends AbstractMemberRepBuilder<ActionRepBuilder, ObjectAction> {
+public class ObjectActionRepBuilder extends AbstractObjectMemberRepBuilder<ObjectActionRepBuilder, ObjectAction> {
 
-	public static ActionRepBuilder newBuilder(ResourceContext resourceContext, ObjectAdapter objectAdapter, ObjectAction objectAction) {
-        return new ActionRepBuilder(resourceContext, objectAdapter, objectAction);
+	public static ObjectActionRepBuilder newBuilder(ResourceContext resourceContext, ObjectAdapter objectAdapter, ObjectAction objectAction) {
+        return new ObjectActionRepBuilder(resourceContext, objectAdapter, objectAction);
     }
 
-    protected ActionRepBuilder(ResourceContext resourceContext, ObjectAdapter objectAdapter, ObjectAction objectAction) {
-        super(resourceContext, objectAdapter, MemberType.ACTION, objectAction);
+    protected ObjectActionRepBuilder(ResourceContext resourceContext, ObjectAdapter objectAdapter, ObjectAction objectAction) {
+        super(resourceContext, objectAdapter, MemberType.OBJECT_ACTION, objectAction);
         
         putId();
         putMemberType();
-        putNumParameters();
 
         putDisabledReasonIfDisabled();
         withMutatorsIfEnabled();
         
-        putExtensionsForAction();
-        putLinksForAction(resourceContext);
-    }
-
-    private void putLinksForAction(ResourceContext resourceContext) {
+        JsonRepresentation extensions = JsonRepresentation.newMap();
+        putExtensionsIsisProprietary(extensions);
+        
         JsonRepresentation links = JsonRepresentation.newArray();
-        if(objectMember.isContributed()) {
-            ObjectAdapter serviceAdapter = contributingServiceAdapter();
-            JsonRepresentation contributedByLink = DomainObjectRepBuilder.newLinkToBuilder(resourceContext, "object", serviceAdapter, getOidStringifier()).build();
-            links.put("contributedBy", contributedByLink);
-        }
-
-        withLinks(links);
+        addLinksFormalDomainModel(links, resourceContext);
+        addLinksIsisProprietary(links, resourceContext);
     }
 
-    private void putExtensionsForAction() {
-        JsonRepresentation extensions = JsonRepresentation.newMap();
-        extensions.put("actionType", objectMember.getType());
+
+     private void putExtensionsIsisProprietary(JsonRepresentation extensions) {
+        extensions.mapPut("actionType", objectMember.getType());
         withExtensions(extensions );
     }
 
-    protected void putNumParameters() {
-        representation.put("numParameters", objectMember.getParameterCount());
+     private void addLinksFormalDomainModel(JsonRepresentation links, ResourceContext resourceContext) {
+         links.arrayAdd(TypeActionRepBuilder.newLinkToBuilder(resourceContext, "typeAction", objectAdapter.getSpecification(), objectMember).build());
+     }
+
+     private void addLinksIsisProprietary(JsonRepresentation links, ResourceContext resourceContext) {
+       if(objectMember.isContributed()) {
+            ObjectAdapter serviceAdapter = contributingServiceAdapter();
+            JsonRepresentation contributedByLink = DomainObjectRepBuilder.newLinkToBuilder(resourceContext, "contributedBy", serviceAdapter, getOidStringifier()).build();
+            links.arrayAdd(contributedByLink);
+        }
+
+       links.arrayAdd(DomainTypeRepBuilder.newLinkToBuilder(resourceContext, "domainType", objectAdapter.getSpecification()).build());
+       
+        withLinks(links);
     }
 
     public JsonRepresentation build() {
@@ -84,28 +90,28 @@ public class ActionRepBuilder extends Ab
     	throw new IllegalStateException("Unable to locate contributing service");
 	}
 
-    public ActionRepBuilder withParameterDetails() {
+    public ObjectActionRepBuilder withParameterDetails() {
     	List<Object> parameters = Lists.newArrayList();
 		for (int i=0; i< objectMember.getParameterCount(); i++) {
 			ObjectActionParameter param = objectMember.getParameters().get(i);
 			parameters.add(paramDetails(param));
 		}
-		representation.put("parameters", parameters);
+		representation.mapPut("parameters", parameters);
 		return this;
 	}
 
 	private Object paramDetails(ObjectActionParameter param) {
 		final JsonRepresentation paramRep = JsonRepresentation.newMap();
-		paramRep.put("name", param.getName());
-		paramRep.put("num", param.getNumber());
-		paramRep.put("description", param.getDescription());
+		paramRep.mapPut("name", param.getName());
+		paramRep.mapPut("num", param.getNumber());
+		paramRep.mapPut("description", param.getDescription());
 		Object paramChoices = choicesFor(param);
 		if(paramChoices != null) {
-			paramRep.put("choices", paramChoices);
+			paramRep.mapPut("choices", paramChoices);
 		}
 		Object paramDefault = defaultFor(param);
 		if(paramDefault != null) {
-			paramRep.put("default", paramDefault);
+			paramRep.mapPut("default", paramDefault);
 		}
 		return paramRep;
 	}
@@ -136,7 +142,7 @@ public class ActionRepBuilder extends Ab
 	protected JsonRepresentation appendMutatorArgs(MutatorSpec mutatorSpec) {
 	    JsonRepresentation argList = JsonRepresentation.newArray();
         for(int i=0; i<objectMember.getParameterCount(); i++) {
-            argList.add(argValueFor(i)); 
+            argList.arrayAdd(argValueFor(i)); 
         }
         return argList;
     }

Copied: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectCollectionRepBuilder.java (from r1166100, incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/CollectionRepBuilder.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectCollectionRepBuilder.java?p2=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectCollectionRepBuilder.java&p1=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/CollectionRepBuilder.java&r1=1166100&r2=1167064&rev=1167064&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/CollectionRepBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectCollectionRepBuilder.java Fri Sep  9 09:59:37 2011
@@ -28,14 +28,14 @@ import org.apache.isis.viewer.json.viewe
 
 import com.google.common.collect.Lists;
 
-public class CollectionRepBuilder extends AbstractMemberRepBuilder<CollectionRepBuilder, OneToManyAssociation> {
+public class ObjectCollectionRepBuilder extends AbstractObjectMemberRepBuilder<ObjectCollectionRepBuilder, OneToManyAssociation> {
 
-    public static CollectionRepBuilder newBuilder(ResourceContext resourceContext, ObjectAdapter objectAdapter, OneToManyAssociation otma) {
-        return new CollectionRepBuilder(resourceContext, objectAdapter, otma);
+    public static ObjectCollectionRepBuilder newBuilder(ResourceContext resourceContext, ObjectAdapter objectAdapter, OneToManyAssociation otma) {
+        return new ObjectCollectionRepBuilder(resourceContext, objectAdapter, otma);
     }
 
-    public CollectionRepBuilder(ResourceContext resourceContext, ObjectAdapter objectAdapter, OneToManyAssociation otma) {
-        super(resourceContext, objectAdapter, MemberType.COLLECTION, otma);
+    public ObjectCollectionRepBuilder(ResourceContext resourceContext, ObjectAdapter objectAdapter, OneToManyAssociation otma) {
+        super(resourceContext, objectAdapter, MemberType.OBJECT_COLLECTION, otma);
 
         putId();
         putMemberType();

Copied: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectPropertyRepBuilder.java (from r1166100, incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/PropertyRepBuilder.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectPropertyRepBuilder.java?p2=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectPropertyRepBuilder.java&p1=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/PropertyRepBuilder.java&r1=1166100&r2=1167064&rev=1167064&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/PropertyRepBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectPropertyRepBuilder.java Fri Sep  9 09:59:37 2011
@@ -26,14 +26,14 @@ import org.apache.isis.viewer.json.viewe
 
 import com.google.common.collect.Lists;
 
-public class PropertyRepBuilder extends AbstractMemberRepBuilder<PropertyRepBuilder, OneToOneAssociation> {
+public class ObjectPropertyRepBuilder extends AbstractObjectMemberRepBuilder<ObjectPropertyRepBuilder, OneToOneAssociation> {
 
-    public static PropertyRepBuilder newBuilder(ResourceContext resourceContext, ObjectAdapter objectAdapter, OneToOneAssociation otoa) {
-        return new PropertyRepBuilder(resourceContext, objectAdapter, otoa);
+    public static ObjectPropertyRepBuilder newBuilder(ResourceContext resourceContext, ObjectAdapter objectAdapter, OneToOneAssociation otoa) {
+        return new ObjectPropertyRepBuilder(resourceContext, objectAdapter, otoa);
     }
 
-    public PropertyRepBuilder(ResourceContext resourceContext, ObjectAdapter objectAdapter, OneToOneAssociation otoa) {
-        super(resourceContext, objectAdapter, MemberType.PROPERTY, otoa);
+    public ObjectPropertyRepBuilder(ResourceContext resourceContext, ObjectAdapter objectAdapter, OneToOneAssociation otoa) {
+        super(resourceContext, objectAdapter, MemberType.OBJECT_PROPERTY, otoa);
 
         putId();
         putMemberType();
@@ -57,10 +57,10 @@ public class PropertyRepBuilder extends 
         return DomainObjectRepBuilder.valueOrRef(resourceContext, valueAdapter, objectMember.getSpecification(), getOidStringifier(), getLocalization());
     }
 
-    public PropertyRepBuilder withChoices() {
+    public ObjectPropertyRepBuilder withChoices() {
 		Object propertyChoices = propertyChoices();
 		if(propertyChoices != null) {
-			representation.put("choices", propertyChoices);
+			representation.mapPut("choices", propertyChoices);
 		}
 		return this;
 	}

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainservices/DomainServiceResourceServerside.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainservices/DomainServiceResourceServerside.java?rev=1167064&r1=1167063&r2=1167064&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainservices/DomainServiceResourceServerside.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainservices/DomainServiceResourceServerside.java Fri Sep  9 09:59:37 2011
@@ -29,6 +29,7 @@ import javax.ws.rs.Produces;
 import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.ResponseBuilder;
 
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.services.ServiceUtil;
@@ -77,23 +78,30 @@ public class DomainServiceResourceServer
     @Override
     public Response service(@PathParam("serviceId") String serviceId) {
         init();
+        
+        // TODO: figure out how to do exception handling generically
 
         final ObjectAdapter serviceAdapter = getServiceAdapter(serviceId);
         if(serviceAdapter == null) {
             Object[] args = { serviceId };
-            return responseOf(HttpStatusCode.NOT_FOUND, "Could not locate service '%s'", args);
+            return Response
+                    .status(HttpStatusCode.NOT_FOUND.getJaxrsStatusType())
+                    .header(RestfulResponse.Header.WARNING.getName(), String.format("Could not locate service '%s'", args))
+                    .type(MediaType.APPLICATION_JSON_TYPE)
+                    .build();
         }
         ResourceContext resourceContext = getResourceContext();
 
         RepresentationBuilder<?> builder = 
                 DomainServiceRepBuilder.newBuilder(resourceContext)
                 .withAdapter(serviceAdapter);
+        
         return Response.ok()
                 .entity(jsonFrom(builder))
                 .cacheControl(CACHE_NONE)
                 .header(RestfulResponse.Header.X_REPRESENTATION_TYPE.getName(), RepresentationType.DOMAIN_OBJECT.getName())
-                .type(MediaType.APPLICATION_JSON_TYPE).build();
-
+                .type(MediaType.APPLICATION_JSON_TYPE)
+                    .build();
     }
 
 

Added: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/AbstractTypeMemberRepBuilder.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/AbstractTypeMemberRepBuilder.java?rev=1167064&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/AbstractTypeMemberRepBuilder.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/AbstractTypeMemberRepBuilder.java Fri Sep  9 09:59:37 2011
@@ -0,0 +1,39 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.isis.viewer.json.viewer.resources.domaintypes;
+
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
+import org.apache.isis.viewer.json.viewer.ResourceContext;
+import org.apache.isis.viewer.json.viewer.representations.RepresentationBuilder;
+import org.apache.isis.viewer.json.viewer.resources.domainobjects.MemberType;
+
+public abstract class AbstractTypeMemberRepBuilder<R extends RepresentationBuilder<R>, T extends ObjectMember> extends RepresentationBuilder<R> {
+
+    protected final ObjectSpecification objectSpecification;
+    protected final MemberType memberType;
+    protected final T objectMember;
+
+    public AbstractTypeMemberRepBuilder(ResourceContext resourceContext, ObjectSpecification objectSpecification, MemberType memberType, T objectMember) {
+        super(resourceContext);
+        this.objectSpecification = objectSpecification;
+        this.memberType = memberType;
+        this.objectMember = objectMember;
+    }
+
+    
+}
\ No newline at end of file

Added: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypeRepBuilder.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypeRepBuilder.java?rev=1167064&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypeRepBuilder.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypeRepBuilder.java Fri Sep  9 09:59:37 2011
@@ -0,0 +1,47 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.isis.viewer.json.viewer.resources.domaintypes;
+
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.viewer.json.applib.JsonRepresentation;
+import org.apache.isis.viewer.json.viewer.ResourceContext;
+import org.apache.isis.viewer.json.viewer.representations.LinkBuilder;
+import org.apache.isis.viewer.json.viewer.representations.RepresentationBuilder;
+
+public class DomainTypeRepBuilder extends RepresentationBuilder<DomainTypeRepBuilder> {
+
+    public static DomainTypeRepBuilder newBuilder(ResourceContext representationContext) {
+        return new DomainTypeRepBuilder(representationContext);
+    }
+
+    public static LinkBuilder newLinkToBuilder(ResourceContext resourceContext, String rel, ObjectSpecification objectSpec) {
+        String typeFullName = objectSpec.getFullIdentifier();
+        String url = "domainTypes/" + typeFullName;
+        return LinkBuilder.newBuilder(resourceContext, rel, url);
+    }
+
+    public DomainTypeRepBuilder(ResourceContext resourceContext) {
+        super(resourceContext);
+    }
+
+
+    public JsonRepresentation build() {
+        return representation;
+    }
+
+
+}
\ No newline at end of file

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypeResourceServerside.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypeResourceServerside.java?rev=1167064&r1=1167063&r2=1167064&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypeResourceServerside.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypeResourceServerside.java Fri Sep  9 09:59:37 2011
@@ -45,8 +45,8 @@ public class DomainTypeResourceServersid
         init();
 
         JsonRepresentation representation = JsonRepresentation.newMap();
-        representation.put("representationType", LinkBuilder.newBuilder(getResourceContext(), "representationType", "representationTypes/representationType").build());
-        representation.put("self", LinkBuilder.newBuilder(getResourceContext(), "self", "representationType/" + representationTypeName).build());
+        representation.mapPut("representationType", LinkBuilder.newBuilder(getResourceContext(), "representationType", "representationTypes/representationType").build());
+        representation.mapPut("self", LinkBuilder.newBuilder(getResourceContext(), "self", "representationType/" + representationTypeName).build());
         
         return responseOfOk(jsonFor(representation));
     }

Added: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeActionRepBuilder.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeActionRepBuilder.java?rev=1167064&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeActionRepBuilder.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeActionRepBuilder.java Fri Sep  9 09:59:37 2011
@@ -0,0 +1,52 @@
+/**
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.isis.viewer.json.viewer.resources.domaintypes;
+
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
+import org.apache.isis.viewer.json.applib.JsonRepresentation;
+import org.apache.isis.viewer.json.viewer.ResourceContext;
+import org.apache.isis.viewer.json.viewer.representations.LinkBuilder;
+import org.apache.isis.viewer.json.viewer.representations.RepresentationBuilder;
+import org.apache.isis.viewer.json.viewer.resources.domainobjects.AbstractObjectMemberRepBuilder;
+import org.apache.isis.viewer.json.viewer.resources.domainobjects.MemberType;
+import org.apache.isis.viewer.json.viewer.resources.domainobjects.ObjectActionRepBuilder;
+
+public class TypeActionRepBuilder extends AbstractTypeMemberRepBuilder<TypeActionRepBuilder, ObjectAction> {
+
+    public static TypeActionRepBuilder newBuilder(ResourceContext representationContext, ObjectSpecification objectSpecification, ObjectAction objectAction) {
+        return new TypeActionRepBuilder(representationContext, objectSpecification, objectAction);
+    }
+
+    public static LinkBuilder newLinkToBuilder(ResourceContext resourceContext, String rel, ObjectSpecification objectSpecification, ObjectAction objectAction) {
+        String typeFullName = objectSpecification.getFullIdentifier();
+        String actionId = objectAction.getId();
+        String url = "domainTypes/" + typeFullName + "/actions/" + actionId;
+        return LinkBuilder.newBuilder(resourceContext, rel, url);
+    }
+
+    public TypeActionRepBuilder(ResourceContext resourceContext, ObjectSpecification objectSpecification, ObjectAction objectAction) {
+        super(resourceContext, objectSpecification, MemberType.OBJECT_ACTION, objectAction);
+    }
+
+
+    public JsonRepresentation build() {
+        return representation;
+    }
+
+
+}
\ No newline at end of file

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/home/HomePageResourceServerside.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/home/HomePageResourceServerside.java?rev=1167064&r1=1167063&r2=1167064&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/home/HomePageResourceServerside.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/home/HomePageResourceServerside.java Fri Sep  9 09:59:37 2011
@@ -18,15 +18,21 @@
  */
 package org.apache.isis.viewer.json.viewer.resources.home;
 
+import java.util.List;
+
 import javax.ws.rs.Path;
 import javax.ws.rs.Produces;
+import javax.ws.rs.core.HttpHeaders;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
+import org.apache.isis.viewer.json.applib.HttpStatusCode;
 import org.apache.isis.viewer.json.applib.JsonRepresentation;
 import org.apache.isis.viewer.json.applib.RepresentationType;
+import org.apache.isis.viewer.json.applib.RestfulRequest;
 import org.apache.isis.viewer.json.applib.RestfulResponse;
 import org.apache.isis.viewer.json.applib.homepage.HomePageResource;
+import org.apache.isis.viewer.json.viewer.JsonApplicationException;
 import org.apache.isis.viewer.json.viewer.representations.LinkBuilder;
 import org.apache.isis.viewer.json.viewer.resources.ResourceAbstract;
 
@@ -42,15 +48,17 @@ public class HomePageResourceServerside 
     public Response resources() {
         init();
         
+        fakeRuntimeExceptionIfXFail();
+        
         JsonRepresentation representation = JsonRepresentation.newMap();
         
-        representation.put("self", LinkBuilder.newBuilder(getResourceContext(), "self", "").build());
-        representation.put("user", LinkBuilder.newBuilder(getResourceContext(), "user", "user").build());
-        representation.put("services", LinkBuilder.newBuilder(getResourceContext(), "services", "services").build());
-        representation.put("capabilities", LinkBuilder.newBuilder(getResourceContext(), "capabilities", "capabilities").build());
+        representation.mapPut("self", LinkBuilder.newBuilder(getResourceContext(), "self", "").build());
+        representation.mapPut("user", LinkBuilder.newBuilder(getResourceContext(), "user", "user").build());
+        representation.mapPut("services", LinkBuilder.newBuilder(getResourceContext(), "services", "services").build());
+        representation.mapPut("capabilities", LinkBuilder.newBuilder(getResourceContext(), "capabilities", "capabilities").build());
 
-        representation.put("links", JsonRepresentation.newArray());
-        representation.put("extensions", JsonRepresentation.newMap());
+        representation.mapPut("links", JsonRepresentation.newArray());
+        representation.mapPut("extensions", JsonRepresentation.newMap());
 
         return Response.ok()
                 .entity(jsonFor(representation))
@@ -59,5 +67,12 @@ public class HomePageResourceServerside 
                 .type(MediaType.APPLICATION_JSON_TYPE).build();
     }
 
+    private void fakeRuntimeExceptionIfXFail() {
+        HttpHeaders httpHeaders = getResourceContext().getHttpHeaders();
+        if(httpHeaders.getRequestHeader("X-Fail") != null) {
+            throw JsonApplicationException.create(HttpStatusCode.METHOD_FAILURE);
+        }
+    }
+
 
 }
\ No newline at end of file

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/user/UserRepBuilder.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/user/UserRepBuilder.java?rev=1167064&r1=1167063&r2=1167064&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/user/UserRepBuilder.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/user/UserRepBuilder.java Fri Sep  9 09:59:37 2011
@@ -33,12 +33,12 @@ public class UserRepBuilder extends Repr
     }
 
     public UserRepBuilder withAuthenticationSession(AuthenticationSession authenticationSession) {
-        representation.put("username", authenticationSession.getUserName());
+        representation.mapPut("username", authenticationSession.getUserName());
         JsonRepresentation roles = JsonRepresentation.newArray();
         for (String role : authenticationSession.getRoles()) {
-            roles.add(role);
+            roles.arrayAdd(role);
         }
-        representation.put("roles", roles);
+        representation.mapPut("roles", roles);
         return this;
     }
     

Copied: incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/resources/JsonExceptionMapperTest.java (from r1165948, incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/resources/ResourceAbstractTest_jsonFor.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/resources/JsonExceptionMapperTest.java?p2=incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/resources/JsonExceptionMapperTest.java&p1=incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/resources/ResourceAbstractTest_jsonFor.java&r1=1165948&r2=1167064&rev=1167064&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/resources/ResourceAbstractTest_jsonFor.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/resources/JsonExceptionMapperTest.java Fri Sep  9 09:59:37 2011
@@ -1,26 +1,50 @@
 package org.apache.isis.viewer.json.viewer.resources;
 
+import static org.hamcrest.CoreMatchers.*;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.not;
 import static org.hamcrest.CoreMatchers.nullValue;
 import static org.hamcrest.Matchers.greaterThan;
 import static org.junit.Assert.assertThat;
 
+import javax.ws.rs.core.Response;
+
+import org.apache.isis.viewer.json.applib.HttpStatusCode;
 import org.apache.isis.viewer.json.applib.JsonRepresentation;
+import org.apache.isis.viewer.json.applib.RestfulResponse;
 import org.apache.isis.viewer.json.applib.util.JsonMapper;
+import org.apache.isis.viewer.json.viewer.JsonApplicationException;
+import org.apache.isis.viewer.json.viewer.JsonApplicationExceptionMapper;
+import org.junit.Before;
 import org.junit.Test;
 
-public class ResourceAbstractTest_jsonFor {
+public class JsonExceptionMapperTest {
+
+    private JsonApplicationExceptionMapper exceptionMapper;
 
+    @Before
+    public void setUp() throws Exception {
+        exceptionMapper = new JsonApplicationExceptionMapper();
+    }
+    
     @Test
     public void simpleNoMessage() throws Exception {
+        
         // given
-        Exception ex = new Exception();
+        HttpStatusCode status = HttpStatusCode.BAD_REQUEST;
+        JsonApplicationException ex = JsonApplicationException.create(status);
 
         // when
-        String jsonFor = ResourceAbstract.jsonFor(ex);
-        assertThat(jsonFor, is(not(nullValue())));
-        JsonRepresentation jsonRepr = JsonMapper.instance().read(jsonFor, JsonRepresentation.class);
+        Response response = exceptionMapper.toResponse(ex);
+        
+        // then
+        assertThat(HttpStatusCode.lookup(response.getStatus()), is(status));
+        assertThat(response.getMetadata().get("Warning"), is(nullValue()));
+        
+        // and then
+        String entity = (String) response.getEntity();
+        assertThat(entity, is(not(nullValue())));
+        JsonRepresentation jsonRepr = JsonMapper.instance().read(entity, JsonRepresentation.class);
         
         // then
         assertThat(jsonRepr.getString("message"), is(nullValue()));
@@ -30,29 +54,37 @@ public class ResourceAbstractTest_jsonFo
     }
 
     @Test
-    public void withMessage() throws Exception {
-        // given
-        Exception ex = new Exception("foobar");
+    public void entity_withMessage() throws Exception {
+        
+        // givens
+        JsonApplicationException ex = JsonApplicationException.create(HttpStatusCode.BAD_REQUEST, "foobar");
         
         // when
-        String jsonFor = ResourceAbstract.jsonFor(ex);
-        assertThat(jsonFor, is(not(nullValue())));
-        JsonRepresentation jsonRepr = JsonMapper.instance().read(jsonFor, JsonRepresentation.class);
+        Response response = exceptionMapper.toResponse(ex);
+        
+        // then
+        assertThat((String)response.getMetadata().get("Warning").get(0), is(ex.getMessage()));
+        
+        // and then
+        String entity = (String) response.getEntity();
+        assertThat(entity, is(not(nullValue())));
+        JsonRepresentation jsonRepr = JsonMapper.instance().read(entity, JsonRepresentation.class);
         
         // then
         assertThat(jsonRepr.getString("message"), is(ex.getMessage()));
     }
 
     @Test
-    public void withCause() throws Exception {
+    public void entity_withCause() throws Exception {
         // given
         Exception cause = new Exception("barfoo");
-        Exception ex = new Exception("foobar", cause);
+        JsonApplicationException ex = JsonApplicationException.create(HttpStatusCode.BAD_REQUEST, "foobar", cause);
         
         // when
-        String jsonFor = ResourceAbstract.jsonFor(ex);
-        assertThat(jsonFor, is(not(nullValue())));
-        JsonRepresentation jsonRepr = JsonMapper.instance().read(jsonFor, JsonRepresentation.class);
+        Response response = exceptionMapper.toResponse(ex);
+        String entity = (String) response.getEntity();
+        assertThat(entity, is(not(nullValue())));
+        JsonRepresentation jsonRepr = JsonMapper.instance().read(entity, JsonRepresentation.class);
         
         // then
         assertThat(jsonRepr.getString("message"), is(ex.getMessage()));

Copied: incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/resources/RepresentationTypeTest.java (from r1165948, incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/util/RepresentationTypeTest.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/resources/RepresentationTypeTest.java?p2=incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/resources/RepresentationTypeTest.java&p1=incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/util/RepresentationTypeTest.java&r1=1165948&r2=1167064&rev=1167064&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/util/RepresentationTypeTest.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/resources/RepresentationTypeTest.java Fri Sep  9 09:59:37 2011
@@ -1,4 +1,4 @@
-package org.apache.isis.viewer.json.viewer.util;
+package org.apache.isis.viewer.json.viewer.resources;
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
 

Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/util/UrlParserUtilsTest.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/util/UrlParserUtilsTest.java?rev=1167064&r1=1167063&r2=1167064&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/util/UrlParserUtilsTest.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/util/UrlParserUtilsTest.java Fri Sep  9 09:59:37 2011
@@ -10,7 +10,7 @@ public class UrlParserUtilsTest {
 	@Test
 	public void test() throws Exception {
 	    JsonRepresentation link = JsonRepresentation.newMap();
-		link.put("href", "http://localhost/objects/OID:1");
+		link.mapPut("href", "http://localhost/objects/OID:1");
 		String oidFromHref = UrlParserUtils.oidFromHref(link);
 		assertEquals("OID:1", oidFromHref);
 	}