From e530b3021a325d4acedf0e74f399f908648a72e8 Mon Sep 17 00:00:00 2001 From: iroqueta Date: Fri, 5 Apr 2024 15:37:51 -0300 Subject: [PATCH] Allow to change body length limit in rest request using jackson library Issue:107261 --- wrapperjakarta/pom.xml | 6 ++++ .../com/genexus/ws/JAXRSObjectMapper.java | 29 +++++++++++++++++++ .../com/genexus/ws/JAXRSObjectMapper.java | 25 ++++++++++++++++ 3 files changed, 60 insertions(+) create mode 100644 wrapperjakarta/src/main/java/com/genexus/ws/JAXRSObjectMapper.java create mode 100644 wrapperjavax/src/main/java/com/genexus/ws/JAXRSObjectMapper.java diff --git a/wrapperjakarta/pom.xml b/wrapperjakarta/pom.xml index 4ce5cd464..081e17d78 100644 --- a/wrapperjakarta/pom.xml +++ b/wrapperjakarta/pom.xml @@ -68,6 +68,12 @@ + + + com.fasterxml.jackson.core + jackson-core + 2.15.2 + com.fasterxml.jackson.core diff --git a/wrapperjakarta/src/main/java/com/genexus/ws/JAXRSObjectMapper.java b/wrapperjakarta/src/main/java/com/genexus/ws/JAXRSObjectMapper.java new file mode 100644 index 000000000..027625ab8 --- /dev/null +++ b/wrapperjakarta/src/main/java/com/genexus/ws/JAXRSObjectMapper.java @@ -0,0 +1,29 @@ +package com.genexus.ws; + +import com.fasterxml.jackson.core.StreamReadConstraints; +import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.ws.rs.ext.ContextResolver; +import jakarta.ws.rs.ext.Provider; + +@Provider +public class JAXRSObjectMapper implements ContextResolver { + + private final ObjectMapper mapper; + + public JAXRSObjectMapper() { + this.mapper = createObjectMapper(); + } + + @Override + public ObjectMapper getContext(Class type) { + return mapper; + } + + private ObjectMapper createObjectMapper() { + ObjectMapper mapper = new ObjectMapper(); + String bodyLengthLimit = System.getProperty("gx.jackson.bodylengthlimit"); + if (bodyLengthLimit != null) + mapper.getFactory().setStreamReadConstraints(StreamReadConstraints.builder().maxStringLength(Integer.parseInt(bodyLengthLimit)).build()); + return mapper; + } +} diff --git a/wrapperjavax/src/main/java/com/genexus/ws/JAXRSObjectMapper.java b/wrapperjavax/src/main/java/com/genexus/ws/JAXRSObjectMapper.java new file mode 100644 index 000000000..6ac300b71 --- /dev/null +++ b/wrapperjavax/src/main/java/com/genexus/ws/JAXRSObjectMapper.java @@ -0,0 +1,25 @@ +package com.genexus.ws; + +import com.fasterxml.jackson.databind.ObjectMapper; +import javax.ws.rs.ext.ContextResolver; +import javax.ws.rs.ext.Provider; + +@Provider +public class JAXRSObjectMapper implements ContextResolver { + + private final ObjectMapper mapper; + + public JAXRSObjectMapper() { + this.mapper = createObjectMapper(); + } + + @Override + public ObjectMapper getContext(Class type) { + return mapper; + } + + private ObjectMapper createObjectMapper() { + ObjectMapper mapper = new ObjectMapper(); + return mapper; + } +}