You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by ar...@apache.org on 2018/04/11 05:15:13 UTC

olingo-odata2 git commit: [OLINGO-1255] is malformed when auto generation of key is enabled

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 <ar...@sap.com>
Authored: Wed Apr 11 10:45:04 2018 +0530
Committer: Archana Rai <ar...@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);
   }