[OLINGO-1032] Fix for function import return entity having multiplicity true was giving error.
Signed-off-by: mibo <mibo@apache.org>
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/JsonEntityProvider.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/JsonEntityProvider.java
index c83b128..20a9f9b 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/JsonEntityProvider.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/JsonEntityProvider.java
@@ -326,7 +326,9 @@
final EntityProviderReadProperties properties) throws EntityProviderException {
try {
if (functionImport.getReturnType().getType().getKind() == EdmTypeKind.ENTITY) {
- return new JsonEntityConsumer().readEntry(functionImport.getEntitySet(), content, properties);
+ return functionImport.getReturnType().getMultiplicity() == EdmMultiplicity.MANY
+ ? new JsonEntityConsumer().readFeed(functionImport.getEntitySet(), content, properties)
+ : new JsonEntityConsumer().readEntry(functionImport.getEntitySet(), content, properties);
} else {
final EntityPropertyInfo info = EntityInfoAggregator.create(functionImport);
return functionImport.getReturnType().getMultiplicity() == EdmMultiplicity.MANY ?
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/ProviderFacadeImplTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/ProviderFacadeImplTest.java
index 40e5e0b..c51c6de 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/ProviderFacadeImplTest.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/ProviderFacadeImplTest.java
@@ -35,8 +35,6 @@
import java.util.Locale;
import java.util.Map;
-import junit.framework.Assert;
-
import org.apache.olingo.odata2.api.commons.HttpContentType;
import org.apache.olingo.odata2.api.commons.HttpStatusCodes;
import org.apache.olingo.odata2.api.edm.Edm;
@@ -60,6 +58,8 @@
import org.apache.olingo.odata2.testutil.mock.MockFacade;
import org.junit.Test;
+import junit.framework.Assert;
+
/**
*
*/
@@ -227,6 +227,68 @@
}
@Test
+ public void readMultipleEntityFunctionImport() throws Exception {
+ final EdmFunctionImport functionImport = MockFacade.getMockEdm().getDefaultEntityContainer()
+ .getFunctionImport("EmployeeSearch");
+ InputStream content = new ByteArrayInputStream(
+ ("{\"d\": {"
+ + "\"results\": [{"
+ + "\"__metadata\": {"
+ + "\"type\": \"RefScenario.Employee\","
+ + "\"content_type\": \"image/jpeg\","
+ + "\"media_src\":\"http://localhost:19000/abc/FunctionImportJsonTest/Employees('3')/$value\","
+ + "\"edit_media\":\"http://localhost:19000/abc/FunctionImportJsonTest/Employees('3')/$value\""
+ + "},"
+ + "\"EmployeeId\": \"3\","
+ + "\"EmployeeName\": \"Jonathan Smith\","
+ + "\"ManagerId\": \"1\","
+ + "\"RoomId\": \"2\","
+ + "\"TeamId\": \"1\","
+ + "\"Location\": {"
+ + "\"__metadata\": {"
+ + "\"type\": \"RefScenario.c_Location\""
+ + "},"
+ + "\"City\": {"
+ + "\"__metadata\": {"
+ + "\"type\": \"RefScenario.c_City\""
+ + "},"
+ + "\"PostalCode\": \"69190\","
+ + "\"CityName\": \"Walldorf\""
+ + "},"
+ + "\"Country\": \"Germany\""
+ + "},"
+ + "\"Age\": 56,"
+ + "\"EntryDate\": null,"
+ + "\"ImageUrl\": \"Employees('3')/$value\","
+ + "\"ne_Manager\": {"
+ + "\"__deferred\": {"
+ + "\"uri\": \"http://localhost:19000/abc/FunctionImportJsonTest/Employees('3')/ne_Manager\""
+ + "}"
+ + "},"
+ + "\"ne_Team\": {"
+ + "\"__deferred\": {"
+ + "\"uri\": \"http://localhost:19000/abc/FunctionImportJsonTest/Employees('3')/ne_Team\""
+ + "}"
+ + "},"
+ + "\"ne_Room\": {"
+ + "\"__deferred\": {"
+ + "\"uri\": \"http://localhost:19000/abc/FunctionImportJsonTest/Employees('3')/ne_Room\""
+ + "}"
+ + "}"
+ + "}]"
+ + "}"
+ + "}").getBytes("UTF-8"));
+ final Object result = new ProviderFacadeImpl().readFunctionImport(HttpContentType.APPLICATION_JSON,
+ functionImport, content, EntityProviderReadProperties.init().build());
+ ODataDeltaFeed feed = (ODataDeltaFeed) result;
+ List<ODataEntry> entries = feed.getEntries();
+ int size = entries.size();
+ assertEquals(1, size);
+ String id = (String) entries.get(0).getProperties().get("EmployeeId");
+ assertEquals("3", id);
+ }
+
+ @Test
public void readLink() throws Exception {
final EdmEntitySet entitySet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Rooms");
InputStream content = new ByteArrayInputStream("{\"d\":{\"uri\":\"http://somelink\"}}".getBytes("UTF-8"));