diff --git a/agrirouter-api-java-impl/pom.xml b/agrirouter-api-java-impl/pom.xml
index c712135d..87dff26b 100644
--- a/agrirouter-api-java-impl/pom.xml
+++ b/agrirouter-api-java-impl/pom.xml
@@ -62,6 +62,12 @@
org.glassfish.jersey.inject
jersey-hk2
+
+ org.junit.jupiter
+ junit-jupiter-params
+ 5.1.0
+ test
+
org.eclipse.paho
org.eclipse.paho.client.mqttv3
diff --git a/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/helper/MessageQueryService.java b/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/helper/MessageQueryService.java
index 6a0409ff..6b769d6f 100644
--- a/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/helper/MessageQueryService.java
+++ b/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/helper/MessageQueryService.java
@@ -13,6 +13,7 @@
import com.dke.data.agrirouter.impl.NonEnvironmentalService;
import com.dke.data.agrirouter.impl.common.MessageIdService;
import com.dke.data.agrirouter.impl.messaging.rest.MessageSender;
+import com.dke.data.agrirouter.impl.validation.ResponseStatusChecker;
import com.dke.data.agrirouter.impl.validation.ResponseValidator;
import java.util.Collections;
import java.util.Objects;
@@ -50,7 +51,10 @@ public void send(MessageQueryParameters parameters) {
MessageSender.MessageSenderResponse response = this.sendMessage(sendMessageParameters);
this.getNativeLogger().trace("Validate message response.");
- this.assertResponseStatusIsValid(response.getNativeResponse(), HttpStatus.SC_OK);
+ int status = response.getNativeResponse().getStatus();
+ if (!ResponseStatusChecker.isStatusInSuccessRange(status)) {
+ this.assertResponseStatusIsValid(response.getNativeResponse(), HttpStatus.SC_OK);
+ }
this.logMethodEnd();
}
diff --git a/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/DeleteMessageServiceImpl.java b/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/DeleteMessageServiceImpl.java
index 9507b2ce..6db4f47c 100644
--- a/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/DeleteMessageServiceImpl.java
+++ b/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/DeleteMessageServiceImpl.java
@@ -13,6 +13,7 @@
import com.dke.data.agrirouter.api.service.parameters.SendMessageParameters;
import com.dke.data.agrirouter.impl.common.MessageIdService;
import com.dke.data.agrirouter.impl.messaging.encoding.EncodeMessageServiceImpl;
+import com.dke.data.agrirouter.impl.validation.ResponseStatusChecker;
import com.dke.data.agrirouter.impl.validation.ResponseValidator;
import java.util.Collections;
import java.util.Objects;
@@ -38,7 +39,10 @@ public void send(DeleteMessageParameters parameters) {
MessageSenderResponse response = this.sendMessage(sendMessageParameters);
- this.assertResponseStatusIsValid(response.getNativeResponse(), HttpStatus.SC_OK);
+ int status = response.getNativeResponse().getStatus();
+ if (!ResponseStatusChecker.isStatusInSuccessRange(status)) {
+ this.assertResponseStatusIsValid(response.getNativeResponse(), HttpStatus.SC_OK);
+ }
}
private String encodeMessage(DeleteMessageParameters parameters) {
diff --git a/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/MessageConfirmationServiceImpl.java b/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/MessageConfirmationServiceImpl.java
index 6d1c10f8..0fa398ba 100644
--- a/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/MessageConfirmationServiceImpl.java
+++ b/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/MessageConfirmationServiceImpl.java
@@ -25,6 +25,7 @@
import com.dke.data.agrirouter.impl.common.UtcTimeService;
import com.dke.data.agrirouter.impl.messaging.encoding.DecodeMessageServiceImpl;
import com.dke.data.agrirouter.impl.messaging.encoding.EncodeMessageServiceImpl;
+import com.dke.data.agrirouter.impl.validation.ResponseStatusChecker;
import com.dke.data.agrirouter.impl.validation.ResponseValidator;
import java.util.*;
import org.apache.http.HttpStatus;
@@ -56,7 +57,10 @@ public void send(MessageConfirmationParameters parameters) {
MessageSenderResponse response = this.sendMessage(sendMessageParameters);
- this.assertResponseStatusIsValid(response.getNativeResponse(), HttpStatus.SC_OK);
+ int status = response.getNativeResponse().getStatus();
+ if (!ResponseStatusChecker.isStatusInSuccessRange(status)) {
+ this.assertResponseStatusIsValid(response.getNativeResponse(), HttpStatus.SC_OK);
+ }
}
private String encodeMessage(MessageConfirmationParameters parameters) {
diff --git a/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/MessageFetcher.java b/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/MessageFetcher.java
index 3ea0ed49..366ca048 100644
--- a/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/MessageFetcher.java
+++ b/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/MessageFetcher.java
@@ -3,6 +3,7 @@
import com.dke.data.agrirouter.api.enums.CertificationType;
import com.dke.data.agrirouter.api.service.parameters.FetchMessageParameters;
import com.dke.data.agrirouter.impl.RequestFactory;
+import com.dke.data.agrirouter.impl.validation.ResponseStatusChecker;
import com.dke.data.agrirouter.impl.validation.ResponseValidator;
import java.util.Optional;
import javax.ws.rs.core.Response;
@@ -28,7 +29,11 @@ default Optional poll(FetchMessageParameters parameters, int maxTries, l
CertificationType.valueOf(
parameters.getOnboardingResponse().getAuthentication().getType()))
.get();
- this.assertResponseStatusIsValid(response, HttpStatus.SC_OK);
+
+ if (!ResponseStatusChecker.isStatusInSuccessRange(response.getStatus())) {
+ this.assertResponseStatusIsValid(response, HttpStatus.SC_OK);
+ }
+
String entityContent = response.readEntity(String.class);
if (!StringUtils.equalsIgnoreCase(entityContent, EMPTY_CONTENT)) {
return Optional.of(entityContent);
diff --git a/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/SendMessageServiceImpl.java b/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/SendMessageServiceImpl.java
index 2540bf66..5607e6a5 100644
--- a/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/SendMessageServiceImpl.java
+++ b/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/SendMessageServiceImpl.java
@@ -2,6 +2,7 @@
import com.dke.data.agrirouter.api.service.messaging.SendMessageService;
import com.dke.data.agrirouter.api.service.parameters.SendMessageParameters;
+import com.dke.data.agrirouter.impl.validation.ResponseStatusChecker;
import com.dke.data.agrirouter.impl.validation.ResponseValidator;
import org.apache.http.HttpStatus;
@@ -12,6 +13,9 @@ public class SendMessageServiceImpl
public void send(SendMessageParameters parameters) {
parameters.validate();
MessageSenderResponse response = this.sendMessage(parameters);
- this.assertResponseStatusIsValid(response.getNativeResponse(), HttpStatus.SC_OK);
+ int status = response.getNativeResponse().getStatus();
+ if (!ResponseStatusChecker.isStatusInSuccessRange(status)) {
+ this.assertResponseStatusIsValid(response.getNativeResponse(), HttpStatus.SC_OK);
+ }
}
}
diff --git a/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/SetCapabilityServiceImpl.java b/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/SetCapabilityServiceImpl.java
index d1961891..f2c67f1d 100644
--- a/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/SetCapabilityServiceImpl.java
+++ b/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/SetCapabilityServiceImpl.java
@@ -15,6 +15,7 @@
import com.dke.data.agrirouter.impl.EnvironmentalService;
import com.dke.data.agrirouter.impl.common.MessageIdService;
import com.dke.data.agrirouter.impl.messaging.encoding.EncodeMessageServiceImpl;
+import com.dke.data.agrirouter.impl.validation.ResponseStatusChecker;
import com.dke.data.agrirouter.impl.validation.ResponseValidator;
import java.util.ArrayList;
import java.util.Collections;
@@ -42,7 +43,10 @@ public void send(SetCapabilitiesParameters parameters) {
MessageSenderResponse response = this.sendMessage(sendMessageParameters);
- this.assertResponseStatusIsValid(response.getNativeResponse(), HttpStatus.SC_OK);
+ int status = response.getNativeResponse().getStatus();
+ if (!ResponseStatusChecker.isStatusInSuccessRange(status)) {
+ this.assertResponseStatusIsValid(response.getNativeResponse(), HttpStatus.SC_OK);
+ }
}
private String encodeMessage(SetCapabilitiesParameters parameters) {
diff --git a/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/onboard/RegistrationRequestServiceImpl.java b/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/onboard/RegistrationRequestServiceImpl.java
index 194dfbe0..c5a11adb 100644
--- a/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/onboard/RegistrationRequestServiceImpl.java
+++ b/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/onboard/RegistrationRequestServiceImpl.java
@@ -7,6 +7,7 @@
import com.dke.data.agrirouter.impl.EnvironmentalService;
import com.dke.data.agrirouter.impl.RequestFactory;
import com.dke.data.agrirouter.impl.common.CookieResolverService;
+import com.dke.data.agrirouter.impl.validation.ResponseStatusChecker;
import com.dke.data.agrirouter.impl.validation.ResponseValidator;
import com.gargoylesoftware.htmlunit.util.Cookie;
import java.util.Set;
@@ -43,10 +44,12 @@ public RegistrationRequestResponse getRegistrationCode(RegistrationRequestParame
Response response = RequestFactory.request(url, cookies).get();
this.getNativeLogger().debug("Validating response | {}.", response);
- this.assertResponseStatusIsValid(response, HttpStatus.SC_OK);
+ if (!ResponseStatusChecker.isStatusInSuccessRange(response.getStatus())) {
+ this.assertResponseStatusIsValid(response, HttpStatus.SC_OK);
+ }
this.getNativeLogger()
- .info("END | Fetching registration code from agrirouter | '{}'.", parameters);
+ .info("END | Fetching registration code from agrirouter | '{}'.", parameters);
return response.readEntity(RegistrationRequestResponse.class);
}
}
diff --git a/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/onboard/secured/OnboardingServiceImpl.java b/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/onboard/secured/OnboardingServiceImpl.java
index 33353606..fd5cf5d5 100644
--- a/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/onboard/secured/OnboardingServiceImpl.java
+++ b/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/onboard/secured/OnboardingServiceImpl.java
@@ -14,6 +14,7 @@
import com.dke.data.agrirouter.impl.RequestFactory;
import com.dke.data.agrirouter.impl.common.signing.SecurityKeyCreationService;
import com.dke.data.agrirouter.impl.onboard.AbstractOnboardingService;
+import com.dke.data.agrirouter.impl.validation.ResponseStatusChecker;
import com.dke.data.agrirouter.impl.validation.ResponseValidator;
import com.google.gson.Gson;
import java.security.InvalidKeyException;
@@ -94,10 +95,13 @@ private void verify(
securedOnboardingParameters.getApplicationId(),
encodedSignature)
.post(Entity.entity(jsonBody, MediaType.APPLICATION_JSON_TYPE));
- try {
- this.assertResponseStatusIsValid(response, HttpStatus.SC_OK);
- } catch (UnexpectedHttpStatusException e) {
- throw new CouldNotVerifySecuredOnboardingRequestException(e);
+
+ if (!ResponseStatusChecker.isStatusInSuccessRange(response.getStatus())) {
+ try {
+ this.assertResponseStatusIsValid(response, HttpStatus.SC_OK);
+ } catch (UnexpectedHttpStatusException e) {
+ throw new CouldNotVerifySecuredOnboardingRequestException(e);
+ }
}
}
diff --git a/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/onboard/secured/RegistrationRequestServiceImpl.java b/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/onboard/secured/RegistrationRequestServiceImpl.java
index 79bf19ac..af5820f9 100644
--- a/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/onboard/secured/RegistrationRequestServiceImpl.java
+++ b/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/onboard/secured/RegistrationRequestServiceImpl.java
@@ -13,6 +13,7 @@
import com.dke.data.agrirouter.impl.common.CookieResolverService;
import com.dke.data.agrirouter.impl.common.StateIdService;
import com.dke.data.agrirouter.impl.onboard.OnboardingServiceImpl;
+import com.dke.data.agrirouter.impl.validation.ResponseStatusChecker;
import com.dke.data.agrirouter.impl.validation.ResponseValidator;
import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
import com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController;
@@ -78,7 +79,11 @@ public RegistrationRequestResponse getRegistrationCode(
HtmlAnchor anchorByHref = page.getAnchorByHref("javascript:{}");
final Page redirectPage = anchorByHref.click();
- assertResponseStatusIsValid(redirectPage.getWebResponse(), HttpStatus.SC_OK);
+
+ int status = redirectPage.getWebResponse().getStatusCode();
+ if (!ResponseStatusChecker.isStatusInSuccessRange(status)) {
+ this.assertResponseStatusIsValid(redirectPage.getWebResponse(), HttpStatus.SC_OK);
+ }
URL redirectPageUrl = redirectPage.getUrl();
return this.extractAuthenticationResults(redirectPageUrl);
diff --git a/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/validation/ResponseStatusChecker.java b/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/validation/ResponseStatusChecker.java
new file mode 100644
index 00000000..b664b28e
--- /dev/null
+++ b/agrirouter-api-java-impl/src/main/java/com/dke/data/agrirouter/impl/validation/ResponseStatusChecker.java
@@ -0,0 +1,8 @@
+package com.dke.data.agrirouter.impl.validation;
+
+public class ResponseStatusChecker {
+
+ public static boolean isStatusInSuccessRange(int status) {
+ return status >= 200 && status <= 299;
+ }
+}
diff --git a/agrirouter-api-java-impl/src/test/java/com/dke/data/agrirouter/impl/validation/RangeCheckerTest.java b/agrirouter-api-java-impl/src/test/java/com/dke/data/agrirouter/impl/validation/RangeCheckerTest.java
new file mode 100644
index 00000000..f7a6d2e4
--- /dev/null
+++ b/agrirouter-api-java-impl/src/test/java/com/dke/data/agrirouter/impl/validation/RangeCheckerTest.java
@@ -0,0 +1,29 @@
+package com.dke.data.agrirouter.impl.validation;
+
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
+
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+class RangeCheckerTest {
+
+ @ParameterizedTest
+ @ValueSource(ints = {200, 201, 202, 203, 204, 205, 206, 207, 208, 226})
+ void givenSuccessStatus_CheckStatusInSuccessRange_ShouldReturnTrue(int status) {
+ assertTrue(ResponseStatusChecker.isStatusInSuccessRange(status));
+ }
+
+ @Test
+ void givenAnyStatus2XX_CheckStatusInSuccessRange_ShouldReturnTrue() {
+ for (int actualStatus = 200; actualStatus <= 299; actualStatus++) {
+ assertTrue(ResponseStatusChecker.isStatusInSuccessRange(actualStatus));
+ }
+ }
+
+ @Test
+ void givenOtherStatus_CheckStatusInSuccessRange_ShouldReturnFalse() {
+ assertFalse(ResponseStatusChecker.isStatusInSuccessRange(404));
+ }
+}