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