diff --git a/agrirouter-sdk-java-api/pom.xml b/agrirouter-sdk-java-api/pom.xml
index 3a73b0c9..281c7bc8 100644
--- a/agrirouter-sdk-java-api/pom.xml
+++ b/agrirouter-sdk-java-api/pom.xml
@@ -44,14 +44,6 @@
org.junit.jupiter
junit-jupiter-api
-
- org.apache.logging.log4j
- log4j-api
-
-
- org.apache.logging.log4j
- log4j-core
-
com.google.code.gson
gson
diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/HasLogger.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/HasLogger.java
new file mode 100644
index 00000000..5719b9bd
--- /dev/null
+++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/HasLogger.java
@@ -0,0 +1,63 @@
+package com.dke.data.agrirouter.api.service;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.slf4j.Marker;
+import org.slf4j.MarkerFactory;
+
+import static java.lang.String.valueOf;
+
+/**
+ * Interface to encapsulate logging capabilities. Logging will be done using LOG4J2, ruleset should
+ * be:
+ *
+ *
+ * - Log method entry on level DEBUG.
+ *
- Log method steps on level TRACE.
+ *
- Log method result on level TRACE.
+ *
- Log method exit on level DEBUG.
+ *
+ *
+ * Please be aware of the rule "Log or throw" regarding exceptions.
+ */
+public interface HasLogger {
+
+ Marker METHOD_BEGIN = MarkerFactory.getMarker("METHOD_BEGIN");
+ Marker METHOD_END = MarkerFactory.getMarker("METHOD_END");
+
+ Map loggerCache = new HashMap<>();
+
+ /**
+ * Returns the native LOG4J2 logger for further logging.
+ *
+ * @return -
+ */
+ default Logger getNativeLogger() {
+ if (null == loggerCache.get(this.getClass().getName())) {
+ final Logger logger = LoggerFactory.getLogger(this.getClass());
+ loggerCache.put(this.getClass().getName(), logger);
+ }
+ return loggerCache.get(this.getClass().getName());
+ }
+
+ /**
+ * Log method begin. Will log all given parameters as well.
+ */
+ default void logMethodBegin(Object... objects) {
+ getNativeLogger().debug(METHOD_BEGIN, "BEGIN | Start of method.");
+ Arrays.stream(objects).forEach(o -> getNativeLogger().trace(valueOf(o)));
+ }
+
+ /**
+ * Log method exit. Will log all given results as well.
+ *
+ * @param objects The results of the method.
+ */
+ default void logMethodEnd(Object... objects) {
+ Arrays.stream(objects).forEach(o -> getNativeLogger().trace(valueOf(o)));
+ getNativeLogger().debug(METHOD_END, "END | End of method.");
+ }
+}
diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/LoggingEnabledService.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/LoggingEnabledService.java
deleted file mode 100644
index 678e621b..00000000
--- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/LoggingEnabledService.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.dke.data.agrirouter.api.service;
-
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.Marker;
-import org.apache.logging.log4j.MarkerManager;
-import org.apache.logging.log4j.message.ObjectArrayMessage;
-
-/**
- * Interface to encapsulate logging capabilities. Logging will be done using LOG4J2, ruleset should
- * be:
- *
- *
- * - Log method entry on level DEBUG.
- *
- Log method parameters on level TRACE.
- *
- Log method steps on level TRACE.
- *
- Log method result on level TRACE.
- *
- Log method exit on level DEBUG.
- *
- *
- * Please be aware of the rule "Log or throw" regarding exceptions.
- */
-public interface LoggingEnabledService {
-
- Marker METHOD_BEGIN = MarkerManager.getMarker("METHOD_BEGIN");
- Marker METHOD_END = MarkerManager.getMarker("METHOD_END");
- Marker METHOD_PARAMETERS = MarkerManager.getMarker("METHOD_PARAMETERS");
- Marker METHOD_RESULTS = MarkerManager.getMarker("METHOD_RESULTS");
-
- Logger LOGGER = LogManager.getLogger();
-
- /**
- * Returns the native LOG4J2 logger for further logging.
- *
- * @return -
- */
- default Logger getNativeLogger() {
- return LOGGER;
- }
-
- /**
- * Log method begin. Will log all given parameters as well.
- *
- * @param objects The parameters of the method.
- */
- default void logMethodBegin(Object... objects) {
- LOGGER.debug(METHOD_BEGIN, "BEGIN | Start of method.");
- LOGGER.trace(METHOD_PARAMETERS, new ObjectArrayMessage(objects));
- }
-
- /**
- * Log method exit. Will log all given results as well.
- *
- * @param objects The results of the method.
- */
- default void logMethodEnd(Object... objects) {
- LOGGER.debug(METHOD_END, "END | End of method.");
- LOGGER.trace(METHOD_RESULTS, new ObjectArrayMessage(objects));
- }
-}
diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/ParameterValidation.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/ParameterValidation.java
index 67798f88..66dcabe4 100644
--- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/ParameterValidation.java
+++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/ParameterValidation.java
@@ -3,13 +3,9 @@
import com.dke.data.agrirouter.api.exception.IllegalParameterDefinitionException;
import java.util.Collection;
import org.apache.commons.lang3.StringUtils;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
/** Parameter validation using bean validation. */
-public interface ParameterValidation {
-
- Logger LOGGER = LogManager.getLogger();
+public interface ParameterValidation extends HasLogger {
/**
* Validation of the parameters. If there are any constraint violations, there will be a
@@ -18,10 +14,10 @@ public interface ParameterValidation {
* @throws IllegalParameterDefinitionException -
*/
default void validate() {
- LOGGER.debug("Validating parameters.");
- LOGGER.trace("Technical validation.");
+ getNativeLogger().debug("Validating parameters.");
+ getNativeLogger().trace("Technical validation.");
this.technicalValidation();
- LOGGER.trace("Business validation.");
+ getNativeLogger().trace("Business validation.");
this.businessValidation();
}
diff --git a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/RequestLogging.java b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/RequestLogging.java
index 5344ea4e..fb9ec9d2 100644
--- a/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/RequestLogging.java
+++ b/agrirouter-sdk-java-api/src/main/java/com/dke/data/agrirouter/api/service/RequestLogging.java
@@ -1,15 +1,11 @@
package com.dke.data.agrirouter.api.service;
import javax.ws.rs.core.Response;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-public interface RequestLogging {
-
- Logger logger = LogManager.getLogger(RequestLogging.class);
+public interface RequestLogging extends HasLogger {
default void logRequest(String className, Response response) {
String logMessage = "\n" + "# [" + className + "] " + "\n" + response + "\n";
- this.logger.info(() -> logMessage);
+ this.getNativeLogger().info(logMessage);
}
}
diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/EnvironmentalService.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/EnvironmentalService.java
index 6cce231d..3b8734d8 100644
--- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/EnvironmentalService.java
+++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/EnvironmentalService.java
@@ -1,10 +1,10 @@
package com.dke.data.agrirouter.impl;
import com.dke.data.agrirouter.api.env.Environment;
-import com.dke.data.agrirouter.api.service.LoggingEnabledService;
+import com.dke.data.agrirouter.api.service.HasLogger;
/** Internal implementation for an environmental service. */
-public abstract class EnvironmentalService implements LoggingEnabledService {
+public abstract class EnvironmentalService implements HasLogger {
/** The current environment. */
protected final Environment environment;
diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/NonEnvironmentalService.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/NonEnvironmentalService.java
index 250524ef..a3e5b04f 100644
--- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/NonEnvironmentalService.java
+++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/NonEnvironmentalService.java
@@ -1,6 +1,6 @@
package com.dke.data.agrirouter.impl;
-import com.dke.data.agrirouter.api.service.LoggingEnabledService;
+import com.dke.data.agrirouter.api.service.HasLogger;
/** Internal implementation for an environmental service. */
-public abstract class NonEnvironmentalService implements LoggingEnabledService {}
+public abstract class NonEnvironmentalService implements HasLogger {}
diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/common/signing/SecurityKeyCreationService.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/common/signing/SecurityKeyCreationService.java
index 67b30432..9fc49723 100644
--- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/common/signing/SecurityKeyCreationService.java
+++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/common/signing/SecurityKeyCreationService.java
@@ -2,7 +2,7 @@
import com.dke.data.agrirouter.api.exception.CouldNotCreatePrivateKeyException;
import com.dke.data.agrirouter.api.exception.CouldNotCreatePublicKeyException;
-import com.dke.data.agrirouter.api.service.LoggingEnabledService;
+import com.dke.data.agrirouter.api.service.HasLogger;
import java.security.KeyFactory;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
@@ -12,7 +12,7 @@
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;
-public class SecurityKeyCreationService implements LoggingEnabledService {
+public class SecurityKeyCreationService implements HasLogger {
public PrivateKey createPrivateKey(String privateKey) {
this.logMethodBegin(privateKey);
diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/common/ssl/KeyStoreCreationService.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/common/ssl/KeyStoreCreationService.java
index 860f3b79..b27703ea 100644
--- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/common/ssl/KeyStoreCreationService.java
+++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/common/ssl/KeyStoreCreationService.java
@@ -1,7 +1,7 @@
package com.dke.data.agrirouter.impl.common.ssl;
import com.dke.data.agrirouter.api.exception.CouldNotCreateDynamicKeyStoreException;
-import com.dke.data.agrirouter.api.service.LoggingEnabledService;
+import com.dke.data.agrirouter.api.service.HasLogger;
import java.io.ByteArrayInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
@@ -19,7 +19,7 @@
import javax.net.SocketFactory;
import javax.net.ssl.*;
-public class KeyStoreCreationService implements LoggingEnabledService {
+public class KeyStoreCreationService implements HasLogger {
public static final String TEMPORARY_KEY_PASSWORD = "changeit";
diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/MessageEncoder.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/MessageEncoder.java
index f318e2da..1ad3db3a 100644
--- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/MessageEncoder.java
+++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/MessageEncoder.java
@@ -10,14 +10,14 @@
import com.dke.data.agrirouter.api.dto.encoding.EncodedMessage;
import com.dke.data.agrirouter.api.enums.SystemMessageType;
import com.dke.data.agrirouter.api.enums.TechnicalMessageType;
-import com.dke.data.agrirouter.api.service.LoggingEnabledService;
+import com.dke.data.agrirouter.api.service.HasLogger;
import com.dke.data.agrirouter.api.service.messaging.encoding.EncodeMessageService;
import com.dke.data.agrirouter.api.service.parameters.*;
import com.dke.data.agrirouter.api.util.TimestampUtil;
import com.dke.data.agrirouter.impl.common.MessageIdService;
import java.util.Objects;
-public interface MessageEncoder extends LoggingEnabledService {
+public interface MessageEncoder extends HasLogger {
/**
* Encode a message to delete messages.
diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/encoding/EncodeMessageServiceImpl.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/encoding/EncodeMessageServiceImpl.java
index 9c4abf35..4c0f89d2 100644
--- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/encoding/EncodeMessageServiceImpl.java
+++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/encoding/EncodeMessageServiceImpl.java
@@ -85,8 +85,8 @@ public List encode(List messageParameterTuples) {
/**
* Chunk and add the Base64 encoding for a message if necessary. If there is only one chunk, the
- * single chunk will be returned as Base64 encoded value. The chunk information and all IDs
- * will be set by the SDK and are no longer in control of the application.
+ * single chunk will be returned as Base64 encoded value. The chunk information and all IDs will
+ * be set by the SDK and are no longer in control of the application.
*
* @param messageHeaderParameters -
* @param payloadParameters Content of the message. It shall not be Base64 encoded before.
@@ -171,8 +171,8 @@ public List chunkAndEncode(
} else {
if (messageHeaderParameters.getTechnicalMessageType().getNeedsBase64Encoding()) {
getNativeLogger()
- .debug(
- "The message type needs to be base64 encoded, therefore we are encoding the raw value.");
+ .debug(
+ "The message type needs to be base64 encoded, therefore we are encoding the raw value.");
final PayloadParameters payload = new PayloadParameters();
payload.copyFrom(payloadParameters);
payload.setValue(
diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/MessageFetcher.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/MessageFetcher.java
index bad0eb38..8cbcea4a 100644
--- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/MessageFetcher.java
+++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/messaging/rest/MessageFetcher.java
@@ -2,6 +2,7 @@
import com.dke.data.agrirouter.api.cancellation.CancellationToken;
import com.dke.data.agrirouter.api.enums.CertificationType;
+import com.dke.data.agrirouter.api.service.HasLogger;
import com.dke.data.agrirouter.api.service.parameters.FetchMessageParameters;
import com.dke.data.agrirouter.impl.RequestFactory;
import com.dke.data.agrirouter.impl.validation.ResponseValidator;
@@ -9,13 +10,9 @@
import java.util.Optional;
import javax.ws.rs.core.Response;
import org.apache.commons.lang3.StringUtils;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
/** Interface to fetch messages for the HTTP implementation by polling the outbox. */
-public interface MessageFetcher extends ResponseValidator {
-
- Logger LOGGER = LogManager.getLogger();
+public interface MessageFetcher extends ResponseValidator, HasLogger {
int MAX_TRIES_BEFORE_FAILURE = 10;
long DEFAULT_INTERVAL = 500;
@@ -34,9 +31,10 @@ default Optional poll(
fetchMessageParameters.validate();
int nrOfTries = 1;
while (cancellationToken.isNotCancelled()) {
- LOGGER.debug(
- "The cancellation token is not cancelled, we have another try. This is try number {}.",
- nrOfTries);
+ getNativeLogger()
+ .debug(
+ "The cancellation token is not cancelled, we have another try. This is try number {}.",
+ nrOfTries);
Response response =
RequestFactory.securedRequest(
Objects.requireNonNull(fetchMessageParameters.getOnboardingResponse())
diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/onboard/AbstractOnboardingService.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/onboard/AbstractOnboardingService.java
index 599cb5c1..7721539c 100644
--- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/onboard/AbstractOnboardingService.java
+++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/onboard/AbstractOnboardingService.java
@@ -10,7 +10,6 @@
import com.google.gson.Gson;
import java.util.Optional;
import org.apache.commons.lang3.StringUtils;
-import org.apache.logging.log4j.message.ObjectArrayMessage;
public abstract class AbstractOnboardingService extends EnvironmentalService {
@@ -25,10 +24,6 @@ protected OnboardingRequest getOnboardRequest(
String gatewayId,
CertificationType certificationType) {
this.getNativeLogger().info("BEGIN | Creating onboard request.");
- this.getNativeLogger()
- .debug(
- new ObjectArrayMessage(
- uuid, applicationId, certificationType, gatewayId, certificationType));
OnboardingRequest onboardingRequest = new OnboardingRequest();
onboardingRequest.setId(uuid);
diff --git a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/validation/ResponseValidator.java b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/validation/ResponseValidator.java
index c038e180..83c8b537 100644
--- a/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/validation/ResponseValidator.java
+++ b/agrirouter-sdk-java-impl/src/main/java/com/dke/data/agrirouter/impl/validation/ResponseValidator.java
@@ -4,15 +4,11 @@
import com.dke.data.agrirouter.api.exception.InvalidHttpStatusException;
import com.dke.data.agrirouter.api.exception.InvalidUrlForRequestException;
import com.dke.data.agrirouter.api.exception.UnauthorizedRequestException;
+import com.dke.data.agrirouter.api.service.HasLogger;
import org.apache.http.HttpStatus;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.message.ObjectArrayMessage;
/** Validation of the response, encapsulated using an interface. */
-public interface ResponseValidator {
-
- Logger LOGGER = LogManager.getLogger();
+public interface ResponseValidator extends HasLogger {
/**
* Asserting that the status code is valid. A valid status is in between 200 and 207 (defined by
@@ -21,8 +17,8 @@ public interface ResponseValidator {
* @param statusCode The current status code.
*/
default boolean assertStatusCodeIsValid(int statusCode) {
- LOGGER.debug("Validating status code.");
- LOGGER.trace(new ObjectArrayMessage(statusCode));
+ getNativeLogger().debug("Validating status code.");
+ getNativeLogger().trace("Status code was '{}'", statusCode);
this.checkIfStatusCodeIsError(statusCode);
if (statusCode != HttpStatus.SC_OK
&& statusCode != HttpStatus.SC_CREATED
@@ -42,9 +38,10 @@ default boolean assertStatusCodeIsValid(int statusCode) {
*
* @param statusCode The current status code.
*/
+ @SuppressWarnings("UnusedReturnValue")
default boolean assertStatusCodeIsOk(int statusCode) {
- LOGGER.debug("Validating status code.");
- LOGGER.trace(new ObjectArrayMessage(statusCode));
+ getNativeLogger().debug("Validating status code.");
+ getNativeLogger().trace("Status code was '{}'", statusCode);
this.checkIfStatusCodeIsError(statusCode);
if (statusCode != HttpStatus.SC_OK) {
throw new InvalidHttpStatusException(statusCode);
@@ -58,8 +55,8 @@ default boolean assertStatusCodeIsOk(int statusCode) {
* @param statusCode The current status code.
*/
default boolean assertStatusCodeIsCreated(int statusCode) {
- LOGGER.debug("Validating status code.");
- LOGGER.trace(new ObjectArrayMessage(statusCode));
+ getNativeLogger().debug("Validating status code.");
+ getNativeLogger().trace("Status code was '{}'", statusCode);
this.checkIfStatusCodeIsError(statusCode);
if (statusCode != HttpStatus.SC_CREATED) {
throw new InvalidHttpStatusException(statusCode);
@@ -73,8 +70,8 @@ default boolean assertStatusCodeIsCreated(int statusCode) {
* @param statusCode The current status code.
*/
default boolean assertStatusCodeIsBadRequest(int statusCode) {
- LOGGER.debug("Validating status code.");
- LOGGER.trace(new ObjectArrayMessage(statusCode));
+ getNativeLogger().debug("Validating status code.");
+ getNativeLogger().trace("Status code was '{}'", statusCode);
this.checkIfStatusCodeIsError(statusCode);
if (statusCode != HttpStatus.SC_BAD_REQUEST) {
throw new InvalidHttpStatusException(statusCode);
@@ -89,7 +86,7 @@ default boolean assertStatusCodeIsBadRequest(int statusCode) {
* @param statusCode The current response.
*/
default void checkIfStatusCodeIsError(int statusCode) {
- LOGGER.debug("Checking if the response is an error.");
+ getNativeLogger().debug("Checking if the response is an error.");
if (statusCode == HttpStatus.SC_NOT_FOUND) {
throw new InvalidUrlForRequestException();
}
diff --git a/pom.xml b/pom.xml
index 19d5e145..6cc2ed2e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -86,13 +86,13 @@
2.38.0
1.1.1
1.3.71
- 2.16.0
1.2.4
1.14
2.1.1
19.0.0
2.11.0.rc1
1.1.1
+ 1.7.32
3.8.1
@@ -239,14 +239,9 @@
- org.apache.logging.log4j
- log4j-api
- ${log4j-api.version}
-
-
- org.apache.logging.log4j
- log4j-core
- ${log4j-api.version}
+ org.slf4j
+ slf4j-api
+ ${slf4j-api.version}
@@ -292,6 +287,13 @@
+
+
+ org.slf4j
+ slf4j-api
+
+
+