[OLINGO-1132]Type information is lost when primitive properties with null value is updated

This commit is contained in:
ramya vasanth 2017-06-08 17:40:55 +05:30
parent 66ea810b0f
commit ce076387c3
5 changed files with 131 additions and 6 deletions

View File

@ -211,7 +211,7 @@ public final class AsyncSupportITCase extends AbstractParamTecSvcITCase {
assertShortOrInt(42, property1.getPrimitiveValue().toValue()); assertShortOrInt(42, property1.getPrimitiveValue().toValue());
final ClientProperty property2 = createdEntity.getProperty("PropertyDecimal"); final ClientProperty property2 = createdEntity.getProperty("PropertyDecimal");
assertNotNull(property2); assertNotNull(property2);
assertNull(property2.getPrimitiveValue()); assertNull(property2.getPrimitiveValue().toValue());
} }
@Test @Test

View File

@ -412,7 +412,7 @@ public class BasicITCase extends AbstractParamTecSvcITCase {
property2.getPrimitiveValue().toValue()); property2.getPrimitiveValue().toValue());
final ClientProperty property3 = entity.getProperty(PROPERTY_INT64); final ClientProperty property3 = entity.getProperty(PROPERTY_INT64);
assertNotNull(property3); assertNotNull(property3);
assertNull(property3.getPrimitiveValue()); assertNull(property3.getPrimitiveValue().toValue());
final ClientProperty property4 = entity.getProperty("PropertyDuration"); final ClientProperty property4 = entity.getProperty("PropertyDuration");
assertNotNull(property4); assertNotNull(property4);
assertEquals(isJson() ? "PT6S" : BigDecimal.valueOf(6), property4.getPrimitiveValue().toValue()); assertEquals(isJson() ? "PT6S" : BigDecimal.valueOf(6), property4.getPrimitiveValue().toValue());
@ -439,7 +439,7 @@ public class BasicITCase extends AbstractParamTecSvcITCase {
assertShortOrInt(42, property1.getPrimitiveValue().toValue()); assertShortOrInt(42, property1.getPrimitiveValue().toValue());
final ClientProperty property2 = entity.getProperty(PROPERTY_DECIMAL); final ClientProperty property2 = entity.getProperty(PROPERTY_DECIMAL);
assertNotNull(property2); assertNotNull(property2);
assertNull(property2.getPrimitiveValue()); assertNull(property2.getPrimitiveValue().toValue());
} }
@Test @Test
@ -504,7 +504,7 @@ public class BasicITCase extends AbstractParamTecSvcITCase {
assertNotNull(complex); assertNotNull(complex);
final ClientProperty property = complex.get(PROPERTY_INT16); final ClientProperty property = complex.get(PROPERTY_INT16);
assertNotNull(property); assertNotNull(property);
assertNull(property.getPrimitiveValue()); assertNull(property.getPrimitiveValue().toValue());
} }
@Test @Test
@ -534,7 +534,7 @@ public class BasicITCase extends AbstractParamTecSvcITCase {
assertShortOrInt(42, property1.getPrimitiveValue().toValue()); assertShortOrInt(42, property1.getPrimitiveValue().toValue());
final ClientProperty property2 = createdEntity.getProperty(PROPERTY_DECIMAL); final ClientProperty property2 = createdEntity.getProperty(PROPERTY_DECIMAL);
assertNotNull(property2); assertNotNull(property2);
assertNull(property2.getPrimitiveValue()); assertNull(property2.getPrimitiveValue().toValue());
} }
@Test @Test

View File

@ -45,7 +45,7 @@ public class ClientValuableImpl implements ClientValuable {
@Override @Override
public boolean hasPrimitiveValue() { public boolean hasPrimitiveValue() {
return !hasNullValue() && value.isPrimitive(); return value != null && value.isPrimitive();
} }
@Override @Override

View File

@ -21,6 +21,7 @@ package org.apache.olingo.client.core;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
import java.io.InputStream; import java.io.InputStream;
@ -40,6 +41,8 @@ import org.apache.olingo.client.api.domain.ClientProperty;
import org.apache.olingo.client.api.domain.ClientValuable; import org.apache.olingo.client.api.domain.ClientValuable;
import org.apache.olingo.client.api.domain.ClientValue; import org.apache.olingo.client.api.domain.ClientValue;
import org.apache.olingo.commons.api.data.Entity; import org.apache.olingo.commons.api.data.Entity;
import org.apache.olingo.commons.api.data.Property;
import org.apache.olingo.commons.api.data.ValueType;
import org.apache.olingo.commons.api.edm.Edm; import org.apache.olingo.commons.api.edm.Edm;
import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException; import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
import org.apache.olingo.commons.api.format.ContentType; import org.apache.olingo.commons.api.format.ContentType;
@ -381,4 +384,21 @@ public class EntityTest extends AbstractTest {
public void derivedFromFullJSON() throws Exception { public void derivedFromFullJSON() throws Exception {
derived(client, ContentType.JSON_FULL_METADATA); derived(client, ContentType.JSON_FULL_METADATA);
} }
@Test
public void testNullValuesForPrimitiveTypes() throws Exception {
final InputStream input = getClass().getResourceAsStream("ESTwoKeyNav.json");
final ClientEntity entity = client.getBinder().getODataEntity(
client.getDeserializer(ContentType.APPLICATION_JSON).toEntity(input));
assertNotNull(entity);
Entity entity1 = client.getBinder().getEntity(entity);
assertNotNull(entity1);
Property property = entity1.getProperty("PropertyComp").asComplex().getValue().
get(1).asComplex().getValue().get(2);
assertEquals(property.getType(), "Edm.Boolean");
assertNull(property.getValue());
assertTrue(property.isPrimitive());
assertEquals(property.getValueType(), ValueType.PRIMITIVE);
}
} }

