diff --git a/datamodel/openapi/openapi-core-apache/src/main/java/com/sap/cloud/sdk/services/openapi/apache/apiclient/ApiClient.java b/datamodel/openapi/openapi-core-apache/src/main/java/com/sap/cloud/sdk/services/openapi/apache/apiclient/ApiClient.java index 9c41962c0..a90826000 100644 --- a/datamodel/openapi/openapi-core-apache/src/main/java/com/sap/cloud/sdk/services/openapi/apache/apiclient/ApiClient.java +++ b/datamodel/openapi/openapi-core-apache/src/main/java/com/sap/cloud/sdk/services/openapi/apache/apiclient/ApiClient.java @@ -15,6 +15,7 @@ import static com.sap.cloud.sdk.services.openapi.apache.apiclient.DefaultApiResponseHandler.isJsonMime; import static lombok.AccessLevel.PRIVATE; +import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.net.URLEncoder; @@ -28,6 +29,7 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; +import java.util.zip.GZIPOutputStream; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -68,6 +70,7 @@ import lombok.Getter; import lombok.ToString; import lombok.With; +import lombok.val; /** * API client for executing HTTP requests using Apache HttpClient 5. @@ -560,7 +563,11 @@ public T invokeAPI( if( body != null || !formParams.isEmpty() ) { if( isBodyAllowed(Method.valueOf(method)) ) { // Add entity if we have content and a valid method - builder.setEntity(serialize(body, formParams, contentTypeObj)); + builder + .setEntity( + "gzip".equals(headerParams.get("Content-Encoding")) + ? serializeGzip(body, contentTypeObj) + : serialize(body, formParams, contentTypeObj)); } else { throw new OpenApiRequestException("method " + method + " does not support a request body"); } @@ -578,4 +585,16 @@ public T invokeAPI( throw new OpenApiRequestException(e); } } + + private HttpEntity serializeGzip( final Object body, final ContentType contentType ) + { + val outputStream = new ByteArrayOutputStream(); + try( val gzip = new GZIPOutputStream(outputStream) ) { + gzip.write(objectMapper.writeValueAsBytes(body)); + } + catch( IOException e ) { + throw new OpenApiRequestException(e); + } + return new ByteArrayEntity(outputStream.toByteArray(), contentType.withCharset(StandardCharsets.UTF_8)); + } }