Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/olingo-odata2.git
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonLinkEntityProducer.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonLinkEntityProducer.java
index 69a0c5a..9ddfddd 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonLinkEntityProducer.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonLinkEntityProducer.java
@@ -47,10 +47,14 @@
final String uri = (properties.getServiceRoot() == null ? "" : properties.getServiceRoot().toASCIIString())
+ AtomEntryEntityProducer.createSelfLink(entityInfo, data, null);
try {
- jsonStreamWriter.beginObject()
- .name(FormatJson.D);
+ if (!properties.isOmitJsonWrapper()) {
+ jsonStreamWriter.beginObject()
+ .name(FormatJson.D);
+ }
appendUri(jsonStreamWriter, uri);
- jsonStreamWriter.endObject();
+ if (!properties.isOmitJsonWrapper()) {
+ jsonStreamWriter.endObject();
+ }
} catch (final IOException e) {
throw new EntityProviderException(EntityProviderException.EXCEPTION_OCCURRED.addContent(e.getClass()
.getSimpleName()), e);
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonLinksEntityProducer.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonLinksEntityProducer.java
index a3a5e79..858456c 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonLinksEntityProducer.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonLinksEntityProducer.java
@@ -47,8 +47,10 @@
JsonStreamWriter jsonStreamWriter = new JsonStreamWriter(writer);
try {
- jsonStreamWriter.beginObject()
- .name(FormatJson.D);
+ if (!properties.isOmitJsonWrapper()) {
+ jsonStreamWriter.beginObject()
+ .name(FormatJson.D);
+ }
if (properties.getInlineCountType() == InlineCount.ALLPAGES) {
final int inlineCount = properties.getInlineCount() == null ? 0 : properties.getInlineCount();
@@ -75,8 +77,9 @@
if (properties.getInlineCountType() == InlineCount.ALLPAGES) {
jsonStreamWriter.endObject();
}
-
- jsonStreamWriter.endObject();
+ if (!properties.isOmitJsonWrapper()) {
+ jsonStreamWriter.endObject();
+ }
} catch (final IOException e) {
throw new EntityProviderException(EntityProviderException.EXCEPTION_OCCURRED.addContent(e.getClass()
.getSimpleName()), e);
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonLinkEntityProducerTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonLinkEntityProducerTest.java
index b23ac7b..91785b5 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonLinkEntityProducerTest.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonLinkEntityProducerTest.java
@@ -44,6 +44,23 @@
EntityProviderWriteProperties.serviceRoot(URI.create(BASE_URI)).build();
@Test
+ public void omitJsonWrapperOnLink() throws Exception {
+ final EdmEntitySet entitySet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Employees");
+ Map<String, Object> employeeData = new HashMap<String, Object>();
+ employeeData.put("EmployeeId", "1");
+
+ EntityProviderWriteProperties properties =
+ EntityProviderWriteProperties.fromProperties(DEFAULT_PROPERTIES).omitJsonWrapper(true).build();
+ final ODataResponse response = new JsonEntityProvider().writeLink(entitySet, employeeData, properties);
+ assertNotNull(response);
+ assertNotNull(response.getEntity());
+
+ final String json = StringHelper.inputStreamToString((InputStream) response.getEntity());
+ assertNotNull(json);
+ assertEquals("{\"uri\":\"" + BASE_URI + "Employees('1')\"}", json);
+ }
+
+ @Test
public void serializeEmployeeLink() throws Exception {
final EdmEntitySet entitySet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Employees");
Map<String, Object> employeeData = new HashMap<String, Object>();
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonLinksEntityProducerTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonLinksEntityProducerTest.java
index bef9ecb..2365d29 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonLinksEntityProducerTest.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonLinksEntityProducerTest.java
@@ -47,6 +47,82 @@
EntityProviderWriteProperties.serviceRoot(URI.create(BASE_URI)).build();
@Test
+ public void omitJsonWrapperSingleLink() throws Exception {
+ final EdmEntitySet entitySet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Employees");
+ Map<String, Object> employeeData = new HashMap<String, Object>();
+ employeeData.put("EmployeeId", "1");
+ ArrayList<Map<String, Object>> employeesData = new ArrayList<Map<String, Object>>();
+ employeesData.add(employeeData);
+
+ EntityProviderWriteProperties properties =
+ EntityProviderWriteProperties.fromProperties(DEFAULT_PROPERTIES).omitJsonWrapper(true).build();
+ final ODataResponse response = new JsonEntityProvider().writeLinks(entitySet, employeesData, properties);
+ assertNotNull(response);
+ assertNotNull(response.getEntity());
+ assertNull("EntitypProvider must not set content header", response.getContentHeader());
+
+ final String json = StringHelper.inputStreamToString((InputStream) response.getEntity());
+ assertNotNull(json);
+ assertEquals("[{\"uri\":\"" + BASE_URI + "Employees('1')\"}]", json);
+ }
+
+ @Test
+ public void omitJsonWrapperSingleLinks() throws Exception {
+ final EdmEntitySet entitySet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Employees");
+ Map<String, Object> employee1 = new HashMap<String, Object>();
+ employee1.put("EmployeeId", "1");
+ Map<String, Object> employee2 = new HashMap<String, Object>();
+ employee2.put("EmployeeId", "2");
+ Map<String, Object> employee3 = new HashMap<String, Object>();
+ employee3.put("EmployeeId", "3");
+ ArrayList<Map<String, Object>> employeesData = new ArrayList<Map<String, Object>>();
+ employeesData.add(employee1);
+ employeesData.add(employee2);
+ employeesData.add(employee3);
+
+ EntityProviderWriteProperties properties =
+ EntityProviderWriteProperties.fromProperties(DEFAULT_PROPERTIES).omitJsonWrapper(true).build();
+ final ODataResponse response = new JsonEntityProvider().writeLinks(entitySet, employeesData, properties);
+ assertNotNull(response);
+ assertNotNull(response.getEntity());
+ assertNull("EntitypProvider must not set content header", response.getContentHeader());
+
+ final String json = StringHelper.inputStreamToString((InputStream) response.getEntity());
+ assertNotNull(json);
+ assertEquals("[{\"uri\":\"" + BASE_URI + "Employees('1')\"},"
+ + "{\"uri\":\"" + BASE_URI + "Employees('2')\"},"
+ + "{\"uri\":\"" + BASE_URI + "Employees('3')\"}]",
+ json);
+ }
+
+ @Test
+ public void serializeLinksAndInlineCountWithOmitJsonWrapper() throws Exception {
+ final EdmEntitySet entitySet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Employees");
+ Map<String, Object> employee1 = new HashMap<String, Object>();
+ employee1.put("EmployeeId", "1");
+ Map<String, Object> employee2 = new HashMap<String, Object>();
+ employee2.put("EmployeeId", "2");
+ ArrayList<Map<String, Object>> employeesData = new ArrayList<Map<String, Object>>();
+ employeesData.add(employee1);
+ employeesData.add(employee2);
+
+ EntityProviderWriteProperties properties =
+ EntityProviderWriteProperties.fromProperties(DEFAULT_PROPERTIES).omitJsonWrapper(true).inlineCountType(
+ InlineCount.ALLPAGES).inlineCount(42).build();
+ final ODataResponse response = new JsonEntityProvider().writeLinks(entitySet, employeesData, properties);
+ assertNotNull(response);
+ assertNotNull(response.getEntity());
+ assertNull("EntitypProvider must not set content header", response.getContentHeader());
+
+ final String json = StringHelper.inputStreamToString((InputStream) response.getEntity());
+ assertNotNull(json);
+ assertEquals("{\"__count\":\"42\",\"results\":["
+ + "{\"uri\":\"" + BASE_URI + "Employees('1')\"},"
+ + "{\"uri\":\"" + BASE_URI + "Employees('2')\"}]}",
+ json);
+ }
+
+ @Test
public void serializeEmployeeLink() throws Exception {
final EdmEntitySet entitySet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Employees");
Map<String, Object> employeeData = new HashMap<String, Object>();