Repository: olingo-odata2 Updated Branches: refs/heads/master e2b2b191f -> efff5d910
[OLINGO-1304]ODATA V2.0 :Client serialization fails for keyAutoGeneration of type UUID Project: http://git-wip-us.apache.org/repos/asf/olingo-odata2/repo Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata2/commit/efff5d91 Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata2/tree/efff5d91 Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata2/diff/efff5d91 Branch: refs/heads/master Commit: efff5d910493143a8a962ac1fd67b1a91ac962c5 Parents: e2b2b19 Author: Archana Rai <[email protected]> Authored: Wed Oct 3 16:47:48 2018 +0530 Committer: Archana Rai <[email protected]> Committed: Wed Oct 3 16:47:48 2018 +0530 ---------------------------------------------------------------------- .../serializer/AtomEntryEntitySerializer.java | 2 +- .../ep/serializer/AtomEntrySerializerTest.java | 72 ++++++++++++++++++++ 2 files changed, 73 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/efff5d91/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 dddd058..50fe56f 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 @@ -603,7 +603,7 @@ public class AtomEntryEntitySerializer { } else if (edmType == BigDecimal.class) { return BigDecimal.valueOf(0.0); } else if (edmType == UUID.class) { - return UUID.fromString("0"); + return UUID.fromString("00000000-0000-0000-0000-000000000000"); } else if (edmType == Timestamp.class) { return new Timestamp(Calendar.getInstance().getTimeInMillis()); } else if (edmType == Calendar.class) { http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/efff5d91/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 f384bbc..4ae9985 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 @@ -34,6 +34,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.util.ArrayList; +import java.util.Arrays; import java.util.Calendar; import java.util.HashMap; import java.util.List; @@ -47,12 +48,17 @@ import javax.xml.stream.XMLStreamException; import org.apache.olingo.odata2.api.edm.Edm; import org.apache.olingo.odata2.api.edm.EdmConcurrencyMode; import org.apache.olingo.odata2.api.edm.EdmCustomizableFeedMappings; +import org.apache.olingo.odata2.api.edm.EdmEntityContainer; import org.apache.olingo.odata2.api.edm.EdmEntitySet; import org.apache.olingo.odata2.api.edm.EdmEntityType; +import org.apache.olingo.odata2.api.edm.EdmException; import org.apache.olingo.odata2.api.edm.EdmFacets; import org.apache.olingo.odata2.api.edm.EdmMapping; import org.apache.olingo.odata2.api.edm.EdmProperty; +import org.apache.olingo.odata2.api.edm.EdmSimpleTypeKind; +import org.apache.olingo.odata2.api.edm.EdmStructuralType; import org.apache.olingo.odata2.api.edm.EdmTargetPath; +import org.apache.olingo.odata2.api.edm.EdmTypeKind; import org.apache.olingo.odata2.api.edm.EdmTyped; import org.apache.olingo.odata2.api.ep.EntityProviderException; import org.apache.olingo.odata2.api.exception.ODataException; @@ -355,6 +361,72 @@ public class AtomEntrySerializerTest extends AbstractProviderTest { } + private static EdmEntityType createEntityTypeMock(final String name, final EdmSimpleTypeKind kind, + final String keyPropertyId) throws EdmException { + EdmEntityType entityType = mock(EdmEntityType.class); + when(entityType.getName()).thenReturn(name); + when(entityType.getNamespace()).thenReturn("RefScenario"); + + final EdmProperty keyProperty = createProperty(keyPropertyId, kind, entityType); + EdmFacets facets = mock(EdmFacets.class); + when(facets.getMaxLength()).thenReturn(null); + when(facets.isNullable()).thenReturn(false); + when(keyProperty.getFacets()).thenReturn(facets); + + when(entityType.getKind()).thenReturn(EdmTypeKind.ENTITY); + when(entityType.getPropertyNames()).thenReturn(Arrays.asList(keyPropertyId)); + when(entityType.getKeyPropertyNames()).thenReturn(Arrays.asList(keyPropertyId)); + when(entityType.getKeyProperties()).thenReturn(Arrays.asList(keyProperty)); + + return entityType; + } + + private static EdmProperty createProperty(final String name, final EdmSimpleTypeKind kind, + final EdmStructuralType entityType) throws EdmException { + EdmProperty property = mock(EdmProperty.class); + when(property.getType()).thenReturn(kind.getEdmSimpleTypeInstance()); + when(property.getName()).thenReturn(name); + when(entityType.getProperty(name)).thenReturn(property); + return property; + } + + private static EdmEntitySet createEntitySetMock(final EdmEntityContainer container, final String name, + final EdmSimpleTypeKind kind, final String keyPropertyId) throws EdmException { + final EdmEntityType entityType = createEntityTypeMock(name.substring(0, name.length() - 1), kind, keyPropertyId); + + EdmEntitySet entitySet = mock(EdmEntitySet.class); + when(entitySet.getName()).thenReturn(name); + when(entitySet.getEntityType()).thenReturn(entityType); + + when(entitySet.getEntityContainer()).thenReturn(container); + + when(container.getEntitySet(name)).thenReturn(entitySet); + + return entitySet; + } + + @Test + public void idGuidWithoutKey() throws Exception { + EdmEntityContainer defaultContainer = mock(EdmEntityContainer.class); + when(defaultContainer.isDefaultEntityContainer()).thenReturn(true); + final EdmEntitySet entitySet = + createEntitySetMock(defaultContainer, "Employer", EdmSimpleTypeKind.Guid, "EmployerId"); + + final EntitySerializerProperties properties = + EntitySerializerProperties.serviceRoot(BASE_URI).isKeyAutoGenerated(true) + .includeMetadata(true) + .build(); + + Entity localEmployeeData = new Entity(); + localEmployeeData.setWriteProperties(properties); + + AtomSerializerDeserializer ser = createAtomEntityProvider(); + ODataResponse response = + ser.writeEntry(entitySet, localEmployeeData); + String xmlString = verifyResponse(response); + assertXpathExists("/a:entry/a:link[@href=\"Employer(guid'00000000-0000-0000-0000-000000000000')\"]", xmlString); + } + @Test public void contentOnlyWithNavigationLink() throws Exception { EdmEntitySet entitySet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Employees");
