@Override public Object propertyValueOf( QualifiedName stateName ) { try { ValueType valueType = entityDescriptor.state().findPropertyModelByQualifiedName( stateName ).valueType(); JsonValue jsonValue = state.getJsonObject( JSONKeys.VALUE ).get( stateName.name() ); return serialization.fromJson( module, valueType, jsonValue ); } catch( SerializationException e ) { throw new EntityStoreException( e ); } }
@Override public Object propertyValueOf( QualifiedName stateName ) { try { ValueType valueType = entityDescriptor.state().findPropertyModelByQualifiedName( stateName ).valueType(); JsonValue jsonValue = state.getJsonObject( JSONKeys.VALUE ).get( stateName.name() ); return serialization.fromJson( module, valueType, jsonValue ); } catch( SerializationException e ) { throw new EntityStoreException( e ); } }
@Test public void serializeMapWithStringKeysAsJsonObject() { Map<String, String> map = new HashMap<>(); map.put( "foo", "bar" ); map.put( "baz", "bazar" ); JsonValue json = jsonSerialization.toJson( map ); assertThat( json.getValueType(), is( JsonValue.ValueType.OBJECT ) ); JsonObject jsonObject = (JsonObject) json; assertThat( jsonObject.getString( "foo" ), equalTo( "bar" ) ); assertThat( jsonObject.getString( "baz" ), equalTo( "bazar" ) ); MapType mapType = MapType.of( ValueType.STRING, ValueType.STRING ); Map<String, String> map2 = jsonSerialization.fromJson( module, mapType, json ); assertThat( map2, equalTo( map ) ); }
@Test public void deserializeJsonArrayOfEntryObjectsAsMapWithStringKeys() { JsonObjectBuilder fooEntryBuilder = jsonFactories.builderFactory().createObjectBuilder(); fooEntryBuilder.add( "key", "foo" ); fooEntryBuilder.add( "value", "bar" ); JsonObject fooEntry = fooEntryBuilder.build(); JsonObjectBuilder bazEntryBuilder = jsonFactories.builderFactory().createObjectBuilder(); bazEntryBuilder.add( "key", "baz" ); bazEntryBuilder.add( "value", "bazar" ); JsonObject bazEntry = bazEntryBuilder.build(); JsonArrayBuilder arrayBuilder = jsonFactories.builderFactory().createArrayBuilder(); arrayBuilder.add( fooEntry ); arrayBuilder.add( bazEntry ); JsonArray jsonArray = arrayBuilder.build(); MapType mapType = MapType.of( ValueType.STRING, ValueType.STRING ); Map<String, String> map = jsonSerialization.fromJson( module, mapType, jsonArray ); assertThat( map.get( "foo" ), equalTo( "bar" ) ); assertThat( map.get( "baz" ), equalTo( "bazar" ) ); }
Object value = jsonSerialization.fromJson( module, property.valueType(), jsonValue ); properties.put( property.qualifiedName(), value );
@Test public void serializeMapWithComplexKeyToJsonArrayOfEntryObjects() { Map<SomeValue, String> map = new LinkedHashMap<>(); map.put( newSomeValue( "foo" ), "bar" ); map.put( newSomeValue( "baz" ), "bazar" ); JsonValue json = jsonSerialization.toJson( map ); assertThat( json.getValueType(), is( JsonValue.ValueType.ARRAY ) ); JsonArray jsonArray = (JsonArray) json; JsonObject fooEntry = jsonArray.getJsonObject( 0 ); JsonObject bazEntry = jsonArray.getJsonObject( 1 ); assertThat( fooEntry.getJsonObject( "key" ).getString( "foo" ), equalTo( "foo" ) ); assertThat( fooEntry.getString( "value" ), equalTo( "bar" ) ); assertThat( bazEntry.getJsonObject( "key" ).getString( "foo" ), equalTo( "baz" ) ); assertThat( bazEntry.getString( "value" ), equalTo( "bazar" ) ); MapType mapType = MapType.of( ValueCompositeType.of( api.valueDescriptorFor( map.keySet().iterator().next() ) ), ValueType.STRING ); Map<SomeValue, String> map2 = jsonSerialization.fromJson( module, mapType, json ); assertThat( map2, equalTo( map ) ); }
try jsonSerialization.fromJson( module, mapType, jsonArray ); fail( "Should have failed deserialization" );
Object value = jsonSerialization.fromJson( module, property.valueType(), jsonValue ); properties.put( property.qualifiedName(), value );