Repository: olingo-odata2 Updated Branches: refs/heads/master 2b6be00b3 -> 2db7d0a03
[OLINGO-1255]<id> is malformed when auto generation of key is enabled Project: http://git-wip-us.apache.org/repos/asf/olingo-odata2/repo Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata2/commit/2db7d0a0 Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata2/tree/2db7d0a0 Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata2/diff/2db7d0a0 Branch: refs/heads/master Commit: 2db7d0a0325a44fde7dee96d91992dc636b4204c Parents: 2b6be00 Author: Archana Rai <archana....@sap.com> Authored: Wed Apr 11 10:45:04 2018 +0530 Committer: Archana Rai <archana....@sap.com> Committed: Wed Apr 11 10:45:04 2018 +0530 ---------------------------------------------------------------------- .../serializer/AtomEntryEntitySerializer.java | 16 ++++----- .../ep/serializer/AtomEntrySerializerTest.java | 34 ++++++++++++++++++++ .../JsonEntryEntitySerializerTest.java | 2 +- 3 files changed, 42 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/2db7d0a0/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/ep/serializer/AtomEntryEntitySerializer.java ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/ep/serializer/AtomEntryEntitySerializer.java b/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/ep/serializer/AtomEntryEntitySerializer.java index 5881813..dddd058 100644 --- a/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/ep/serializer/AtomEntryEntitySerializer.java +++ b/odata2-lib/odata-client-core/src/main/java/org/apache/olingo/odata2/client/core/ep/serializer/AtomEntryEntitySerializer.java @@ -531,7 +531,7 @@ public class AtomEntryEntitySerializer { } sb.append(Encoder.encode(eia.getEntitySetName())); - String keyValue = createEntryKey(eia, data, isKeyAutoGenerated, isIdTag); + String keyValue = createEntryKey(eia, data, isKeyAutoGenerated); if (isIdTag && isKeyAutoGenerated && "".equals(keyValue) && keyValue.length() == 0) { sb.append(extension == null ? "" : ("/" + extension)); } else { @@ -542,7 +542,7 @@ public class AtomEntryEntitySerializer { } private static String createEntryKey(final EntityInfoAggregator entityInfo, final Map<String, Object> data, - boolean isKeyAutoGenerated, boolean isIdTag) + boolean isKeyAutoGenerated) throws EntityProviderException { final List<EntityPropertyInfo> keyPropertyInfos = entityInfo.getKeyPropertyInfos(); @@ -561,13 +561,11 @@ public class AtomEntryEntitySerializer { try { String keyValue = null; if (isKeyAutoGenerated && data.get(name) == null) { - if (isIdTag) { - keyValue = ""; - } else { - Object value = fetchDefaultValue(type.getDefaultType()); - keyValue = Encoder.encode(type.valueToString(value, EdmLiteralKind.URI, - keyPropertyInfo.getFacets())); - } + // Every time default values for the key is generated + // if it is not there and auto generation has to be done by the server + Object value = fetchDefaultValue(type.getDefaultType()); + keyValue = Encoder.encode(type.valueToString(value, EdmLiteralKind.URI, + keyPropertyInfo.getFacets())); } else { keyValue = Encoder.encode(type.valueToString(data.get(name), EdmLiteralKind.URI, keyPropertyInfo.getFacets())); http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/2db7d0a0/odata2-lib/odata-client-core/src/test/java/org/apache/olingo/odata2/client/core/ep/serializer/AtomEntrySerializerTest.java ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-client-core/src/test/java/org/apache/olingo/odata2/client/core/ep/serializer/AtomEntrySerializerTest.java b/odata2-lib/odata-client-core/src/test/java/org/apache/olingo/odata2/client/core/ep/serializer/AtomEntrySerializerTest.java index 74cab47..f384bbc 100644 --- a/odata2-lib/odata-client-core/src/test/java/org/apache/olingo/odata2/client/core/ep/serializer/AtomEntrySerializerTest.java +++ b/odata2-lib/odata-client-core/src/test/java/org/apache/olingo/odata2/client/core/ep/serializer/AtomEntrySerializerTest.java @@ -935,6 +935,40 @@ public class AtomEntrySerializerTest extends AbstractProviderTest { assertXpathEvaluatesTo(BASE_URI.toASCIIString() + "Container2.Photos(Id=1,Type='image%2Fpng')", "/a:entry/a:id/text()", xmlString); } + + @Test + public void serializeGenIds() throws IOException, XpathException, SAXException, XMLStreamException, + FactoryConfigurationError, ODataException { + AtomSerializerDeserializer ser = createAtomEntityProvider(); + EntitySerializerProperties props = + EntitySerializerProperties.serviceRoot( + BASE_URI).isKeyAutoGenerated(true).includeMetadata(true).build(); + Entity photo = new Entity(); + // photo.addProperty("Id", Integer.valueOf(1)); + photo.addProperty("Name", "Mona Lisa"); + photo.addProperty("Type", "image/png"); + photo + .addProperty( + "ImageUrl", + "http://www.mopo.de/image/view/2012/6/4/16548086,13385561,medRes,maxh,234,maxw,234," + + "Parodia_Mona_Lisa_Lego_Hamburger_Morgenpost.jpg"); + Entity imageData = new Entity(); + imageData.addProperty("Image", new byte[] { 1, 2, 3, 4 }); + imageData.addProperty("getImageType", "image/png"); + photo.addProperty("Image", imageData); + photo.addProperty("BinaryData", new byte[] { -1, -2, -3, -4 }); + + photo.setWriteProperties(props); + ODataResponse response = + ser.writeEntry(MockFacade.getMockEdm().getEntityContainer("Container2").getEntitySet("Photos"), photo); + String xmlString = verifyResponse(response); + + assertXpathExists("/a:entry", xmlString); + assertXpathEvaluatesTo(BASE_URI.toASCIIString(), "/a:entry/@xml:base", xmlString); + assertXpathExists("/a:entry/a:id", xmlString); + assertXpathEvaluatesTo(BASE_URI.toASCIIString() + "Container2.Photos(Id=0,Type='image%2Fpng')", + "/a:entry/a:id/text()", xmlString); + } @Test public void serializeProperties() throws IOException, XpathException, SAXException, XMLStreamException, http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/2db7d0a0/odata2-lib/odata-client-core/src/test/java/org/apache/olingo/odata2/client/core/ep/serializer/JsonEntryEntitySerializerTest.java ---------------------------------------------------------------------- diff --git a/odata2-lib/odata-client-core/src/test/java/org/apache/olingo/odata2/client/core/ep/serializer/JsonEntryEntitySerializerTest.java b/odata2-lib/odata-client-core/src/test/java/org/apache/olingo/odata2/client/core/ep/serializer/JsonEntryEntitySerializerTest.java index f7e0433..e3e06f0 100644 --- a/odata2-lib/odata-client-core/src/test/java/org/apache/olingo/odata2/client/core/ep/serializer/JsonEntryEntitySerializerTest.java +++ b/odata2-lib/odata-client-core/src/test/java/org/apache/olingo/odata2/client/core/ep/serializer/JsonEntryEntitySerializerTest.java @@ -829,7 +829,7 @@ public class JsonEntryEntitySerializerTest extends BaseTest { final String json = StringHelper.inputStreamToString((InputStream) response.getEntity()); assertNotNull(json); - assertEquals("{\"__metadata\":{\"id\":\"http://host:80/service/Rooms\"," + assertEquals("{\"__metadata\":{\"id\":\"http://host:80/service/Rooms('A')\"," + "\"uri\":\"http://host:80/service/Rooms('A')\",\"type\":\"RefScenario.Room\"}," + "\"Version\":1,\"nr_Building\":{\"Name\":\"Building1\"}}", json); }