This is an automated email from the ASF dual-hosted git repository.
Gargi-jais11 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git
The following commit(s) were added to refs/heads/master by this push:
new 6f3abf61ac7 HDDS-16189. Return application/xml for S3 error responses
(#11031).
6f3abf61ac7 is described below
commit 6f3abf61ac741e06818262fd22c2680db890c6a4
Author: Shuo Huang <[email protected]>
AuthorDate: Thu Aug 27 12:26:23 2026 +0800
HDDS-16189. Return application/xml for S3 error responses (#11031).
---
.../ozone/s3/awssdk/v1/AbstractS3SDKV1Tests.java | 1 +
.../ozone/s3/awssdk/v2/AbstractS3SDKV2Tests.java | 2 ++
.../ozone/s3/exception/OS3ExceptionMapper.java | 2 ++
.../org/apache/hadoop/ozone/s3/util/S3Utils.java | 2 ++
.../ozone/s3/exception/TestOS3Exceptions.java | 28 +++++++++++++++++++++-
.../apache/hadoop/ozone/s3/util/TestS3Utils.java | 9 +++++++
6 files changed, 43 insertions(+), 1 deletion(-)
diff --git
a/hadoop-ozone/integration-test-s3/src/test/java/org/apache/hadoop/ozone/s3/awssdk/v1/AbstractS3SDKV1Tests.java
b/hadoop-ozone/integration-test-s3/src/test/java/org/apache/hadoop/ozone/s3/awssdk/v1/AbstractS3SDKV1Tests.java
index bf41354a1bc..b52ed18b511 100644
---
a/hadoop-ozone/integration-test-s3/src/test/java/org/apache/hadoop/ozone/s3/awssdk/v1/AbstractS3SDKV1Tests.java
+++
b/hadoop-ozone/integration-test-s3/src/test/java/org/apache/hadoop/ozone/s3/awssdk/v1/AbstractS3SDKV1Tests.java
@@ -267,6 +267,7 @@ public void testCreateBucketAlreadyOwnedByYou() {
() -> s3Client.createBucket(bucketName));
assertEquals(409, ase.getStatusCode());
assertEquals(S3ErrorTable.BUCKET_ALREADY_OWNED_BY_YOU.getCode(),
ase.getErrorCode());
+ assertEquals("application/xml", ase.getHttpHeaders().get("Content-Type"));
}
@Test
diff --git
a/hadoop-ozone/integration-test-s3/src/test/java/org/apache/hadoop/ozone/s3/awssdk/v2/AbstractS3SDKV2Tests.java
b/hadoop-ozone/integration-test-s3/src/test/java/org/apache/hadoop/ozone/s3/awssdk/v2/AbstractS3SDKV2Tests.java
index b0739c62eaa..00224584f7a 100644
---
a/hadoop-ozone/integration-test-s3/src/test/java/org/apache/hadoop/ozone/s3/awssdk/v2/AbstractS3SDKV2Tests.java
+++
b/hadoop-ozone/integration-test-s3/src/test/java/org/apache/hadoop/ozone/s3/awssdk/v2/AbstractS3SDKV2Tests.java
@@ -253,6 +253,8 @@ public void testCreateBucketAlreadyOwnedByYou() {
assertEquals(409, exception.statusCode());
assertEquals(S3ErrorTable.BUCKET_ALREADY_OWNED_BY_YOU.getCode(),
exception.awsErrorDetails().errorCode());
+ assertEquals("application/xml", exception.awsErrorDetails()
+ .sdkHttpResponse().firstMatchingHeader("Content-Type").orElse(null));
}
@Test
diff --git
a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/exception/OS3ExceptionMapper.java
b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/exception/OS3ExceptionMapper.java
index 5f110144c11..16a529d3f5d 100644
---
a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/exception/OS3ExceptionMapper.java
+++
b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/exception/OS3ExceptionMapper.java
@@ -18,6 +18,7 @@
package org.apache.hadoop.ozone.s3.exception;
import javax.inject.Inject;
+import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;
@@ -45,6 +46,7 @@ public Response toResponse(OS3Exception exception) {
}
exception.setRequestId(requestIdentifier.getRequestId());
return Response.status(exception.getHttpCode())
+ .type(MediaType.APPLICATION_XML_TYPE)
.entity(exception.toXml()).build();
}
}
diff --git
a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/util/S3Utils.java
b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/util/S3Utils.java
index 3379d2d244d..b72c4adb2d2 100644
---
a/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/util/S3Utils.java
+++
b/hadoop-ozone/s3gateway/src/main/java/org/apache/hadoop/ozone/s3/util/S3Utils.java
@@ -39,6 +39,7 @@
import java.util.stream.Collectors;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.apache.commons.codec.binary.Hex;
import org.apache.commons.codec.digest.DigestUtils;
@@ -141,6 +142,7 @@ public static ReplicationConfig toReplicationConfig(String
s3StorageType, String
public static WebApplicationException wrapOS3Exception(OS3Exception ex) {
return new WebApplicationException(ex.getErrorMessage(), ex,
Response.status(ex.getHttpCode())
+ .type(MediaType.APPLICATION_XML_TYPE)
.entity(ex.toXml())
.build());
}
diff --git
a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/exception/TestOS3Exceptions.java
b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/exception/TestOS3Exceptions.java
index 2644150bd34..239eb079139 100644
---
a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/exception/TestOS3Exceptions.java
+++
b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/exception/TestOS3Exceptions.java
@@ -18,15 +18,30 @@
package org.apache.hadoop.ozone.s3.exception;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.mockito.Mockito.when;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import org.apache.hadoop.ozone.s3.RequestIdentifier;
import org.apache.hadoop.ozone.web.utils.OzoneUtils;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
/**
- * This class tests OS3Exception class.
+ * This class tests OS3Exception and OS3ExceptionMapper.
*/
+@ExtendWith(MockitoExtension.class)
public class TestOS3Exceptions {
+ @Mock
+ private RequestIdentifier requestIdentifier;
+
+ @InjectMocks
+ private OS3ExceptionMapper exceptionMapper;
+
@Test
public void testOS3Exceptions() {
OS3Exception ex = S3ErrorTable.newError(S3ErrorTable.ACCESS_DENIED,
"bucket");
@@ -44,4 +59,15 @@ public void testOS3Exceptions() {
ex.getRequestId());
assertEquals(expected, val);
}
+
+ @Test
+ public void testResponseContentType() {
+ when(requestIdentifier.getRequestId()).thenReturn("request-id");
+ OS3Exception exception = S3ErrorTable.newError(
+ S3ErrorTable.ACCESS_DENIED, "bucket");
+
+ Response response = exceptionMapper.toResponse(exception);
+
+ assertEquals(MediaType.APPLICATION_XML_TYPE, response.getMediaType());
+ }
}
diff --git
a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/util/TestS3Utils.java
b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/util/TestS3Utils.java
index 2dbf3c65ba6..f178c507ac9 100644
---
a/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/util/TestS3Utils.java
+++
b/hadoop-ozone/s3gateway/src/test/java/org/apache/hadoop/ozone/s3/util/TestS3Utils.java
@@ -29,6 +29,7 @@
import java.util.Base64;
import java.util.List;
import java.util.stream.Stream;
+import javax.ws.rs.core.MediaType;
import org.apache.commons.codec.binary.Hex;
import org.apache.commons.lang3.StringUtils;
import org.apache.hadoop.hdds.client.ECReplicationConfig;
@@ -154,6 +155,14 @@ public void testGenerateCanonicalUserId() {
assertEquals(S3Owner.DEFAULT_S3OWNER_ID,
S3Utils.generateCanonicalUserId("ozone"));
}
+ @Test
+ public void testWrapOS3ExceptionContentType() {
+ OS3Exception exception = S3ErrorTable.newError(
+ S3ErrorTable.ACCESS_DENIED, "bucket");
+ assertEquals(MediaType.APPLICATION_XML_TYPE,
+ S3Utils.wrapOS3Exception(exception).getResponse().getMediaType());
+ }
+
static Stream<Arguments> wrongContentMD5Provider() throws Exception {
String serverMD5 = Hex.encodeHexString(
MessageDigest.getInstance("MD5").digest("bar".getBytes(StandardCharsets.UTF_8)));
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]