]
Stuart Douglas moved JBEAP-6691 to WFLY-7403:
---------------------------------------------
Project: WildFly (was: JBoss Enterprise Application Platform)
Key: WFLY-7403 (was: JBEAP-6691)
Workflow: GIT Pull Request workflow (was: CDW with loose statuses v1)
Component/s: REST
(was: REST)
Affects Version/s: (was: 7.1.0.DR7)
Jsr310 and jdk8 fasterxml modules are not available from deployment
without specific jboss-deployment-structure.xml
-------------------------------------------------------------------------------------------------------------------
Key: WFLY-7403
URL:
https://issues.jboss.org/browse/WFLY-7403
Project: WildFly
Issue Type: Bug
Components: REST
Reporter: Stuart Douglas
Assignee: Stuart Douglas
*Description of problem:*
Jsr310 and jdk8 fasterxml modules are not available from deployment without specific
jboss-deployment-structure.xml
*How reproducible:*
Always
*Steps to Reproduce:*
* This can be tested if "<module
name="com.fasterxml.jackson.core.jackson-annotations"/>" is added to
./modules/system/layers/base/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/main/module.xml
(see JBEAP-6673)
# Create end-point with data types and special jdk8 types and allows
{code:java}
@GET
@Path("entity/get/json")
@Produces(MediaType.APPLICATION_JSON)
public DatatypeObject getJson() {
DatatypeObject per = new DatatypeObject();
per.setString("someString");
per.setDate(new Date());
per.setDuration(Duration.ofSeconds(5, 6));
per.setDayOfWeek(DayOfWeek.FRIDAY);
per.setOptionalString1(Optional.of("info(a)example.com"));
per.setOptionalString2(Optional.<String>empty());
return per;
}
{code}
# Implement custom ContextResolver in deployment. This code enables jsr310 and jdk8
fasterxml functionality. Example:
{code:java}
@Provider
@Produces( MediaType.APPLICATION_JSON )
public class JacksonProducer implements ContextResolver<ObjectMapper> {
private final ObjectMapper json;
public JacksonProducer() throws Exception {
this.json = new ObjectMapper()
.findAndRegisterModules()
.configure( SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false
)
.configure( DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,
false );
}
@Override
public ObjectMapper getContext( Class<?> objectType ) {
return json;
}
}
{code}
# Http request to REST end-point
*Actual results:*
{noformat}
{"string":"someString","optionalString1":{"present":true},"optionalString2":{"present":false},"duration":{"seconds":5,"zero":false,"negative":false,"units":["SECONDS","NANOS"],"nano":6},"date":"2016-10-27T13:02:11.991+0000"}
{noformat}
*Expected results:*
{noformat}{"string":"someString","optionalString1":"info@example.com","optionalString2":null,"duration":"PT5.000000006S","date":"2016-10-27T13:01:03.923+0000"}
{noformat}
*Workaround:*
Expected results is returned if specific jboss-deployment-structure.xml file is used:
{code:xml}
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<deployment>
<dependencies>
<module
name="com.fasterxml.jackson.datatype.jackson-datatype-jdk8"
services="import"/>
<module
name="com.fasterxml.jackson.datatype.jackson-datatype-jsr310"
services="import"/>
</dependencies>
</deployment>
</jboss-deployment-structure>
{code}