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