You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ad...@apache.org on 2016/01/13 11:11:40 UTC
svn commit: r1724383 - in /james/project/trunk/server/protocols/jmap/src:
main/java/org/apache/james/jmap/methods/JmapResponseWriterImpl.java
test/java/org/apache/james/jmap/methods/JmapResponseWriterImplTest.java
Author: aduprat
Date: Wed Jan 13 10:11:40 2016
New Revision: 1724383
URL: http://svn.apache.org/viewvc?rev=1724383&view=rev
Log:
JAMES-1648 Instanciate Object Mapper at each request to avoid side-effects. Contributed by Ouazana <ra...@linagora.com>
Modified:
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/JmapResponseWriterImpl.java
james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/JmapResponseWriterImplTest.java
Modified: james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/JmapResponseWriterImpl.java
URL: http://svn.apache.org/viewvc/james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/JmapResponseWriterImpl.java?rev=1724383&r1=1724382&r2=1724383&view=diff
==============================================================================
--- james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/JmapResponseWriterImpl.java (original)
+++ james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/JmapResponseWriterImpl.java Wed Jan 13 10:11:40 2016
@@ -29,23 +29,23 @@ import org.apache.james.jmap.model.Proto
import com.fasterxml.jackson.databind.Module;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.databind.ser.FilterProvider;
+import com.fasterxml.jackson.databind.ser.PropertyFilter;
import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;
import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;
public class JmapResponseWriterImpl implements JmapResponseWriter {
- private final ObjectMapper objectMapper;
+ private final Set<Module> jacksonModules;
@Inject
public JmapResponseWriterImpl(Set<Module> jacksonModules) {
- this.objectMapper = new ObjectMapper().registerModules(jacksonModules)
- .configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
+ this.jacksonModules = jacksonModules;
}
@Override
public ProtocolResponse formatMethodResponse(JmapResponse jmapResponse) {
- buildPropertiesFilter(jmapResponse.getProperties())
- .ifPresent(x -> objectMapper.setFilterProvider(x));
+ ObjectMapper objectMapper = newConfiguredObjectMapper(jmapResponse);
return new ProtocolResponse(
jmapResponse.getResponseName(),
@@ -53,9 +53,19 @@ public class JmapResponseWriterImpl impl
jmapResponse.getClientId());
}
- private Optional<SimpleFilterProvider> buildPropertiesFilter(Optional<Set<String>> properties) {
- return properties
- .map(x -> SimpleBeanPropertyFilter.filterOutAllExcept(x))
- .map(x -> new SimpleFilterProvider().addFilter("propertiesFilter", x));
+ private FilterProvider buildPropertiesFilter(Optional<Set<String>> properties) {
+ PropertyFilter filter = properties
+ .map(SimpleBeanPropertyFilter::filterOutAllExcept)
+ .orElse(SimpleBeanPropertyFilter.serializeAll());
+ return new SimpleFilterProvider().addFilter("propertiesFilter", filter);
+ }
+
+ private ObjectMapper newConfiguredObjectMapper(JmapResponse jmapResponse) {
+ ObjectMapper objectMapper = new ObjectMapper().registerModules(jacksonModules)
+ .configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
+
+ objectMapper.setFilterProvider(buildPropertiesFilter(jmapResponse.getProperties()));
+
+ return objectMapper;
}
}
Modified: james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/JmapResponseWriterImplTest.java
URL: http://svn.apache.org/viewvc/james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/JmapResponseWriterImplTest.java?rev=1724383&r1=1724382&r2=1724383&view=diff
==============================================================================
--- james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/JmapResponseWriterImplTest.java (original)
+++ james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/JmapResponseWriterImplTest.java Wed Jan 13 10:11:40 2016
@@ -107,6 +107,35 @@ public class JmapResponseWriterImplTest
assertThat(firstObject.get("name")).isNull();
}
+
+ @Test
+ public void formatMethodResponseShouldNotFilterFieldsWhenSecondCallWithoutProperties() {
+ ObjectResponseClass responseClass = new ObjectResponseClass();
+ responseClass.list = ImmutableList.of(new ObjectResponseClass.Foo("id", "name"));
+
+ JmapResponseWriterImpl jmapResponseWriterImpl = new JmapResponseWriterImpl(ImmutableSet.of(new Jdk8Module()));
+ jmapResponseWriterImpl.formatMethodResponse(
+ JmapResponse
+ .builder()
+ .responseName(Method.Response.name("unknownMethod"))
+ .clientId(ClientId.of("#1"))
+ .properties(ImmutableSet.of("id"))
+ .response(responseClass)
+ .build());
+
+ ProtocolResponse response = jmapResponseWriterImpl.formatMethodResponse(
+ JmapResponse
+ .builder()
+ .responseName(Method.Response.name("unknownMethod"))
+ .clientId(ClientId.of("#1"))
+ .response(responseClass)
+ .build());
+
+ JsonNode firstObject = response.getResults().get("list").elements().next();
+ assertThat(firstObject.get("id").asText()).isEqualTo("id");
+ assertThat(firstObject.get("name").asText()).isEqualTo("name");
+ }
+
@SuppressWarnings("unused")
private static class ObjectResponseClass implements Method.Response {
@JsonFilter("propertiesFilter")
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org