diff --git a/endpoints/citrus-http/src/main/java/org/citrusframework/http/client/HttpResponseErrorHandler.java b/endpoints/citrus-http/src/main/java/org/citrusframework/http/client/HttpResponseErrorHandler.java
index c6c3cd2ce2..a3a8245971 100644
--- a/endpoints/citrus-http/src/main/java/org/citrusframework/http/client/HttpResponseErrorHandler.java
+++ b/endpoints/citrus-http/src/main/java/org/citrusframework/http/client/HttpResponseErrorHandler.java
@@ -16,13 +16,17 @@
package org.citrusframework.http.client;
-import java.io.IOException;
-
import org.citrusframework.exceptions.CitrusRuntimeException;
import org.citrusframework.message.ErrorHandlingStrategy;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.HttpStatusCode;
import org.springframework.http.client.ClientHttpResponse;
+import org.springframework.lang.Nullable;
import org.springframework.web.client.DefaultResponseErrorHandler;
+import java.io.IOException;
+import java.net.URI;
+
/**
* @since 2.7
*/
@@ -32,17 +36,15 @@ public class HttpResponseErrorHandler extends DefaultResponseErrorHandler {
/**
* Default constructor using error handling strategy.
- * @param errorHandlingStrategy
*/
public HttpResponseErrorHandler(ErrorHandlingStrategy errorHandlingStrategy) {
this.errorHandlingStrategy = errorHandlingStrategy;
}
@Override
- public void handleError(ClientHttpResponse response) throws IOException {
+ protected void handleError(ClientHttpResponse response, HttpStatusCode statusCode, @Nullable URI url, @Nullable HttpMethod method) throws IOException {
if (errorHandlingStrategy.equals(ErrorHandlingStrategy.PROPAGATE)) {
- throw new HttpErrorPropagatingException(response.getStatusCode(), response.getStatusText(),
- response.getHeaders(), getResponseBody(response), getCharset(response));
+ throw new HttpErrorPropagatingException(response.getStatusCode(), response.getStatusText(), response.getHeaders(), getResponseBody(response), getCharset(response));
} else if (errorHandlingStrategy.equals(ErrorHandlingStrategy.THROWS_EXCEPTION)) {
super.handleError(response);
} else {
diff --git a/endpoints/citrus-http/src/test/java/org/citrusframework/http/server/HttpServerTest.java b/endpoints/citrus-http/src/test/java/org/citrusframework/http/server/HttpServerTest.java
index 2edf9b11f2..ae420b1800 100644
--- a/endpoints/citrus-http/src/test/java/org/citrusframework/http/server/HttpServerTest.java
+++ b/endpoints/citrus-http/src/test/java/org/citrusframework/http/server/HttpServerTest.java
@@ -16,8 +16,7 @@
package org.citrusframework.http.server;
-import java.util.Random;
-
+import org.apache.hc.core5.http.ContentType;
import org.citrusframework.context.SpringBeanReferenceResolver;
import org.citrusframework.context.TestContext;
import org.citrusframework.endpoint.EndpointAdapter;
@@ -29,7 +28,6 @@
import org.citrusframework.message.MessageHeaders;
import org.citrusframework.testng.AbstractTestNGUnitTest;
import org.citrusframework.util.SocketUtils;
-import org.apache.hc.core5.http.ContentType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
@@ -39,10 +37,16 @@
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
+import java.util.Random;
+
+import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import static org.springframework.http.HttpStatus.INTERNAL_SERVER_ERROR;
+import static org.testng.Assert.fail;
/**
* Simple unit test for HttpServer
@@ -79,7 +83,7 @@ public void shutdown() {
try {
client.send(new HttpMessage().method(HttpMethod.GET), context);
- Assert.fail("Server supposed to be in shutdown state, but was accessible via client request");
+ fail("Server supposed to be in shutdown state, but was accessible via client request");
} catch (ResourceAccessException e) {
Assert.assertTrue(e.getMessage().contains("Connection refused"));
}
@@ -224,4 +228,26 @@ public void testCustomContentType() {
verify(mockResponseEndpointAdapter).handleMessage(any(Message.class));
}
+ @Test
+ public void testHttpResponseErrorHandlerWithPropagateStrategy() {
+ TestContext context = testContextFactory.getObject();
+
+ reset(mockResponseEndpointAdapter);
+ doReturn(new HttpMessage().status(INTERNAL_SERVER_ERROR))
+ .when(mockResponseEndpointAdapter).handleMessage(any(Message.class));
+
+ client.send(new HttpMessage()
+ .path("/hello")
+ .method(HttpMethod.GET), context);
+
+ Message response = client.receive(context);
+
+ assertThat(response)
+ .isInstanceOf(HttpMessage.class)
+ .satisfies(
+ r -> assertThat(((HttpMessage) r).getStatusCode()).isEqualTo(INTERNAL_SERVER_ERROR)
+ );
+
+ verify(mockResponseEndpointAdapter).handleMessage(any(Message.class));
+ }
}
diff --git a/pom.xml b/pom.xml
index b2f765442c..e947c96a9c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -195,13 +195,13 @@
1.8.0
3.26.3
4.2.2
- 2.27.19
- 1.78.1
- 1.15.7
+ 2.29.21
+ 1.79
+ 1.15.10
2.12.0
1.9.0
1.17.1
- 2.17.0
+ 2.18.0
3.17.0
1.3.4
3.11.1
@@ -209,12 +209,12 @@
3.4.0
4.2.28
1.2.0
- 3.0.22
- 2.1.0
+ 3.0.23
+ 2.1.1
3.0
4.13.0
5.4.1
- 2.7.3
+ 2.7.4
2.18.1
2.1.3
2.0.1
@@ -233,7 +233,7 @@
2.0.0
0.1.55
2.9.0
- 1.5.2
+ 1.5.4
2.5.1
r938
5.11.3
@@ -242,7 +242,7 @@
2.10.1
6.13.4
6.13.4
- 3.8.0
+ 3.9.0
6.13.4
2.22.1
5.14.2
@@ -250,20 +250,20 @@
4.1.105.Final
4.12.0
4.7.6
- 42.7.3
+ 42.7.4
3.0.4
- 4.25.0
+ 4.27.0
2.0.11
1.1.10.7
2.3
- 6.1.14
+ 6.2.0
4.0.11
- 6.3.5
- 3.0.2
+ 6.4.0
+ 3.0.3
2.14.0
1.6.9
2.1.22
- 1.20.1
+ 1.20.4
7.10.2
4.5.10
1.6.3
@@ -271,7 +271,7 @@
5.2.1
2.6.0
2.12.2
- 1.4.20
+ 1.4.21
3.9.3
false