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/07/17 10:41:11 UTC
git commit: [OLINGO-317] Basic media entity support and more
Constants usage
Repository: olingo-odata4
Updated Branches:
refs/heads/master b9db730f3 -> 31e491395
[OLINGO-317] Basic media entity support and more Constants usage
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/31e49139
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/31e49139
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/31e49139
Branch: refs/heads/master
Commit: 31e491395024aa0803bccbc949bc583c59465be0
Parents: b9db730
Author: Michael Bolz <mi...@sap.com>
Authored: Thu Jul 17 10:40:54 2014 +0200
Committer: Michael Bolz <mi...@sap.com>
Committed: Thu Jul 17 10:40:54 2014 +0200
----------------------------------------------------------------------
.../serializer/json/ODataErrorSerializer.java | 33 ++++----
.../serializer/json/ODataJsonSerializer.java | 47 +++++-------
.../json/ServiceDocumentJsonSerializer.java | 43 +++++------
.../olingo/server/tecsvc/data/DataProvider.java | 47 +++++++++---
.../json/ODataJsonSerializerTest.java | 80 +++++++++++++++++++-
5 files changed, 169 insertions(+), 81 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/31e49139/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataErrorSerializer.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataErrorSerializer.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataErrorSerializer.java
index b635742..c453de5 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataErrorSerializer.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataErrorSerializer.java
@@ -18,34 +18,29 @@
*/
package org.apache.olingo.server.core.serializer.json;
-import com.fasterxml.jackson.core.JsonGenerationException;
-import com.fasterxml.jackson.core.JsonGenerator;
+import java.io.IOException;
+
+import org.apache.olingo.commons.api.Constants;
import org.apache.olingo.commons.api.ODataRuntimeException;
import org.apache.olingo.commons.api.domain.ODataError;
import org.apache.olingo.commons.api.domain.ODataErrorDetail;
-import java.io.IOException;
+import com.fasterxml.jackson.core.JsonGenerator;
public class ODataErrorSerializer {
- private static final String ERROR = "error";
- private static final String CODE = "code";
- private static final String MESSAGE = "message";
- private static final String TARGET = "target";
- private static final String DETAILS = "details";
-
public void writeErrorDocument(JsonGenerator json, ODataError error) throws IOException {
if (error == null) {
throw new ODataRuntimeException("ODataError object MUST NOT be null!");
}
json.writeStartObject();
- json.writeFieldName(ERROR);
+ json.writeFieldName(Constants.JSON_ERROR);
json.writeStartObject();
writeODataError(json, error.getCode(), error.getMessage(), error.getTarget());
if (error.getDetails() != null) {
- json.writeArrayFieldStart(DETAILS);
+ json.writeArrayFieldStart(Constants.ERROR_DETAILS);
for (ODataErrorDetail detail : error.getDetails()) {
json.writeStartObject();
writeODataError(json, detail.getCode(), detail.getMessage(), detail.getTarget());
@@ -58,21 +53,23 @@ public class ODataErrorSerializer {
json.writeEndObject();
}
- private void writeODataError(JsonGenerator json, String code, String message, String target) throws IOException,
- JsonGenerationException {
+ private void writeODataError(JsonGenerator json, String code, String message, String target) throws IOException {
+ json.writeFieldName(Constants.ERROR_CODE);
if (code == null) {
- json.writeNullField(CODE);
+ json.writeNull();
} else {
- json.writeStringField(CODE, code);
+ json.writeString(code);
}
+
+ json.writeFieldName(Constants.ERROR_MESSAGE);
if (message == null) {
- json.writeNullField(MESSAGE);
+ json.writeNull();
} else {
- json.writeStringField(MESSAGE, message);
+ json.writeString(message);
}
if (target != null) {
- json.writeStringField(TARGET, target);
+ json.writeStringField(Constants.ERROR_TARGET, target);
}
}
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/31e49139/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java
index cc817de..27af0d8 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java
@@ -18,9 +18,10 @@
*/
package org.apache.olingo.server.core.serializer.json;
-import com.fasterxml.jackson.core.JsonFactory;
-import com.fasterxml.jackson.core.JsonGenerator;
-import com.fasterxml.jackson.core.util.DefaultPrettyPrinter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.List;
+
import org.apache.olingo.commons.api.Constants;
import org.apache.olingo.commons.api.ODataRuntimeException;
import org.apache.olingo.commons.api.data.ContextURL;
@@ -45,11 +46,9 @@ import org.apache.olingo.server.core.serializer.utils.CircleStreamBuffer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.io.BufferedWriter;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStreamWriter;
-import java.util.List;
+import com.fasterxml.jackson.core.JsonFactory;
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.core.util.DefaultPrettyPrinter;
public class ODataJsonSerializer implements ODataSerializer {
@@ -64,21 +63,15 @@ public class ODataJsonSerializer implements ODataSerializer {
@Override
public InputStream serviceDocument(final Edm edm, final String serviceRoot) {
CircleStreamBuffer buffer;
- BufferedWriter writer;
- JsonFactory factory;
JsonGenerator gen = null;
// TODO: move stream initialization into separate method
try {
buffer = new CircleStreamBuffer();
- writer = new BufferedWriter(new OutputStreamWriter(buffer.getOutputStream(), DEFAULT_CHARSET));
- factory = new JsonFactory();
+ gen = new JsonFactory().createGenerator(buffer.getOutputStream())
+ .setPrettyPrinter(new DefaultPrettyPrinter());
- gen = factory.createGenerator(writer);
- gen.setPrettyPrinter(new DefaultPrettyPrinter());
-
- ServiceDocumentJsonSerializer serializer = new ServiceDocumentJsonSerializer(edm, serviceRoot);
- serializer.writeServiceDocument(gen);
+ new ServiceDocumentJsonSerializer(edm, serviceRoot).writeServiceDocument(gen);
gen.close();
@@ -130,7 +123,7 @@ public class ODataJsonSerializer implements ODataSerializer {
try {
JsonGenerator json = new JsonFactory().createGenerator(buffer.getOutputStream());
json.writeStartObject();
- if (entitySetContextURL != null && format != ODataFormat.JSON_NO_METADATA) {
+ if (format != ODataFormat.JSON_NO_METADATA) {
json.writeStringField(Constants.JSON_CONTEXT, entitySetContextURL.getURI().toASCIIString());
}
if (entitySet.getCount() != null) {
@@ -174,6 +167,7 @@ public class ODataJsonSerializer implements ODataSerializer {
protected void writeEntity(final EdmEntitySet entitySet, final Entity entity, final ContextURL contextURL,
final JsonGenerator json) throws IOException, EdmPrimitiveTypeException {
+ final EdmEntityType entityType = entitySet.getEntityType();
json.writeStartObject();
if (format != ODataFormat.JSON_NO_METADATA) {
if (contextURL != null) {
@@ -182,14 +176,15 @@ public class ODataJsonSerializer implements ODataSerializer {
if (entity.getETag() != null) {
json.writeStringField(Constants.JSON_ETAG, entity.getETag());
}
- if (entity.getMediaETag() != null) {
- json.writeStringField(Constants.JSON_MEDIA_ETAG, entity.getMediaETag());
- }
- if (entity.getMediaContentType() != null) {
- json.writeStringField(Constants.JSON_MEDIA_CONTENT_TYPE, entity.getMediaContentType());
+ if (entityType.hasStream()) {
+ if (entity.getMediaETag() != null) {
+ json.writeStringField(Constants.JSON_MEDIA_ETAG, entity.getMediaETag());
+ }
+ if (entity.getMediaContentType() != null) {
+ json.writeStringField(Constants.JSON_MEDIA_CONTENT_TYPE, entity.getMediaContentType());
+ }
}
}
- final EdmEntityType entityType = entitySet.getEntityType();
for (final String propertyName : entityType.getPropertyNames()) {
final EdmProperty edmProperty = (EdmProperty) entityType.getProperty(propertyName);
final Property property = entity.getProperty(propertyName);
@@ -214,7 +209,7 @@ public class ODataJsonSerializer implements ODataSerializer {
writePrimitive(edmProperty, property, json);
} else if (property.isLinkedComplex()) {
writeComplexValue(edmProperty, property.asLinkedComplex().getValue(), json);
- } else if(property.isComplex()) {
+ } else if (property.isComplex()) {
writeComplexValue(edmProperty, property.asComplex(), json);
} else {
throw new ODataRuntimeException("Property type not yet supported!");
@@ -285,7 +280,7 @@ public class ODataJsonSerializer implements ODataSerializer {
}
private void writeComplexValue(final EdmProperty edmProperty, final List<Property> properties,
- JsonGenerator json) throws IOException, EdmPrimitiveTypeException {
+ JsonGenerator json) throws IOException, EdmPrimitiveTypeException {
final EdmComplexType type = (EdmComplexType) edmProperty.getType();
json.writeStartObject();
for (final String propertyName : type.getPropertyNames()) {
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/31e49139/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ServiceDocumentJsonSerializer.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ServiceDocumentJsonSerializer.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ServiceDocumentJsonSerializer.java
index 95a8b39..e2f7261 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ServiceDocumentJsonSerializer.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ServiceDocumentJsonSerializer.java
@@ -18,22 +18,18 @@
*/
package org.apache.olingo.server.core.serializer.json;
-import com.fasterxml.jackson.core.JsonGenerationException;
-import com.fasterxml.jackson.core.JsonGenerator;
+import java.io.IOException;
+
+import org.apache.olingo.commons.api.Constants;
import org.apache.olingo.commons.api.edm.Edm;
import org.apache.olingo.commons.api.edm.EdmEntityContainer;
import org.apache.olingo.commons.api.edm.EdmEntitySet;
import org.apache.olingo.commons.api.edm.EdmFunctionImport;
import org.apache.olingo.commons.api.edm.EdmSingleton;
-import java.io.IOException;
+import com.fasterxml.jackson.core.JsonGenerator;
public class ServiceDocumentJsonSerializer {
- public static final String ODATA_CONTEXT = "@odata.context";
- public static final String METADATA = "$metadata";
- public static final String VALUE = "value";
- public static final String NAME = "name";
- public static final String URL = "url";
public static final String KIND = "kind";
public static final String FUNCTION_IMPORT = "FunctionImport";
@@ -48,64 +44,63 @@ public class ServiceDocumentJsonSerializer {
this.serviceRoot = serviceRoot;
}
- public void writeServiceDocument(final JsonGenerator gen) throws JsonGenerationException, IOException {
+ public void writeServiceDocument(final JsonGenerator gen) throws IOException {
gen.writeStartObject();
Object metadataUri;
if (serviceRoot == null) {
- metadataUri = METADATA;
+ metadataUri = Constants.METADATA;
} else {
if (serviceRoot.endsWith("/")) {
- metadataUri = serviceRoot + METADATA;
+ metadataUri = serviceRoot + Constants.METADATA;
} else {
- metadataUri = serviceRoot + "/" + METADATA;
+ metadataUri = serviceRoot + "/" + Constants.METADATA;
}
}
- gen.writeObjectField(ODATA_CONTEXT, metadataUri);
- gen.writeArrayFieldStart(VALUE);
+ gen.writeObjectField(Constants.JSON_CONTEXT, metadataUri);
+ gen.writeArrayFieldStart(Constants.VALUE);
writeEntitySets(gen, edm);
writeFunctionImports(gen, edm);
writeSingletons(gen, edm);
}
- private void writeEntitySets(final JsonGenerator gen, final Edm edm) throws JsonGenerationException, IOException {
+ private void writeEntitySets(final JsonGenerator gen, final Edm edm) throws IOException {
EdmEntityContainer container = edm.getEntityContainer(null);
for (EdmEntitySet edmEntitySet : container.getEntitySets()) {
if (edmEntitySet.isIncludeInServiceDocument()) {
gen.writeStartObject();
- gen.writeObjectField(NAME, edmEntitySet.getName());
- gen.writeObjectField(URL, edmEntitySet.getName());
+ gen.writeObjectField(Constants.JSON_NAME, edmEntitySet.getName());
+ gen.writeObjectField(Constants.JSON_URL, edmEntitySet.getName());
gen.writeEndObject();
}
}
}
- private void writeFunctionImports(final JsonGenerator gen, final Edm edm) throws JsonGenerationException,
- IOException {
+ private void writeFunctionImports(final JsonGenerator gen, final Edm edm) throws IOException {
EdmEntityContainer container = edm.getEntityContainer(null);
for (EdmFunctionImport edmFunctionImport : container.getFunctionImports()) {
if (edmFunctionImport.isIncludeInServiceDocument()) {
gen.writeStartObject();
- gen.writeObjectField(NAME, edmFunctionImport.getName());
- gen.writeObjectField(URL, edmFunctionImport.getName());
+ gen.writeObjectField(Constants.JSON_NAME, edmFunctionImport.getName());
+ gen.writeObjectField(Constants.JSON_URL, edmFunctionImport.getName());
gen.writeObjectField(KIND, FUNCTION_IMPORT);
gen.writeEndObject();
}
}
}
- private void writeSingletons(final JsonGenerator gen, final Edm edm) throws JsonGenerationException, IOException {
+ private void writeSingletons(final JsonGenerator gen, final Edm edm) throws IOException {
EdmEntityContainer container = edm.getEntityContainer(null);
for (EdmSingleton edmSingleton : container.getSingletons()) {
gen.writeStartObject();
- gen.writeObjectField(NAME, edmSingleton.getName());
- gen.writeObjectField(URL, edmSingleton.getName());
+ gen.writeObjectField(Constants.JSON_NAME, edmSingleton.getName());
+ gen.writeObjectField(Constants.JSON_URL, edmSingleton.getName());
gen.writeObjectField(KIND, SINGLETON);
gen.writeEndObject();
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/31e49139/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/DataProvider.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/DataProvider.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/DataProvider.java
index 41e94f6..71bdf7a 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/DataProvider.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/DataProvider.java
@@ -18,6 +18,16 @@
*/
package org.apache.olingo.server.tecsvc.data;
+import java.sql.Timestamp;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.TimeZone;
+import java.util.UUID;
+
import org.apache.olingo.commons.api.data.Entity;
import org.apache.olingo.commons.api.data.EntitySet;
import org.apache.olingo.commons.api.data.LinkedComplexValue;
@@ -35,16 +45,6 @@ import org.apache.olingo.commons.core.data.LinkedComplexValueImpl;
import org.apache.olingo.commons.core.data.PropertyImpl;
import org.apache.olingo.server.api.uri.UriParameter;
-import java.sql.Timestamp;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Calendar;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.TimeZone;
-import java.util.UUID;
-
public class DataProvider {
private static final UUID GUID = UUID.fromString("01234567-89ab-cdef-0123-456789abcdef");
@@ -61,6 +61,7 @@ public class DataProvider {
data.put("ESCollAllPrim", createESCollAllPrim());
data.put("ESMixPrimCollComp", createESMixPrimCollComp());
data.put("ESAllKey", createESAllKey());
+ data.put("ESMedia", createESMedia());
}
public EntitySet readAll(final EdmEntitySet edmEntitySet) throws DataProviderException {
@@ -419,6 +420,32 @@ public class DataProvider {
return entitySet;
}
+ private EntitySet createESMedia() {
+ EntitySet entitySet = new EntitySetImpl();
+
+ Entity entity = new EntityImpl();
+ entity.addProperty(createPrimitive("PropertyInt16", 1));
+ entity.setMediaContentType("image/png");
+ entitySet.getEntities().add(entity);
+
+ entity = new EntityImpl();
+ entity.addProperty(createPrimitive("PropertyInt16", 2));
+ entity.setMediaContentType("image/bmp");
+ entitySet.getEntities().add(entity);
+
+ entity = new EntityImpl();
+ entity.addProperty(createPrimitive("PropertyInt16", 3));
+ entity.setMediaContentType("image/jpeg");
+ entitySet.getEntities().add(entity);
+
+ entity = new EntityImpl();
+ entity.addProperty(createPrimitive("PropertyInt16", 4));
+ entity.setMediaContentType("foo");
+ entitySet.getEntities().add(entity);
+
+ return entitySet;
+ }
+
private Property createPrimitive(final String name, final Object value) {
return new PropertyImpl(null, name, ValueType.PRIMITIVE, value);
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/31e49139/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java
----------------------------------------------------------------------
diff --git a/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java b/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java
index dc29a93..974e338 100644
--- a/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java
+++ b/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java
@@ -18,11 +18,17 @@
*/
package org.apache.olingo.server.core.serializer.json;
+import java.io.InputStream;
+import java.net.URI;
+import java.util.Arrays;
+
import org.apache.commons.io.IOUtils;
+import org.apache.olingo.commons.api.ODataRuntimeException;
import org.apache.olingo.commons.api.data.ContextURL;
import org.apache.olingo.commons.api.data.ContextURL.Suffix;
import org.apache.olingo.commons.api.data.Entity;
import org.apache.olingo.commons.api.data.EntitySet;
+import org.apache.olingo.commons.api.data.ValueType;
import org.apache.olingo.commons.api.edm.Edm;
import org.apache.olingo.commons.api.edm.EdmEntityContainer;
import org.apache.olingo.commons.api.edm.EdmEntitySet;
@@ -35,9 +41,6 @@ import org.apache.olingo.server.tecsvc.provider.EdmTechProvider;
import org.junit.Assert;
import org.junit.Test;
-import java.io.InputStream;
-import java.net.URI;
-
public class ODataJsonSerializerTest {
private final Edm edm = OData.newInstance().createEdm(new EdmTechProvider());
@@ -76,6 +79,40 @@ public class ODataJsonSerializerTest {
}
@Test
+ public void entityAllPrimAllNull() throws Exception {
+ final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESAllPrim");
+ Entity entity = data.readAll(edmEntitySet).getEntities().get(0);
+ entity.getProperties().retainAll(Arrays.asList(entity.getProperties().get(0)));
+ final String resultString = IOUtils.toString(serializer.entity(edmEntitySet, entity, null));
+ final String expectedResult = "{\"@odata.context\":\"$metadata#ESAllPrim/$entity\","
+ + "\"PropertyInt16\":32767,"
+ + "\"PropertyString\":null,\"PropertyBoolean\":null,"
+ + "\"PropertyByte\":null,\"PropertySByte\":null,"
+ + "\"PropertyInt32\":null,\"PropertyInt64\":null,"
+ + "\"PropertySingle\":null,\"PropertyDouble\":null,\"PropertyDecimal\":null,"
+ + "\"PropertyBinary\":null,"
+ + "\"PropertyDate\":null,\"PropertyDateTimeOffset\":null,\"PropertyDuration\":null,"
+ + "\"PropertyGuid\":null,\"PropertyTimeOfDay\":null}";
+ Assert.assertEquals(expectedResult, resultString);
+ }
+
+ @Test(expected = ODataRuntimeException.class)
+ public void entityAllPrimKeyNull() throws Exception {
+ final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESAllPrim");
+ Entity entity = data.readAll(edmEntitySet).getEntities().get(0);
+ entity.getProperties().clear();
+ serializer.entity(edmEntitySet, entity, null);
+ }
+
+ @Test(expected = ODataRuntimeException.class)
+ public void entityWrongData() throws Exception {
+ final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESAllPrim");
+ Entity entity = data.readAll(edmEntitySet).getEntities().get(0);
+ entity.getProperties().get(0).setValue(ValueType.PRIMITIVE, false);
+ serializer.entity(edmEntitySet, entity, null);
+ }
+
+ @Test
public void entitySetAllPrim() throws Exception {
final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESAllPrim");
EntitySet entitySet = data.readAll(edmEntitySet);
@@ -181,6 +218,18 @@ public class ODataJsonSerializerTest {
}
@Test
+ public void entityMixPrimCollCompAllNull() throws Exception {
+ final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESMixPrimCollComp");
+ Entity entity = data.readAll(edmEntitySet).getEntities().get(0);
+ entity.getProperties().retainAll(Arrays.asList(entity.getProperties().get(0)));
+ final String resultString = IOUtils.toString(serializer.entity(edmEntitySet, entity, null));
+ final String expectedResult = "{\"@odata.context\":\"$metadata#ESMixPrimCollComp/$entity\","
+ + "\"PropertyInt16\":32767,"
+ + "\"CollPropertyString\":null,\"PropertyComp\":null,\"CollPropertyComp\":null}";
+ Assert.assertEquals(expectedResult, resultString);
+ }
+
+ @Test
public void entityTwoPrimNoMetadata() throws Exception {
final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESTwoPrim");
final Entity entity = data.readAll(edmEntitySet).getEntities().get(0);
@@ -205,4 +254,29 @@ public class ODataJsonSerializerTest {
+ "{\"PropertyInt16\":32767,\"PropertyString\":\"Test String4\"}]}";
Assert.assertEquals(expectedResult, resultString);
}
+
+ @Test
+ public void entityMedia() throws Exception {
+ final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESMedia");
+ Entity entity = data.readAll(edmEntitySet).getEntities().get(0);
+ entity.setMediaETag("theMediaETag");
+ final String resultString = IOUtils.toString(serializer.entity(edmEntitySet, entity, null));
+ final String expectedResult = "{\"@odata.context\":\"$metadata#ESMedia/$entity\","
+ + "\"@odata.mediaEtag\":\"theMediaETag\",\"@odata.mediaContentType\":\"image/png\","
+ + "\"PropertyInt16\":1}";
+ Assert.assertEquals(expectedResult, resultString);
+ }
+
+ @Test
+ public void entitySetMedia() throws Exception {
+ final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESMedia");
+ final EntitySet entitySet = data.readAll(edmEntitySet);
+ final String resultString = IOUtils.toString(serializer.entitySet(edmEntitySet, entitySet, null));
+ final String expectedResult = "{\"@odata.context\":\"$metadata#ESMedia\",\"value\":["
+ + "{\"@odata.mediaContentType\":\"image/png\",\"PropertyInt16\":1},"
+ + "{\"@odata.mediaContentType\":\"image/bmp\",\"PropertyInt16\":2},"
+ + "{\"@odata.mediaContentType\":\"image/jpeg\",\"PropertyInt16\":3},"
+ + "{\"@odata.mediaContentType\":\"foo\",\"PropertyInt16\":4}]}";
+ Assert.assertEquals(expectedResult, resultString);
+ }
}