diff --git a/modules/transports/core/nhttp/pom.xml b/modules/transports/core/nhttp/pom.xml index 4afbf09119..5763eb1222 100644 --- a/modules/transports/core/nhttp/pom.xml +++ b/modules/transports/core/nhttp/pom.xml @@ -230,6 +230,10 @@ log4j-api true + + org.wso2.orbit.org.apache.commons + commons-compress + log4j log4j diff --git a/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/util/DeferredMessageBuilder.java b/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/util/DeferredMessageBuilder.java index 08e0c7e30a..dc3b21914e 100644 --- a/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/util/DeferredMessageBuilder.java +++ b/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/passthru/util/DeferredMessageBuilder.java @@ -30,6 +30,7 @@ import org.apache.axis2.transport.http.*; import org.apache.axis2.util.JavaUtils; import org.apache.axis2.util.MessageProcessorSelector; +import org.apache.commons.compress.compressors.brotli.BrotliCompressorInputStream; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.http.protocol.HTTP; @@ -39,6 +40,7 @@ import java.io.IOException; import java.io.InputStream; +import java.io.PushbackInputStream; import java.util.HashMap; import java.util.Iterator; import java.util.Map; @@ -102,7 +104,7 @@ public OMElement getDocument(MessageContext msgCtx, InputStream in) throws String contentType = (String) msgCtx.getProperty(Constants.Configuration.CONTENT_TYPE); String _contentType = getContentType(contentType, msgCtx); - in = HTTPTransportUtils.handleGZip(msgCtx, in); + in = handleContentEncoding(msgCtx, in); AxisConfiguration configuration = msgCtx.getConfigurationContext().getAxisConfiguration(); Parameter useFallbackParameter = @@ -306,4 +308,22 @@ public static String getContentType(String contentType, MessageContext msgContex } return type; } + + private static InputStream handleContentEncoding(MessageContext msgContext, InputStream in) throws IOException { + if (checkContentEncodingMatches(msgContext, "br")) { + PushbackInputStream pushbackInputStream = new PushbackInputStream(in); + int bytesRead = pushbackInputStream.read(); + if (bytesRead != -1) { + pushbackInputStream.unread(bytesRead); + return new BrotliCompressorInputStream(pushbackInputStream); + } + } + return HTTPTransportUtils.handleGZip(msgContext, in); + } + + private static boolean checkContentEncodingMatches(MessageContext msgContext, String encoding) { + Map headers = (Map)msgContext.getProperty(MessageContext.TRANSPORT_HEADERS); + return headers != null && (encoding.equals(headers.get(HTTPConstants.HEADER_CONTENT_ENCODING)) + || encoding.equals(headers.get(HTTPConstants.HEADER_CONTENT_ENCODING_LOWERCASE))); + } } \ No newline at end of file diff --git a/pom.xml b/pom.xml index e95941e23d..aba198a211 100644 --- a/pom.xml +++ b/pom.xml @@ -1445,6 +1445,11 @@ swagger-parser ${swagger.parser.v3.version} + + org.wso2.orbit.org.apache.commons + commons-compress + ${commons-compress.orbit.version} + @@ -1676,6 +1681,7 @@ 2.44.1.wso2v1 2.1.37.wso2v1 2.0.0 + 1.28.0.wso2v2