This is an automated email from the ASF dual-hosted git repository.

coheigea pushed a commit to branch coheigea/CXF-7903
in repository https://gitbox.apache.org/repos/asf/cxf.git

commit 133b850e5d11390c6b09fd836d0a4e495b8d75fe
Author: Colm O hEigeartaigh <[email protected]>
AuthorDate: Thu Oct 15 17:16:49 2026 +0100

    CXF-7903: Preserve reason phrase in ResponseContext.setStatusInfo
---
 .../jaxrs/impl/AbstractResponseContextImpl.java    |  1 +
 .../impl/ContainerResponseContextImplTest.java     | 72 ++++++++++++++++++++++
 2 files changed, 73 insertions(+)

diff --git 
a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/AbstractResponseContextImpl.java
 
b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/AbstractResponseContextImpl.java
index 0c5cb796bb4..18e9fcb9bc5 100644
--- 
a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/AbstractResponseContextImpl.java
+++ 
b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/AbstractResponseContextImpl.java
@@ -147,5 +147,6 @@ public abstract class AbstractResponseContextImpl {
 
     public void setStatusInfo(StatusType status) {
         setStatus(status.getStatusCode());
+        r.setStatus(status.getStatusCode(), status.getReasonPhrase());
     }
 }
diff --git 
a/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/ContainerResponseContextImplTest.java
 
b/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/ContainerResponseContextImplTest.java
new file mode 100644
index 00000000000..db0c2c77dc0
--- /dev/null
+++ 
b/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/impl/ContainerResponseContextImplTest.java
@@ -0,0 +1,72 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.cxf.jaxrs.impl;
+
+import jakarta.ws.rs.core.Response;
+import jakarta.ws.rs.core.Response.Status.Family;
+import jakarta.ws.rs.core.Response.StatusType;
+import org.apache.cxf.message.Exchange;
+import org.apache.cxf.message.ExchangeImpl;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.message.MessageImpl;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class ContainerResponseContextImplTest {
+
+    @Test
+    public void testSetStatusInfoKeepsReasonPhrase() {
+        ContainerResponseContextImpl ctx = createContext();
+        ctx.setStatusInfo(new StatusType() {
+            public int getStatusCode() {
+                return 499;
+            }
+            public Family getFamily() {
+                return Family.CLIENT_ERROR;
+            }
+            public String getReasonPhrase() {
+                return "Custom Reason";
+            }
+        });
+
+        assertEquals(499, ctx.getStatus());
+        assertEquals(499, ctx.getStatusInfo().getStatusCode());
+        assertEquals("Custom Reason", ctx.getStatusInfo().getReasonPhrase());
+    }
+
+    @Test
+    public void testSetStatusUsesDefaultReasonPhrase() {
+        ContainerResponseContextImpl ctx = createContext();
+        ctx.setStatus(404);
+
+        assertEquals(404, ctx.getStatusInfo().getStatusCode());
+        assertEquals(Response.Status.NOT_FOUND.getReasonPhrase(), 
ctx.getStatusInfo().getReasonPhrase());
+    }
+
+    private static ContainerResponseContextImpl createContext() {
+        Message m = new MessageImpl();
+        Exchange e = new ExchangeImpl();
+        m.setExchange(e);
+        e.setOutMessage(m);
+        ResponseImpl r = new ResponseImpl(200);
+        return new ContainerResponseContextImpl(r, m, null, null);
+    }
+}

Reply via email to