You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by mi...@apache.org on 2014/08/15 14:31:54 UTC

git commit: [OLINGO-406] Extended JSON format handling for core JsonSerializer

Repository: olingo-odata4
Updated Branches:
  refs/heads/OLINGO-406 [created] b81a2ee4f


[OLINGO-406] Extended JSON format handling for core JsonSerializer


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

Branch: refs/heads/OLINGO-406
Commit: b81a2ee4fcebc019ec010e14075db8cf86409561
Parents: 931f132
Author: mibo <mi...@apache.org>
Authored: Fri Aug 15 14:29:49 2014 +0200
Committer: mibo <mi...@apache.org>
Committed: Fri Aug 15 14:29:49 2014 +0200

----------------------------------------------------------------------
 .../olingo/fit/v4/AbstractTestITCase.java       | 17 +++++++++++
 .../olingo/fit/v4/EntityCreateTestITCase.java   |  3 ++
 .../serialization/JsonEntitySerializer.java     | 22 +++++++++-----
 .../core/serialization/JsonSerializer.java      | 32 +++++++++++++-------
 4 files changed, 55 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/b81a2ee4/fit/src/test/java/org/apache/olingo/fit/v4/AbstractTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v4/AbstractTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v4/AbstractTestITCase.java
index 3303aab..ddaa52e 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v4/AbstractTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v4/AbstractTestITCase.java
@@ -36,6 +36,7 @@ import org.apache.olingo.commons.api.format.ContentType;
 import org.apache.olingo.commons.api.format.ODataFormat;
 import org.apache.olingo.commons.core.domain.v4.ODataEntityImpl;
 import org.apache.olingo.fit.AbstractBaseTestITCase;
+import org.hamcrest.CoreMatchers;
 import org.junit.BeforeClass;
 
 import java.io.IOException;
