Skip to content

Commit

Permalink
#39 - Fixed: nillable customizations ignore default rules for process…
Browse files Browse the repository at this point in the history
…ing classes

Signed-off-by: Dmitry Kornilov <dmitry.kornilov@oracle.com>
  • Loading branch information
m0mus committed Aug 30, 2017
1 parent edaab93 commit ecfa955
Show file tree
Hide file tree
Showing 5 changed files with 41 additions and 28 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Expand Up @@ -45,7 +45,7 @@

<groupId>org.eclipse</groupId>
<artifactId>yasson</artifactId>
<version>1.1.0-SNAPSHOT</version>
<version>1.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>org.eclipse.yasson</name>

Expand Down
17 changes: 12 additions & 5 deletions src/main/java/org/eclipse/yasson/internal/Marshaller.java
Expand Up @@ -112,7 +112,8 @@ public <T> void serialize(T object, JsonGenerator generator) {
@SuppressWarnings("unchecked")
public <T> void serializeRoot(T root, JsonGenerator generator, JsonBindingModel model) {
final JsonbSerializer<T> rootSerializer = (JsonbSerializer<T>) getRootSerializer(root.getClass(), model);
if (jsonbContext.getConfigProperties().isStrictIJson() && rootSerializer instanceof AbstractValueTypeSerializer) {
if (jsonbContext.getConfigProperties().isStrictIJson() &&
rootSerializer instanceof AbstractValueTypeSerializer) {
throw new JsonbException(Messages.getMessage(MessageKeys.IJSON_ENABLED_SINGLE_VALUE));
}
rootSerializer.serialize(root, generator, this);
Expand All @@ -121,11 +122,17 @@ public <T> void serializeRoot(T root, JsonGenerator generator, JsonBindingModel
private JsonbSerializer<?> getRootSerializer(Class<?> rootClazz, JsonBindingModel model) {
final ContainerSerializerProvider serializerProvider = getMappingContext().getSerializerProvider(rootClazz);
if (serializerProvider != null) {
return serializerProvider.provideSerializer(new JsonbPropertyInfo().withRuntimeType(runtimeType)
.withClassModel(getMappingContext().getClassModel(rootClazz)).withJsonBindingModel(model));
return serializerProvider
.provideSerializer(new JsonbPropertyInfo()
.withRuntimeType(runtimeType)
.withClassModel(getMappingContext().
getClassModel(rootClazz))
.withJsonBindingModel(model));
}
return new SerializerBuilder(jsonbContext).withObjectClass(rootClazz)
.withType(model.getType()).withModel(model).build();
return new SerializerBuilder(jsonbContext)
.withObjectClass(rootClazz)
.withType(model.getType())
.withModel(model).build();
}

}
Expand Up @@ -244,16 +244,12 @@ private <T> T getTargetForMostPreciseScope(Map<AnnotationTarget, T> collectedAnn
}

/**
* Read a property.
* Gets property's value.
*
* @param object object to read property from.
* @return value in case property value is set and field is readable. If null or not readable (transient, static), return s null.
* @param object object to read property from
* @return property's value
*/
public Object getValue(Object object) {
if (!isReadable()) {
//nulls are omitted in produced JSON, unless overridden
return null;
}
return propagation.getValue(object);
}

Expand Down
Expand Up @@ -73,22 +73,28 @@ protected void writeStart(String key, JsonGenerator generator) {
@SuppressWarnings("unchecked")
private void marshallProperty(T object, JsonGenerator generator, SerializationContext ctx, PropertyModel propertyModel) {
Marshaller marshaller = (Marshaller) ctx;
final Object propertyValue = propertyModel.getValue(object);
if (propertyValue == null) {
if (propertyModel.getCustomization().isNillable()) {
generator.writeNull(propertyModel.getWriteName());

if (propertyModel.isReadable()) {
final Object propertyValue = propertyModel.getValue(object);
if (propertyValue == null) {
if (propertyModel.getCustomization().isNillable()) {
generator.writeNull(propertyModel.getWriteName());
}
return;
}
return;
}
final JsonbSerializer<?> propertyCachedSerializer = propertyModel.getPropertySerializer();
if (propertyCachedSerializer != null) {
serializerCaptor(propertyCachedSerializer, propertyValue, generator, ctx);
return;

final JsonbSerializer<?> propertyCachedSerializer = propertyModel.getPropertySerializer();
if (propertyCachedSerializer != null) {
serializerCaptor(propertyCachedSerializer, propertyValue, generator, ctx);
return;
}

Type genericType = ReflectionUtils.resolveType(this, propertyModel.getType());
final JsonbSerializer<?> serializer = new SerializerBuilder(marshaller.getJsonbContext())
.withWrapper(this)
.withObjectClass(propertyValue.getClass()).withModel(propertyModel)
.withType(genericType).build();
serializerCaptor(serializer, propertyValue, generator, ctx);
}
Type genericType = ReflectionUtils.resolveType(this, propertyModel.getType());
final JsonbSerializer<?> serializer = new SerializerBuilder(marshaller.getJsonbContext()).withWrapper(this)
.withObjectClass(propertyValue.getClass()).withModel(propertyModel)
.withType(genericType).build();
serializerCaptor(serializer, propertyValue, generator, ctx);
}
}
Expand Up @@ -23,6 +23,10 @@ public class JsonbNillableValue {

private String nillableField;

private String privateField;

private static String staticField;

public String getNillableField() {
return nillableField;
}
Expand Down

0 comments on commit ecfa955

Please sign in to comment.