-
Notifications
You must be signed in to change notification settings - Fork 22
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Aggiunta feature al deserializzatore dei messaggi json per lanciare eccezione quando si tenta di assegnare un numero intero ad una enum.
- Loading branch information
Showing
11 changed files
with
263 additions
and
209 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
59 changes: 59 additions & 0 deletions
59
jars/api-commons/src/main/java/it/govpay/rs/v3/serialization/JsonJacksonDeserializer.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
package it.govpay.rs.v3.serialization; | ||
|
||
import org.openspcoop2.utils.serialization.IDeserializer; | ||
import org.openspcoop2.utils.serialization.SerializationConfig; | ||
|
||
import com.fasterxml.jackson.databind.DeserializationFeature; | ||
import com.fasterxml.jackson.databind.ObjectMapper; | ||
import com.fasterxml.jackson.databind.SerializationFeature; | ||
import com.fasterxml.jackson.databind.deser.BeanDeserializerFactory; | ||
import com.fasterxml.jackson.databind.deser.BeanDeserializerModifier; | ||
import com.fasterxml.jackson.databind.deser.DefaultDeserializationContext; | ||
import com.fasterxml.jackson.databind.deser.DeserializerFactory; | ||
import com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule; | ||
|
||
import it.govpay.core.exceptions.ValidationException; | ||
import it.govpay.core.utils.SimpleDateFormatUtils; | ||
import it.govpay.core.utils.rawutils.DateModule; | ||
import it.govpay.core.utils.serialization.BeanDeserializerModifierForIgnorables; | ||
|
||
public class JsonJacksonDeserializer { | ||
|
||
private JsonJacksonDeserializer () {} | ||
|
||
public static <T> T parse(String jsonString, Class<T> t) throws ValidationException { | ||
SerializationConfig serializationConfig = new SerializationConfig(); | ||
serializationConfig.setDf(SimpleDateFormatUtils.newSimpleDateFormatSoloData()); | ||
serializationConfig.setIgnoreNullValues(true); | ||
return parse(jsonString, t, serializationConfig); | ||
} | ||
|
||
public static <T> T parse(String jsonString, Class<T> t, SerializationConfig serializationConfig) throws ValidationException { | ||
try { | ||
BeanDeserializerModifier modifier = new BeanDeserializerModifierForIgnorables(serializationConfig.getExcludes()); | ||
DeserializerFactory dFactory = BeanDeserializerFactory.instance.withDeserializerModifier(modifier); | ||
|
||
ObjectMapper mapper = new ObjectMapper(null, null, new DefaultDeserializationContext.Impl(dFactory)); | ||
mapper.setDateFormat(serializationConfig.getDf()); | ||
if(serializationConfig.isSerializeEnumAsString()) | ||
mapper.enable(DeserializationFeature.READ_ENUMS_USING_TO_STRING); | ||
|
||
mapper = new ObjectMapper(); | ||
mapper.registerModule(new JaxbAnnotationModule()); | ||
mapper.registerModule(new DateModule()); | ||
mapper.enable(DeserializationFeature.READ_ENUMS_USING_TO_STRING); | ||
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); | ||
mapper.setDateFormat(SimpleDateFormatUtils.newSimpleDateFormatSoloData()); | ||
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false); | ||
mapper.configure(DeserializationFeature.FAIL_ON_NUMBERS_FOR_ENUMS,true); | ||
|
||
IDeserializer deserializer = new it.govpay.core.utils.serialization.JsonJacksonDeserializer(mapper); | ||
|
||
@SuppressWarnings("unchecked") | ||
T object = (T) deserializer.getObject(jsonString, t); | ||
return object; | ||
} catch(org.openspcoop2.utils.serialization.IOException e) { | ||
throw new ValidationException(e.getMessage(), e); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
48 changes: 48 additions & 0 deletions
48
...c/main/java/it/govpay/core/utils/serialization/BeanDeserializerModifierForIgnorables.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
package it.govpay.core.utils.serialization; | ||
|
||
import java.util.ArrayList; | ||
import java.util.List; | ||
|
||
import com.fasterxml.jackson.databind.BeanDescription; | ||
import com.fasterxml.jackson.databind.DeserializationConfig; | ||
import com.fasterxml.jackson.databind.deser.BeanDeserializerBuilder; | ||
import com.fasterxml.jackson.databind.deser.BeanDeserializerModifier; | ||
import com.fasterxml.jackson.databind.introspect.BeanPropertyDefinition; | ||
|
||
public class BeanDeserializerModifierForIgnorables extends BeanDeserializerModifier { | ||
|
||
private List<String> ignorables; | ||
|
||
public BeanDeserializerModifierForIgnorables(List<String> properties) { | ||
if(properties!=null) | ||
this.ignorables = properties; | ||
else | ||
this.ignorables = new ArrayList<>(); | ||
} | ||
|
||
@Override | ||
public BeanDeserializerBuilder updateBuilder( | ||
DeserializationConfig config, BeanDescription beanDesc, | ||
BeanDeserializerBuilder builder) { | ||
|
||
for(String ignorable : this.ignorables) { | ||
builder.addIgnorable(ignorable); | ||
} | ||
|
||
return builder; | ||
} | ||
|
||
@Override | ||
public List<BeanPropertyDefinition> updateProperties( | ||
DeserializationConfig config, BeanDescription beanDesc, | ||
List<BeanPropertyDefinition> propDefs) { | ||
|
||
List<BeanPropertyDefinition> newPropDefs = new ArrayList<>(); | ||
for(BeanPropertyDefinition propDef : propDefs) { | ||
if(!this.ignorables.contains(propDef.getName())) { | ||
newPropDefs.add(propDef); | ||
} | ||
} | ||
return newPropDefs; | ||
} | ||
} |
76 changes: 76 additions & 0 deletions
76
.../core-beans/src/main/java/it/govpay/core/utils/serialization/JsonJacksonDeserializer.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
package it.govpay.core.utils.serialization; | ||
|
||
|
||
import java.io.InputStream; | ||
import java.io.Reader; | ||
|
||
import org.openspcoop2.utils.serialization.IDeserializer; | ||
import org.openspcoop2.utils.serialization.IOException; | ||
|
||
import com.fasterxml.jackson.databind.DeserializationFeature; | ||
import com.fasterxml.jackson.databind.ObjectMapper; | ||
import com.fasterxml.jackson.databind.deser.BeanDeserializerFactory; | ||
import com.fasterxml.jackson.databind.deser.BeanDeserializerModifier; | ||
import com.fasterxml.jackson.databind.deser.DefaultDeserializationContext; | ||
import com.fasterxml.jackson.databind.deser.DeserializerFactory; | ||
|
||
/** | ||
* Contiene utility per effettuare la de-serializzazione di un oggetto | ||
* | ||
* @author Poli Andrea (apoli@link.it) | ||
* @author $Author$ | ||
* @version $Rev$, $Date$ | ||
*/ | ||
|
||
public class JsonJacksonDeserializer implements IDeserializer{ | ||
|
||
private ObjectMapper mapper; | ||
|
||
public JsonJacksonDeserializer() { | ||
this(new SerializationConfig()); | ||
} | ||
|
||
public JsonJacksonDeserializer(SerializationConfig config) { | ||
BeanDeserializerModifier modifier = new BeanDeserializerModifierForIgnorables(config.getExcludes()); | ||
DeserializerFactory dFactory = BeanDeserializerFactory.instance.withDeserializerModifier(modifier); | ||
|
||
this.mapper = new ObjectMapper(null, null, new DefaultDeserializationContext.Impl(dFactory)); | ||
this.mapper.setDateFormat(config.getDf()); | ||
if(config.isSerializeEnumAsString()) | ||
this.mapper.enable(DeserializationFeature.READ_ENUMS_USING_TO_STRING); | ||
if(config.isFailOnNumbersForEnums()) | ||
this.mapper.enable(DeserializationFeature.FAIL_ON_NUMBERS_FOR_ENUMS); | ||
|
||
} | ||
|
||
public JsonJacksonDeserializer(ObjectMapper mapper) { | ||
this.mapper = mapper; | ||
} | ||
|
||
@Override | ||
public Object getObject(String s, Class<?> classType) throws IOException{ | ||
try { | ||
return this.mapper.readValue(s, classType); | ||
} catch (java.io.IOException e) { | ||
throw new IOException(e); | ||
} | ||
} | ||
|
||
@Override | ||
public Object readObject(InputStream is, Class<?> classType) throws IOException { | ||
try { | ||
return this.mapper.readValue(is, classType); | ||
} catch (java.io.IOException e) { | ||
throw new IOException(e); | ||
} | ||
} | ||
|
||
@Override | ||
public Object readObject(Reader reader, Class<?> classType) throws IOException { | ||
try { | ||
return this.mapper.readValue(reader, classType); | ||
} catch (java.io.IOException e) { | ||
throw new IOException(e); | ||
} | ||
} | ||
} |
20 changes: 20 additions & 0 deletions
20
jars/core-beans/src/main/java/it/govpay/core/utils/serialization/SerializationConfig.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
package it.govpay.core.utils.serialization; | ||
|
||
/** | ||
* @author Bussu Giovanni (bussu@link.it) | ||
* @author Pintori Giuliano (pintori@link.it) | ||
* @author $Author$ | ||
* @version $Rev$, $Date$ | ||
* | ||
*/ | ||
public class SerializationConfig extends org.openspcoop2.utils.serialization.SerializationConfig{ | ||
|
||
private boolean failOnNumbersForEnums = false; // default | ||
|
||
public boolean isFailOnNumbersForEnums() { | ||
return failOnNumbersForEnums; | ||
} | ||
public void setFailOnNumbersForEnums(boolean failOnNumbersForEnums) { | ||
this.failOnNumbersForEnums = failOnNumbersForEnums; | ||
} | ||
} |
Oops, something went wrong.