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));