View File

@ -0,0 +1,105 @@
{
"@odata.context": "$metadata#ESTwoKeyNav/$entity",
"@odata.metadataEtag": "W/\"10fc9ac1-4eec-4bfa-b678-45f606e48601\"",
"@odata.type": "#olingo.odata.test1.ETTwoKeyNav",
"@odata.id": "ESTwoKeyNav(PropertyInt16=1,PropertyString='1')",
"PropertyInt16@odata.type": "#Int16",
"PropertyInt16": 1,
"PropertyString": "1",
"PropertyComp": {
"@odata.type": "#olingo.odata.test1.CTPrimComp",
"PropertyInt16@odata.type": "#Int16",
"PropertyInt16": 11,
"PropertyComp": {
"@odata.type": "#olingo.odata.test1.CTAllPrim",
"PropertyString": "StringValue",
"PropertyBinary@odata.type": "#Binary",
"PropertyBinary": "ASNFZ4mrze8=",
"PropertyBoolean@odata.type": "#Boolean",
"PropertyBoolean": null,
"PropertyByte@odata.type": "#Byte",
"PropertyByte": 255,
"PropertyDate@odata.type": "#Date",
"PropertyDate": "2012-12-03",
"PropertyDateTimeOffset@odata.type": "#DateTimeOffset",
"PropertyDateTimeOffset": null,
"PropertyDecimal@odata.type": "#Decimal",
"PropertyDecimal": null,
"PropertySingle@odata.type": "#Single",
"PropertySingle": 179000,
"PropertyDouble": -1790000,
"PropertyDuration@odata.type": "#Duration",
"PropertyDuration": "PT6S",
"PropertyGuid@odata.type": "#Guid",
"PropertyGuid": "01234567-89ab-cdef-0123-456789abcdef",
"PropertyInt16@odata.type": "#Int16",
"PropertyInt16": 32767,
"PropertyInt32@odata.type": "#Int32",
"PropertyInt32": 2147483647,
"PropertyInt64@odata.type": "#Int64",
"PropertyInt64": 92233775807,
"PropertySByte@odata.type": "#SByte",
"PropertySByte": 127,
"PropertyTimeOfDay@odata.type": "#TimeOfDay",
"PropertyTimeOfDay": "21:05:59"
}
},
"PropertyCompNav": {
"@odata.type": "#olingo.odata.test1.CTBasePrimCompNav",
"PropertyInt16@odata.type": "#Int16",
"PropertyInt16": 1,
"PropertyComp": {
"@odata.type": "#olingo.odata.test1.CTAllPrim",
"PropertyString": "First Resource - positive values",
"PropertyBinary@odata.type": "#Binary",
"PropertyBinary": "ASNFZ4mrze8=",
"PropertyBoolean": true,
"PropertyByte@odata.type": "#Byte",
"PropertyByte": 255,
"PropertyDate@odata.type": "#Date",
"PropertyDate": "2012-12-03",
"PropertyDateTimeOffset@odata.type": "#DateTimeOffset",
"PropertyDateTimeOffset": "2012-12-03T07:16:23Z",
"PropertyDecimal@odata.type": "#Decimal",
"PropertyDecimal": 34,
"PropertySingle@odata.type": "#Single",
"PropertySingle": 170000000,
"PropertyDouble": -179000000,
"PropertyDuration@odata.type": "#Duration",
"PropertyDuration": "PT6S",
"PropertyGuid@odata.type": "#Guid",
"PropertyGuid": "01234567-89ab-cdef-0123-456789abcdef",
"PropertyInt16@odata.type": "#Int16",
"PropertyInt16": 32767,
"PropertyInt32@odata.type": "#Int32",
"PropertyInt32": 2147483647,
"PropertyInt64@odata.type": "#Int64",
"PropertyInt64": 92233725807,
"PropertySByte@odata.type": "#SByte",
"PropertySByte": 127,
"PropertyTimeOfDay@odata.type": "#TimeOfDay",
"PropertyTimeOfDay": "21:05:59"
}
},
"CollPropertyComp@odata.type": "#Collection(olingo.odata.test1.CTPrimComp)",
"CollPropertyComp": [],
"CollPropertyCompNav@odata.type": "#Collection(olingo.odata.test1.CTNavFiveProp)",
"CollPropertyCompNav": [
{
"@odata.type": "#olingo.odata.test1.CTNavFiveProp",
"PropertyInt16@odata.type": "#Int16",
"PropertyInt16": 1
}
],
"CollPropertyString@odata.type": "#Collection(String)",
"CollPropertyString": [
"1",
"2"
],
"PropertyCompTwoPrim": {
"@odata.type": "#olingo.odata.test1.CTTwoPrim",
"PropertyInt16@odata.type": "#Int16",
"PropertyInt16": 11,
"PropertyString": "11"
}
}