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/09/03 07:49:25 UTC

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

Repository: olingo-odata4
Updated Branches:
  refs/heads/master a1621331c -> f3289fb10


[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/master
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


[4/4] git commit: [OLINGO-406] Merge with branch 'OLINGO-406'

Posted by mi...@apache.org.
[OLINGO-406] Merge with branch 'OLINGO-406'


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

Branch: refs/heads/master
Commit: f3289fb1036c979fef9d7fa7a879bef786a22bf3
Parents: a162133 badb991
Author: mibo <mi...@apache.org>
Authored: Wed Sep 3 07:41:34 2014 +0200
Committer: mibo <mi...@apache.org>
Committed: Wed Sep 3 07:41:34 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(-)
----------------------------------------------------------------------



[3/4] git commit: Merge branch 'master' into OLINGO-406

Posted by mi...@apache.org.
Merge branch 'master' into OLINGO-406


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

Branch: refs/heads/master
Commit: badb9916b238769e9d3c23154a0b8e14418f51a0
Parents: deec7aa a30d2f8
Author: mibo <mi...@apache.org>
Authored: Mon Sep 1 08:27:54 2014 +0200
Committer: mibo <mi...@apache.org>
Committed: Mon Sep 1 08:27:54 2014 +0200

----------------------------------------------------------------------
 .../olingo/ext/proxy/api/AbstractOpenType.java  |   6 +-
 .../olingo/ext/proxy/api/Annotatable.java       |   6 +-
 .../apache/olingo/ext/proxy/api/EntityType.java |   3 +-
 .../AbstractStructuredInvocationHandler.java    |  75 +++++------
 .../commons/AnnotatableInvocationHandler.java   |   4 +-
 .../proxy/commons/EntityInvocationHandler.java  |   7 +-
 .../olingo/ext/proxy/utils/ClassUtils.java      |   5 +
 .../olingo/fit/proxy/v3/OpenTypeTestITCase.java |  18 +--
 .../fit/proxy/v4/APIBasicDesignTestITCase.java  |   4 +-
 .../olingo/fit/proxy/v4/OpenTypeTestITCase.java |  30 ++---
 .../fit/proxy/v4/SingletonTestITCase.java       |  12 +-
 .../apache/olingo/client/core/uri/URIUtils.java |  17 ++-
 .../server/core/ODataExceptionHandler.java      |  54 --------
 .../server/core/ODataExceptionHelper.java       |  87 +++++++++++--
 .../apache/olingo/server/core/ODataHandler.java |  66 +++++-----
 .../server/core/ODataHttpHandlerImpl.java       |  29 ++++-
 .../olingo/server/core/uri/parser/Parser.java   |   2 +-
 .../core/uri/parser/UriParseTreeVisitor.java    |  23 ++--
 .../uri/parser/UriParserSemanticException.java  |   3 +-
 .../uri/parser/UriParserSyntaxException.java    |   3 +-
 .../server-core-exceptions-i18n.properties      |   2 +
 .../core/ODataHandlerExceptionHandlingTest.java | 124 +++++++++++++++++++
 .../olingo/server/core/ODataHandlerTest.java    |  81 ++----------
 .../core/uri/antlr/TestFullResourcePath.java    |  26 ++--
 24 files changed, 401 insertions(+), 286 deletions(-)
----------------------------------------------------------------------



[2/4] git commit: [OLINGO-406] Omit odata.type information for none metadata

Posted by mi...@apache.org.
[OLINGO-406] Omit odata.type information for none metadata


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

Branch: refs/heads/master
Commit: deec7aa854cd3b00d161ea63f5c5151fdaeb3054
Parents: b81a2ee
Author: mibo <mi...@apache.org>
Authored: Mon Sep 1 08:27:07 2014 +0200
Committer: mibo <mi...@apache.org>
Committed: Mon Sep 1 08:27:07 2014 +0200

----------------------------------------------------------------------
 .../olingo/commons/core/serialization/JsonEntitySerializer.java  | 2 +-
 .../apache/olingo/commons/core/serialization/JsonSerializer.java | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/deec7aa8/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 b7c2f13..5576e19 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
@@ -74,7 +74,7 @@ public class JsonEntitySerializer extends JsonSerializer {
       }
     }
 
-    if (StringUtils.isNotBlank(entity.getType()) && format == ODataFormat.JSON_FULL_METADATA) {
+    if (StringUtils.isNotBlank(entity.getType()) && format != ODataFormat.JSON_NO_METADATA) {
       jgen.writeStringField(version.getJsonName(ODataServiceVersion.JsonKey.TYPE),
               new EdmTypeInfo.Builder().setTypeExpression(entity.getType()).build().external(version));
     }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/deec7aa8/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 b6f857f..6955b11 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
@@ -314,7 +314,7 @@ public class JsonSerializer implements ODataSerializer {
       throws IOException, EdmPrimitiveTypeException {
     jgen.writeStartObject();
 
-    if (typeInfo != null && format == ODataFormat.JSON_FULL_METADATA) {
+    if (typeInfo != null && format != ODataFormat.JSON_NO_METADATA) {
       jgen.writeStringField(version.getJsonName(ODataServiceVersion.JsonKey.TYPE), typeInfo.external(version));
     }
 
@@ -361,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) && format == ODataFormat.JSON_FULL_METADATA) {
+      if (StringUtils.isNotBlank(type) && format != ODataFormat.JSON_NO_METADATA) {
         jgen.writeFieldName(
                 name + StringUtils.prependIfMissing(version.getJsonName(ODataServiceVersion.JsonKey.TYPE), "@"));
         jgen.writeString(new EdmTypeInfo.Builder().setTypeExpression(type).build().external(version));