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]

Reply via email to