[ 
https://issues.apache.org/jira/browse/OLINGO-1392?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Vladislav Glinskiy updated OLINGO-1392:
---------------------------------------
    Description: 
Olingo V4 client reports value type for `Edm.GeometryCollection` and 
`Edm.GeographyCollection` OData types as `ValueType.COMPLEX` instead of 
expected `ValueType.GEOSPATIAL`.

Debugging shows that the client uses 
[JsonDeserializer|https://github.com/apache/olingo-odata4/blob/master/lib/client-core/src/main/java/org/apache/olingo/client/core/serialization/JsonDeserializer.java#L64]
 which does not work correctly with values of `Edm.GeometryCollection` and 
`Edm.GeographyCollection` OData types, such as:
{code:java}
{
  "GeometryCollectionField":{
    "type":"GeometryCollection",
    "geometries":[
      {
        "type":"Point",
        "coordinates":[
          1.0,
          1.0
        ],
        "crs":{
          "type":"name",
          "properties":{
            "name":"EPSG:4326"
          }
        }
      }
    ],
    "crs":{
      "type":"name",
      "properties":{
        "name":"EPSG:4326"
      }
    }
  }
}
{code}
[I created a unit test to reproduce the 
issue|https://github.com/vladglinskiy/olingo-odata4/commit/4613e2a4f266bf99f56dd4cac2d58df0c03efa1d#diff-c2bf3c9859b1f7113d0296bc1b6dcb5dR58]:
{code:java}
  @Test
  public void toEntityWithGeometryCollectionField() throws Exception {

    GeospatialCollection collection = new 
GeospatialCollection(Geospatial.Dimension.GEOMETRY, SRID.valueOf("4326"),
                                                               
Collections.<Geospatial>singletonList(POINT));
    ByteArrayOutputStream output = new ByteArrayOutputStream();
    OutputStreamWriter writer = new OutputStreamWriter(output, Constants.UTF8);

    Entity entity = new Entity();
    final Property propertyResource = new Property();
    propertyResource.setName("GeometryCollectionField");
    propertyResource.setValue(ValueType.GEOSPATIAL, collection);
    entity.getProperties().add(propertyResource);

    SERIALIZER.write(writer, new ResWrap(null, null, entity));
    System.out.println(new String(output.toByteArray()));

    ResWrap<Entity> entityResWrap = DESERIALIZER.toEntity(new 
ByteArrayInputStream(output.toByteArray()));
    Property geometryCollection = 
entityResWrap.getPayload().getProperty("GeometryCollectionField");
    Assert.assertNotNull(geometryCollection);

    ValueType actualValueType = geometryCollection.getValueType();
    Assert.assertEquals("Unexpected GeospatialCollection type", 
ValueType.GEOSPATIAL, actualValueType);
    Assert.assertTrue(geometryCollection.asGeospatial() instanceof 
GeospatialCollection);
  }
{code}
Please, note that the deserializer works fine for GeometryPoint type. 
[toEntityWithPointField 
test|https://github.com/vladglinskiy/olingo-odata4/commit/4613e2a4f266bf99f56dd4cac2d58df0c03efa1d#diff-c2bf3c9859b1f7113d0296bc1b6dcb5dR35]
 demonstrates that.

*Steps to reproduce:*
 1. git clone [https://github.com/vladglinskiy/olingo-odata4.git]
 2. mvn clean test -pl lib/client-core/ -Dtest=JsonDeserializerTest

the test will fail with the following error:
{code:java}
-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running org.apache.olingo.client.core.serialization.JsonDeserializerTest
Tests run: 2, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.214 sec <<< 
FAILURE! - in org.apache.olingo.client.core.serialization.JsonDeserializerTest
toEntityWithGeometryCollectionField(org.apache.olingo.client.core.serialization.JsonDeserializerTest)
  Time elapsed: 0.181 sec  <<< FAILURE!
java.lang.AssertionError: Unexpected GeospatialCollection type 
expected:<GEOSPATIAL> but was:<COMPLEX>
        at org.junit.Assert.fail(Assert.java:88)
        at org.junit.Assert.failNotEquals(Assert.java:743)
        at org.junit.Assert.assertEquals(Assert.java:118)
        at 
org.apache.olingo.client.core.serialization.JsonDeserializerTest.toEntityWithGeometryCollectionField(JsonDeserializerTest.java:104)


Results :

Failed tests: 
  JsonDeserializerTest.toEntityWithGeometryCollectionField:104 Unexpected 
GeospatialCollection type expected:<GEOSPATIAL> but was:<COMPLEX>

{code}

  was:
Olingo V4 client reports value type for `Edm.GeometryCollection` and 
`Edm.GeographyCollection` OData types as `ValueType.COMPLEX` instead of 
expected `ValueType.GEOSPATIAL`. 

Debugging shows that the client uses 
[JsonDeserializer|https://github.com/apache/olingo-odata4/blob/master/lib/client-core/src/main/java/org/apache/olingo/client/core/serialization/JsonDeserializer.java#L64]
 which does not work correctly with values of `Edm.GeometryCollection` and 
`Edm.GeographyCollection` OData types, such as:

{code}
{
  "GeometryCollectionField":{
    "type":"GeometryCollection",
    "geometries":[
      {
        "type":"Point",
        "coordinates":[
          1.0,
          1.0
        ],
        "crs":{
          "type":"name",
          "properties":{
            "name":"EPSG:4326"
          }
        }
      }
    ],
    "crs":{
      "type":"name",
      "properties":{
        "name":"EPSG:4326"
      }
    }
  }
}
{code}

[I created a unit test to reproduce the 
issue|https://github.com/vladglinskiy/olingo-odata4/commit/4613e2a4f266bf99f56dd4cac2d58df0c03efa1d#diff-c2bf3c9859b1f7113d0296bc1b6dcb5dR58]:

{code:java}
  @Test
  public void toEntityWithGeometryCollectionField() throws Exception {

    GeospatialCollection collection = new 
GeospatialCollection(Geospatial.Dimension.GEOMETRY, SRID.valueOf("4326"),
                                                               
Collections.<Geospatial>singletonList(POINT));
    ByteArrayOutputStream output = new ByteArrayOutputStream();
    OutputStreamWriter writer = new OutputStreamWriter(output, Constants.UTF8);

    Entity entity = new Entity();
    final Property propertyResource = new Property();
    propertyResource.setName("GeometryCollectionField");
    propertyResource.setValue(ValueType.GEOSPATIAL, collection);
    entity.getProperties().add(propertyResource);

    SERIALIZER.write(writer, new ResWrap(null, null, entity));
    System.out.println(new String(output.toByteArray()));

    ResWrap<Entity> entityResWrap = DESERIALIZER.toEntity(new 
ByteArrayInputStream(output.toByteArray()));
    Property geometryCollection = 
entityResWrap.getPayload().getProperty("GeometryCollectionField");
    Assert.assertNotNull(geometryCollection);

    ValueType actualValueType = geometryCollection.getValueType();
    Assert.assertEquals("Unexpected GeospatialCollection type", 
ValueType.GEOSPATIAL, actualValueType);
    Assert.assertTrue(geometryCollection.asGeospatial() instanceof 
GeospatialCollection);
  }
{code}

Please, note that the deserializer works fine with GeometryPoint type. 
[toEntityWithPointField 
test|https://github.com/vladglinskiy/olingo-odata4/commit/4613e2a4f266bf99f56dd4cac2d58df0c03efa1d#diff-c2bf3c9859b1f7113d0296bc1b6dcb5dR35]
 demonstrates that. 

*Steps to reproduce:*
1. git clone https://github.com/vladglinskiy/olingo-odata4.git
2. mvn clean test -pl lib/client-core/ -Dtest=JsonDeserializerTest

the test will fail with the following error:

{code}
-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running org.apache.olingo.client.core.serialization.JsonDeserializerTest
Tests run: 2, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.214 sec <<< 
FAILURE! - in org.apache.olingo.client.core.serialization.JsonDeserializerTest
toEntityWithGeometryCollectionField(org.apache.olingo.client.core.serialization.JsonDeserializerTest)
  Time elapsed: 0.181 sec  <<< FAILURE!
java.lang.AssertionError: Unexpected GeospatialCollection type 
expected:<GEOSPATIAL> but was:<COMPLEX>
        at org.junit.Assert.fail(Assert.java:88)
        at org.junit.Assert.failNotEquals(Assert.java:743)
        at org.junit.Assert.assertEquals(Assert.java:118)
        at 
org.apache.olingo.client.core.serialization.JsonDeserializerTest.toEntityWithGeometryCollectionField(JsonDeserializerTest.java:104)


Results :

Failed tests: 
  JsonDeserializerTest.toEntityWithGeometryCollectionField:104 Unexpected 
GeospatialCollection type expected:<GEOSPATIAL> but was:<COMPLEX>

{code}




> Olingo V4 client reports invalid value type for `Edm.GeometryCollection` and 
> `Edm.GeographyCollection` JSON values
> ------------------------------------------------------------------------------------------------------------------
>
>                 Key: OLINGO-1392
>                 URL: https://issues.apache.org/jira/browse/OLINGO-1392
>             Project: Olingo
>          Issue Type: Bug
>          Components: odata4-client
>            Reporter: Vladislav Glinskiy
>            Priority: Major
>             Fix For: (Java) V4 4.7.0
>
>
> Olingo V4 client reports value type for `Edm.GeometryCollection` and 
> `Edm.GeographyCollection` OData types as `ValueType.COMPLEX` instead of 
> expected `ValueType.GEOSPATIAL`.
> Debugging shows that the client uses 
> [JsonDeserializer|https://github.com/apache/olingo-odata4/blob/master/lib/client-core/src/main/java/org/apache/olingo/client/core/serialization/JsonDeserializer.java#L64]
>  which does not work correctly with values of `Edm.GeometryCollection` and 
> `Edm.GeographyCollection` OData types, such as:
> {code:java}
> {
>   "GeometryCollectionField":{
>     "type":"GeometryCollection",
>     "geometries":[
>       {
>         "type":"Point",
>         "coordinates":[
>           1.0,
>           1.0
>         ],
>         "crs":{
>           "type":"name",
>           "properties":{
>             "name":"EPSG:4326"
>           }
>         }
>       }
>     ],
>     "crs":{
>       "type":"name",
>       "properties":{
>         "name":"EPSG:4326"
>       }
>     }
>   }
> }
> {code}
> [I created a unit test to reproduce the 
> issue|https://github.com/vladglinskiy/olingo-odata4/commit/4613e2a4f266bf99f56dd4cac2d58df0c03efa1d#diff-c2bf3c9859b1f7113d0296bc1b6dcb5dR58]:
> {code:java}
>   @Test
>   public void toEntityWithGeometryCollectionField() throws Exception {
>     GeospatialCollection collection = new 
> GeospatialCollection(Geospatial.Dimension.GEOMETRY, SRID.valueOf("4326"),
>                                                                
> Collections.<Geospatial>singletonList(POINT));
>     ByteArrayOutputStream output = new ByteArrayOutputStream();
>     OutputStreamWriter writer = new OutputStreamWriter(output, 
> Constants.UTF8);
>     Entity entity = new Entity();
>     final Property propertyResource = new Property();
>     propertyResource.setName("GeometryCollectionField");
>     propertyResource.setValue(ValueType.GEOSPATIAL, collection);
>     entity.getProperties().add(propertyResource);
>     SERIALIZER.write(writer, new ResWrap(null, null, entity));
>     System.out.println(new String(output.toByteArray()));
>     ResWrap<Entity> entityResWrap = DESERIALIZER.toEntity(new 
> ByteArrayInputStream(output.toByteArray()));
>     Property geometryCollection = 
> entityResWrap.getPayload().getProperty("GeometryCollectionField");
>     Assert.assertNotNull(geometryCollection);
>     ValueType actualValueType = geometryCollection.getValueType();
>     Assert.assertEquals("Unexpected GeospatialCollection type", 
> ValueType.GEOSPATIAL, actualValueType);
>     Assert.assertTrue(geometryCollection.asGeospatial() instanceof 
> GeospatialCollection);
>   }
> {code}
> Please, note that the deserializer works fine for GeometryPoint type. 
> [toEntityWithPointField 
> test|https://github.com/vladglinskiy/olingo-odata4/commit/4613e2a4f266bf99f56dd4cac2d58df0c03efa1d#diff-c2bf3c9859b1f7113d0296bc1b6dcb5dR35]
>  demonstrates that.
> *Steps to reproduce:*
>  1. git clone [https://github.com/vladglinskiy/olingo-odata4.git]
>  2. mvn clean test -pl lib/client-core/ -Dtest=JsonDeserializerTest
> the test will fail with the following error:
> {code:java}
> -------------------------------------------------------
>  T E S T S
> -------------------------------------------------------
> Running org.apache.olingo.client.core.serialization.JsonDeserializerTest
> Tests run: 2, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.214 sec <<< 
> FAILURE! - in org.apache.olingo.client.core.serialization.JsonDeserializerTest
> toEntityWithGeometryCollectionField(org.apache.olingo.client.core.serialization.JsonDeserializerTest)
>   Time elapsed: 0.181 sec  <<< FAILURE!
> java.lang.AssertionError: Unexpected GeospatialCollection type 
> expected:<GEOSPATIAL> but was:<COMPLEX>
>       at org.junit.Assert.fail(Assert.java:88)
>       at org.junit.Assert.failNotEquals(Assert.java:743)
>       at org.junit.Assert.assertEquals(Assert.java:118)
>       at 
> org.apache.olingo.client.core.serialization.JsonDeserializerTest.toEntityWithGeometryCollectionField(JsonDeserializerTest.java:104)
> Results :
> Failed tests: 
>   JsonDeserializerTest.toEntityWithGeometryCollectionField:104 Unexpected 
> GeospatialCollection type expected:<GEOSPATIAL> but was:<COMPLEX>
> {code}



--
This message was sent by Atlassian Jira
(v8.3.2#803003)

Reply via email to