This is an automated email from the ASF dual-hosted git repository.
coheigea pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cxf.git
The following commit(s) were added to refs/heads/main by this push:
new b09da5d02ba CXF-7903: Preserve reason phrase in
ResponseContext.setStatusInfo (#3588)
b09da5d02ba is described below
commit b09da5d02ba7436aac2a907633a74cc56179a729
Author: Colm O hEigeartaigh <[email protected]>
AuthorDate: Fri Oct 16 08:10:07 2026 +0100
CXF-7903: Preserve reason phrase in ResponseContext.setStatusInfo (#3588)
---
.../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);
+ }
+}