@@ -44,8 +45,12 @@ import java.net.URI;
 import java.util.Calendar;
 import java.util.TimeZone;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.startsWith;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertThat;
 
 public abstract class AbstractTestITCase extends AbstractBaseTestITCase {
 
@@ -148,6 +153,18 @@ public abstract class AbstractTestITCase extends AbstractBaseTestITCase {
     assertNotNull(created);
     assertEquals(2, created.getProperty("OrderShelfLifes").getCollectionValue().size());
 
+    if(format == ODataFormat.JSON_NO_METADATA) {
+      assertEquals(0, created.getNavigationLinks().size());
+      assertNull(created.getEditLink());
+    } else if(format == ODataFormat.JSON_FULL_METADATA) {
+      assertEquals(3, created.getNavigationLinks().size());
+      assertThat(created.getTypeName().getNamespace(), is("Microsoft.Test.OData.Services.ODataWCFService"));
+      assertThat(created.getEditLink().toASCIIString(), startsWith("http://localhost:9080/stub/StaticService"));
+    } else if(format == ODataFormat.JSON || format == ODataFormat.APPLICATION_JSON) {
+      assertEquals(0, created.getNavigationLinks().size());
+      assertNull(created.getEditLink());
+    }
+
     final URI deleteURI = getClient().newURIBuilder(serviceRoot).
             appendEntitySetSegment("Orders").appendKeySegment(id).build();
     final ODataDeleteRequest deleteReq = getClient().getCUDRequestFactory().getDeleteRequest(deleteURI);

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/b81a2ee4/fit/src/test/java/org/apache/olingo/fit/v4/EntityCreateTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v4/EntityCreateTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v4/EntityCreateTestITCase.java
index 1bfe737..a0ca554 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v4/EntityCreateTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v4/EntityCreateTestITCase.java
@@ -48,8 +48,11 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
   @Test
   public void jsonCreateAndDelete() {
     createAndDeleteOrder(testStaticServiceRootURL, ODataFormat.JSON, 1001);
+    createAndDeleteOrder(testStaticServiceRootURL, ODataFormat.JSON_NO_METADATA, 1001);
+    createAndDeleteOrder(testStaticServiceRootURL, ODataFormat.JSON_FULL_METADATA, 1001);
   }
 
+
   private void onContained(final ODataFormat format) {
     final URI uri = getClient().newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Accounts").
         appendKeySegment(101).appendNavigationSegment("MyPaymentInstruments").build();

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/b81a2ee4/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonEntitySerializer.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonEntitySerializer.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonEntitySerializer.java
index 826d2b7..b7c2f13 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonEntitySerializer.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonEntitySerializer.java
@@ -29,9 +29,9 @@ import org.apache.olingo.commons.api.data.ResWrap;
 import org.apache.olingo.commons.api.domain.ODataOperation;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
 import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
+import org.apache.olingo.commons.api.format.ODataFormat;
 import org.apache.olingo.commons.core.edm.EdmTypeInfo;
 import java.io.IOException;
-import java.net.URI;
 
 /**
  * Writes out JSON string from an entity.
@@ -42,14 +42,18 @@ public class JsonEntitySerializer extends JsonSerializer {
     super(version, serverMode);
   }
 
+  public JsonEntitySerializer(ODataServiceVersion version, boolean serverMode, ODataFormat format) {
+    super(version, serverMode, format);
+  }
+
   protected void doSerialize(final Entity entity, final JsonGenerator jgen)
-          throws IOException, EdmPrimitiveTypeException {
+      throws IOException, EdmPrimitiveTypeException {
 
-    doContainerSerialize(new ResWrap<Entity>((URI) null, null, entity), jgen);
+    doContainerSerialize(new ResWrap<Entity>(null, null, entity), jgen);
   }
 
   protected void doContainerSerialize(final ResWrap<Entity> container, final JsonGenerator jgen)
-          throws IOException, EdmPrimitiveTypeException {
+      throws IOException, EdmPrimitiveTypeException {
 
     final Entity entity = container.getPayload();
 
@@ -70,12 +74,12 @@ public class JsonEntitySerializer extends JsonSerializer {
       }
     }
 
-    if (StringUtils.isNotBlank(entity.getType())) {
+    if (StringUtils.isNotBlank(entity.getType()) && format == ODataFormat.JSON_FULL_METADATA) {
       jgen.writeStringField(version.getJsonName(ODataServiceVersion.JsonKey.TYPE),
               new EdmTypeInfo.Builder().setTypeExpression(entity.getType()).build().external(version));
     }
 
-    if (entity.getId() != null) {
+    if (entity.getId() != null && format != ODataFormat.JSON_NO_METADATA) {
       jgen.writeStringField(version.getJsonName(ODataServiceVersion.JsonKey.ID), entity.getId().toASCIIString());
     }
 
@@ -97,7 +101,9 @@ public class JsonEntitySerializer extends JsonSerializer {
       }
     }
 
-    links(entity, jgen);
+    if (format != ODataFormat.JSON_NO_METADATA) {
+      links(entity, jgen);
+    }
 
     for (Link link : entity.getMediaEditLinks()) {
       if (link.getTitle() == null) {
@@ -127,4 +133,4 @@ public class JsonEntitySerializer extends JsonSerializer {
 
     jgen.writeEndObject();
   }
-}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/b81a2ee4/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonSerializer.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonSerializer.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonSerializer.java
index 2c7c66b..b6f857f 100755
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonSerializer.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonSerializer.java
@@ -39,10 +39,12 @@ import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
 import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
 import org.apache.olingo.commons.api.edm.geo.Geospatial;
+import org.apache.olingo.commons.api.format.ODataFormat;
 import org.apache.olingo.commons.api.serialization.ODataSerializer;
 import org.apache.olingo.commons.api.serialization.ODataSerializerException;
 import org.apache.olingo.commons.core.edm.EdmTypeInfo;
 import org.apache.olingo.commons.core.edm.primitivetype.EdmPrimitiveTypeFactory;
+
 import java.io.IOException;
 import java.io.Writer;
 import java.util.ArrayList;
@@ -53,10 +55,10 @@ import java.util.Map;
 public class JsonSerializer implements ODataSerializer {
 
   private static final EdmPrimitiveTypeKind[] NUMBER_TYPES = {
-    EdmPrimitiveTypeKind.Byte, EdmPrimitiveTypeKind.SByte,
-    EdmPrimitiveTypeKind.Single, EdmPrimitiveTypeKind.Double,
-    EdmPrimitiveTypeKind.Int16, EdmPrimitiveTypeKind.Int32, EdmPrimitiveTypeKind.Int64,
-    EdmPrimitiveTypeKind.Decimal
+      EdmPrimitiveTypeKind.Byte, EdmPrimitiveTypeKind.SByte,
+      EdmPrimitiveTypeKind.Single, EdmPrimitiveTypeKind.Double,
+      EdmPrimitiveTypeKind.Int16, EdmPrimitiveTypeKind.Int32, EdmPrimitiveTypeKind.Int64,
+      EdmPrimitiveTypeKind.Decimal
   };
 
   private final JsonGeoValueSerializer geoSerializer = new JsonGeoValueSerializer();
@@ -65,9 +67,16 @@ public class JsonSerializer implements ODataSerializer {
 
   protected boolean serverMode;
 
+  protected ODataFormat format;
+
   public JsonSerializer(final ODataServiceVersion version, final boolean serverMode) {
+    this(version, serverMode, ODataFormat.JSON_FULL_METADATA);
+  }
+
+  public JsonSerializer(final ODataServiceVersion version, final boolean serverMode, ODataFormat format) {
     this.version = version;
     this.serverMode = serverMode;
+    this.format = format;
   }
 
   @Override
@@ -77,7 +86,7 @@ public class JsonSerializer implements ODataSerializer {
       if (obj instanceof EntitySet) {
         new JsonEntitySetSerializer(version, serverMode).doSerialize((EntitySet) obj, json);
       } else if (obj instanceof Entity) {
-        new JsonEntitySerializer(version, serverMode).doSerialize((Entity) obj, json);
+        new JsonEntitySerializer(version, serverMode, format).doSerialize((Entity) obj, json);
       } else if (obj instanceof Property) {
         new JsonPropertySerializer(version, serverMode).doSerialize((Property) obj, json);
       } else if (obj instanceof Link) {
@@ -233,7 +242,8 @@ public class JsonSerializer implements ODataSerializer {
   }
 
   private void collection(final JsonGenerator jgen, final EdmTypeInfo typeInfo,
-          final ValueType valueType, final List<?> value) throws IOException, EdmPrimitiveTypeException {
+                          final ValueType valueType, final List<?> value)
+      throws IOException, EdmPrimitiveTypeException {
 
     jgen.writeStartArray();
 
@@ -300,11 +310,11 @@ public class JsonSerializer implements ODataSerializer {
   }
 
   private void complexValue(final JsonGenerator jgen, final EdmTypeInfo typeInfo,
-          final List<Property> value, final Linked linked)
-          throws IOException, EdmPrimitiveTypeException {
+                            final List<Property> value, final Linked linked)
+      throws IOException, EdmPrimitiveTypeException {
     jgen.writeStartObject();
 
-    if (typeInfo != null) {
+    if (typeInfo != null && format == ODataFormat.JSON_FULL_METADATA) {
       jgen.writeStringField(version.getJsonName(ODataServiceVersion.JsonKey.TYPE), typeInfo.external(version));
     }
 
@@ -351,7 +361,7 @@ public class JsonSerializer implements ODataSerializer {
       if (StringUtils.isBlank(type) && valuable.isPrimitive() || valuable.isNull()) {
         type = EdmPrimitiveTypeKind.String.getFullQualifiedName().toString();
       }
-      if (StringUtils.isNotBlank(type)) {
+      if (StringUtils.isNotBlank(type) && format == ODataFormat.JSON_FULL_METADATA) {
         jgen.writeFieldName(
                 name + StringUtils.prependIfMissing(version.getJsonName(ODataServiceVersion.JsonKey.TYPE), "@"));
         jgen.writeString(new EdmTypeInfo.Builder().setTypeExpression(type).build().external(version));
@@ -367,4 +377,4 @@ public class JsonSerializer implements ODataSerializer {
     jgen.writeFieldName(name);
     value(jgen, valuable.getType(), valuable);
   }
-}
+}
\ No newline at end of file