diff --git a/CHANGELOG.md b/CHANGELOG.md index 84333db..b61bf5d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,15 +5,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] -### Added -- Logging abstraction layer in the `org.eclipse.keyple.core.util.logging` package. -- `Logger` interface providing methods for trace, debug, info, warn, and error levels. -- `LoggerFactory` for centralized management of loggers and dynamic configuration of providers. -- `LoggerProvider` Service Provider Interface (SPI) to allow integration of various logging frameworks. -- Default temporary `Slf4jLogger` and `Slf4jLoggerProvider` for SLF4J v1.7.32 framework integration. - This logger will be replaced by `NoOpLogger` and `NoOpLoggerProvider` on next major release. ### Changed - Migrated the CI pipeline from Jenkins to GitHub Actions. +### Removed +- Removed useless SLF4J API dependency ## [2.4.0] - 2024-04-12 ### Added diff --git a/NOTICE.md b/NOTICE.md index 81d55e8..47b441b 100644 --- a/NOTICE.md +++ b/NOTICE.md @@ -35,8 +35,3 @@ GSON * License: [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) * Project: https://github.com/google/gson/gson - -SLF4J API - -* License: [MIT](https://spdx.org/licenses/MIT.html) -* Project: http://www.slf4j.org \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 80f1178..2429d4d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -15,9 +15,7 @@ plugins { dependencies { implementation("com.google.code.gson:gson:2.10.1") - implementation("org.slf4j:slf4j-api:1.7.32") - testImplementation("org.slf4j:slf4j-simple:1.7.32") testImplementation(platform("org.junit:junit-bom:5.10.2")) testImplementation("org.junit.jupiter:junit-jupiter") testImplementation("org.junit.vintage:junit-vintage-engine") diff --git a/gradle.properties b/gradle.properties index 2c94f43..3fee5ac 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group = org.eclipse.keyple title = Keyple Util Java Lib description = Utility classes for Keyple components -version = 2.5.0-SNAPSHOT +version = 2.4.1-SNAPSHOT # Java Configuration javaSourceLevel = 1.8 diff --git a/src/main/java/org/eclipse/keyple/core/util/logging/Logger.java b/src/main/java/org/eclipse/keyple/core/util/logging/Logger.java deleted file mode 100644 index c4744c5..0000000 --- a/src/main/java/org/eclipse/keyple/core/util/logging/Logger.java +++ /dev/null @@ -1,127 +0,0 @@ -/* ************************************************************************************** - * Copyright (c) 2026 Calypso Networks Association https://calypsonet.org/ - * - * See the NOTICE file(s) distributed with this work for additional information - * regarding copyright ownership. - * - * This program and the accompanying materials are made available under the terms of the - * Eclipse Public License 2.0 which is available at http://www.eclipse.org/legal/epl-2.0 - * - * SPDX-License-Identifier: EPL-2.0 - ************************************************************************************** */ -package org.eclipse.keyple.core.util.logging; - -/** - * Defines a logging interface with methods for logging at various levels such as trace, debug, - * info, warn, and error. Provides methods to check if a specific logging level is enabled, allowing - * conditional logging based on the current configuration. - * - * @since 2.5.0 - */ -public interface Logger { - - /** - * Returns whether trace logging is enabled. - * - * @return true if trace is enabled, false otherwise - * @since 2.5.0 - */ - boolean isTraceEnabled(); - - /** - * Returns whether debug logging is enabled. - * - * @return true if debug is enabled, false otherwise - * @since 2.5.0 - */ - boolean isDebugEnabled(); - - /** - * Returns whether info logging is enabled. - * - * @return true if info is enabled, false otherwise - * @since 2.5.0 - */ - boolean isInfoEnabled(); - - /** - * Returns whether warn logging is enabled. - * - * @return true if warn is enabled, false otherwise - * @since 2.5.0 - */ - boolean isWarnEnabled(); - - /** - * Returns whether error logging is enabled. - * - * @return true if error is enabled, false otherwise - * @since 2.5.0 - */ - boolean isErrorEnabled(); - - /** - * Logs a message at the trace level. - * - * @param message the message to log - * @param args the arguments to format the message - * @since 2.5.0 - */ - void trace(String message, Object... args); - - /** - * Logs a message at the debug level. - * - * @param message the message to log - * @param args the arguments to format the message - * @since 2.5.0 - */ - void debug(String message, Object... args); - - /** - * Logs a message at the info level. - * - * @param message the message to log - * @param args the arguments to format the message - * @since 2.5.0 - */ - void info(String message, Object... args); - - /** - * Logs a message at the warn level. - * - * @param message the message to log - * @param args the arguments to format the message - * @since 2.5.0 - */ - void warn(String message, Object... args); - - /** - * Logs a message at the error level. - * - * @param message the message to log - * @param args the arguments to format the message - * @since 2.5.0 - */ - void error(String message, Object... args); - - /** - * Logs a message and a throwable at the warn level. - * - * @param message the message to log - * @param throwable the throwable to log - * @param args the arguments to format the message - * @since 2.5.0 - */ - void warn(String message, Throwable throwable, Object... args); - - /** - * Logs a message and a throwable at the error level. - * - * @param message the message to log - * @param throwable the throwable to log - * @param args the arguments to format the message - * @since 2.5.0 - */ - void error(String message, Throwable throwable, Object... args); -} diff --git a/src/main/java/org/eclipse/keyple/core/util/logging/LoggerFactory.java b/src/main/java/org/eclipse/keyple/core/util/logging/LoggerFactory.java deleted file mode 100644 index 1141883..0000000 --- a/src/main/java/org/eclipse/keyple/core/util/logging/LoggerFactory.java +++ /dev/null @@ -1,118 +0,0 @@ -/* ************************************************************************************** - * Copyright (c) 2026 Calypso Networks Association https://calypsonet.org/ - * - * See the NOTICE file(s) distributed with this work for additional information - * regarding copyright ownership. - * - * This program and the accompanying materials are made available under the terms of the - * Eclipse Public License 2.0 which is available at http://www.eclipse.org/legal/epl-2.0 - * - * SPDX-License-Identifier: EPL-2.0 - ************************************************************************************** */ -package org.eclipse.keyple.core.util.logging; - -import java.util.ArrayList; -import java.util.List; -import java.util.ServiceLoader; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.stream.Collectors; -import org.eclipse.keyple.core.util.logging.spi.LoggerProvider; - -/** - * A factory class for creating and managing {@link Logger} instances. - * - *
This class provides a centralized mechanism to retrieve loggers for specific classes and - * allows dynamic configuration of the underlying {@link LoggerProvider} implementation. By default, - * it initializes a {@link LoggerProvider} using the {@link ServiceLoader} mechanism, but it also - * provides a method to programmatically set a custom provider. - * - *
The default implementation uses temporary a {@link Slf4jLoggerProvider} if no suitable {@link - * LoggerProvider} is found, ensuring that logging operations perform no actions. - * - *
This class is thread-safe and ensures only one {@link LoggerProvider} is active at any given
- * time.
- *
- * @since 2.5.0
- */
-public final class LoggerFactory {
-
- private static volatile LoggerProvider provider;
- private static final AtomicBoolean warningEmitted = new AtomicBoolean(false);
-
- private LoggerFactory() {}
-
- static {
- provider = loadProvider();
- }
-
- private static LoggerProvider loadProvider() {
-
- ServiceLoader This method allows overriding the default logger provider with a custom implementation. It
- * is typically used to integrate a specific logging framework or behavior.
- *
- * Android / ProGuard troubleshooting: on Android, if code shrinking removes the
- * provider implementation, the provider must be set explicitly.
- *
- * @param provider the {@link LoggerProvider} instance to set; must not be null
- * @since 2.5.0
- */
- public static void setProvider(LoggerProvider provider) {
- LoggerFactory.provider = provider;
- }
-
- /**
- * Retrieves a {@link Logger} instance associated with the specified class. The logger can be used
- * for logging messages at various levels, enabling class-specific logging behavior.
- *
- * @param clazz the class for which the logger is to be retrieved; must not be null
- * @return the {@link Logger} instance associated with the specified class
- * @since 2.5.0
- */
- public static Logger getLogger(Class> clazz) {
- emitNoLoggerWarningIfNeeded();
- return provider.getLogger(clazz.getName());
- }
-
- private static void emitNoLoggerWarningIfNeeded() {
- if ((provider instanceof Slf4jLoggerProvider || provider instanceof NoOpLoggerProvider)
- && warningEmitted.compareAndSet(false, true)) {
- // Direct use of System.err ONLY for this warning because no logging system is available.
- System.err.println(
- "[Keyple][WARN] No LoggerProvider found on classpath. "
- // + "Logging is disabled (NoOpLogger in use). " FIXME uncomment when major version is
- // bumped
- + "Logging is set to Slf4j version 1.7.32 (Slf4jLogger in use). " // FIXME remove when
- // major version is bumped
- + "Add one of the keyple-logging-xxx-jvm-lib dependencies to enable logging, "
- + "or provide a custom implementation using LoggerFactory.setProvider()."
- + "Android / ProGuard troubleshooting: On Android, make sure the provider "
- + "implementation is not removed by code shrinking, or set it "
- + "explicitly using LoggerFactory.setProvider().");
- }
- }
-}
diff --git a/src/main/java/org/eclipse/keyple/core/util/logging/NoOpLogger.java b/src/main/java/org/eclipse/keyple/core/util/logging/NoOpLogger.java
deleted file mode 100644
index f8ec139..0000000
--- a/src/main/java/org/eclipse/keyple/core/util/logging/NoOpLogger.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/* **************************************************************************************
- * Copyright (c) 2026 Calypso Networks Association https://calypsonet.org/
- *
- * See the NOTICE file(s) distributed with this work for additional information
- * regarding copyright ownership.
- *
- * This program and the accompanying materials are made available under the terms of the
- * Eclipse Public License 2.0 which is available at http://www.eclipse.org/legal/epl-2.0
- *
- * SPDX-License-Identifier: EPL-2.0
- ************************************************************************************** */
-package org.eclipse.keyple.core.util.logging;
-
-/**
- * A no-operation implementation of the {@link Logger} interface.
- *
- * This implementation is used as a placeholder or default logger when logging is not required or
- * needed. All logging methods in this class are effectively no-ops, meaning they do nothing.
- * Additionally, all checks for logging level enablement always return {@code false}.
- *
- * This class is designed to avoid unnecessary overhead while providing a valid {@link Logger}
- * implementation.
- *
- * @since 2.5.0
- */
-final class NoOpLogger implements Logger {
-
- /**
- * {@inheritDoc}
- *
- * @since 2.5.0
- */
- @Override
- public boolean isTraceEnabled() {
- return false;
- }
-
- /**
- * {@inheritDoc}
- *
- * @since 2.5.0
- */
- @Override
- public boolean isDebugEnabled() {
- return false;
- }
-
- /**
- * {@inheritDoc}
- *
- * @since 2.5.0
- */
- @Override
- public boolean isInfoEnabled() {
- return false;
- }
-
- /**
- * {@inheritDoc}
- *
- * @since 2.5.0
- */
- @Override
- public boolean isWarnEnabled() {
- return false;
- }
-
- /**
- * {@inheritDoc}
- *
- * @since 2.5.0
- */
- @Override
- public boolean isErrorEnabled() {
- return false;
- }
-
- /**
- * {@inheritDoc}
- *
- * @since 2.5.0
- */
- @Override
- public void trace(String message, Object... args) {}
-
- /**
- * {@inheritDoc}
- *
- * @since 2.5.0
- */
- @Override
- public void debug(String message, Object... args) {}
-
- /**
- * {@inheritDoc}
- *
- * @since 2.5.0
- */
- @Override
- public void info(String message, Object... args) {}
-
- /**
- * {@inheritDoc}
- *
- * @since 2.5.0
- */
- @Override
- public void warn(String message, Object... args) {}
-
- /**
- * {@inheritDoc}
- *
- * @since 2.5.0
- */
- @Override
- public void error(String message, Object... args) {}
-
- /**
- * {@inheritDoc}
- *
- * @since 2.5.0
- */
- @Override
- public void warn(String message, Throwable throwable, Object... args) {}
-
- /**
- * {@inheritDoc}
- *
- * @since 2.5.0
- */
- @Override
- public void error(String message, Throwable throwable, Object... args) {}
-}
diff --git a/src/main/java/org/eclipse/keyple/core/util/logging/NoOpLoggerProvider.java b/src/main/java/org/eclipse/keyple/core/util/logging/NoOpLoggerProvider.java
deleted file mode 100644
index 36452ff..0000000
--- a/src/main/java/org/eclipse/keyple/core/util/logging/NoOpLoggerProvider.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/* **************************************************************************************
- * Copyright (c) 2026 Calypso Networks Association https://calypsonet.org/
- *
- * See the NOTICE file(s) distributed with this work for additional information
- * regarding copyright ownership.
- *
- * This program and the accompanying materials are made available under the terms of the
- * Eclipse Public License 2.0 which is available at http://www.eclipse.org/legal/epl-2.0
- *
- * SPDX-License-Identifier: EPL-2.0
- ************************************************************************************** */
-package org.eclipse.keyple.core.util.logging;
-
-import org.eclipse.keyple.core.util.logging.spi.LoggerProvider;
-
-/**
- * A no-operation implementation of the {@link LoggerProvider} interface.
- *
- * This implementation returns a {@link NoOpLogger} instance for any logger name. The {@link
- * NoOpLogger} provides a logger that performs no actions for all logging methods, ensuring minimal
- * overhead when logging is not required.
- *
- * This class is typically used as a default or placeholder implementation of {@link
- * LoggerProvider} where explicit logging is not needed.
- *
- * @since 2.5.0
- */
-final class NoOpLoggerProvider implements LoggerProvider {
-
- /**
- * {@inheritDoc}
- *
- * @since 2.5.0
- */
- @Override
- public Logger getLogger(String className) {
- return new NoOpLogger();
- }
-}
diff --git a/src/main/java/org/eclipse/keyple/core/util/logging/Slf4jLogger.java b/src/main/java/org/eclipse/keyple/core/util/logging/Slf4jLogger.java
deleted file mode 100644
index b532aed..0000000
--- a/src/main/java/org/eclipse/keyple/core/util/logging/Slf4jLogger.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/* **************************************************************************************
- * Copyright (c) 2026 Calypso Networks Association https://calypsonet.org/
- *
- * See the NOTICE file(s) distributed with this work for additional information
- * regarding copyright ownership.
- *
- * This program and the accompanying materials are made available under the terms of the
- * Eclipse Public License 2.0 which is available at http://www.eclipse.org/legal/epl-2.0
- *
- * SPDX-License-Identifier: EPL-2.0
- ************************************************************************************** */
-package org.eclipse.keyple.core.util.logging;
-
-/**
- * A temporary default implementation of the {@link Logger} interface that delegates all logging
- * operations to an instance of {@link org.slf4j.Logger}. This class acts as a wrapper around the
- * SLF4J logging framework, providing a consistent logging interface.
- *
- * This implementation is intended to bridge logging functionality provided by SLF4J with the
- * {@link Logger} interface, enabling compatibility and flexibility in logging methods.
- *
- * All methods in this class directly delegate to the corresponding methods in the SLF4J {@link
- * org.slf4j.Logger} instance provided during construction.
- *
- * @since 2.5.0
- */
-final class Slf4jLogger implements Logger {
-
- private final org.slf4j.Logger delegate;
-
- /**
- * Constructs a new {@code Slf4jLogger} instance that delegates all logging operations to the
- * provided SLF4J {@link org.slf4j.Logger} instance.
- *
- * @param delegate The SLF4J {@link org.slf4j.Logger} instance to which all logging operations
- * will be delegated. Must not be null.
- * @since 2.5.0
- */
- Slf4jLogger(org.slf4j.Logger delegate) {
- this.delegate = delegate;
- }
-
- /**
- * {@inheritDoc}
- *
- * @since 2.5.0
- */
- @Override
- public boolean isTraceEnabled() {
- return delegate.isTraceEnabled();
- }
-
- /**
- * {@inheritDoc}
- *
- * @since 2.5.0
- */
- @Override
- public boolean isDebugEnabled() {
- return delegate.isDebugEnabled();
- }
-
- /**
- * {@inheritDoc}
- *
- * @since 2.5.0
- */
- @Override
- public boolean isInfoEnabled() {
- return delegate.isInfoEnabled();
- }
-
- /**
- * {@inheritDoc}
- *
- * @since 2.5.0
- */
- @Override
- public boolean isWarnEnabled() {
- return delegate.isWarnEnabled();
- }
-
- /**
- * {@inheritDoc}
- *
- * @since 2.5.0
- */
- @Override
- public boolean isErrorEnabled() {
- return delegate.isErrorEnabled();
- }
-
- /**
- * {@inheritDoc}
- *
- * @since 2.5.0
- */
- @Override
- public void trace(String message, Object... args) {
- delegate.trace(message, args);
- }
-
- /**
- * {@inheritDoc}
- *
- * @since 2.5.0
- */
- @Override
- public void debug(String message, Object... args) {
- delegate.debug(message, args);
- }
-
- /**
- * {@inheritDoc}
- *
- * @since 2.5.0
- */
- @Override
- public void info(String message, Object... args) {
- delegate.info(message, args);
- }
-
- /**
- * {@inheritDoc}
- *
- * @since 2.5.0
- */
- @Override
- public void warn(String message, Object... args) {
- delegate.warn(message, args);
- }
-
- /**
- * {@inheritDoc}
- *
- * @since 2.5.0
- */
- @Override
- public void error(String message, Object... args) {
- delegate.error(message, args);
- }
-
- /**
- * {@inheritDoc}
- *
- * @since 2.5.0
- */
- @Override
- public void warn(String message, Throwable throwable, Object... args) {
- delegate.warn(message, args, throwable);
- }
-
- /**
- * {@inheritDoc}
- *
- * @since 2.5.0
- */
- @Override
- public void error(String message, Throwable throwable, Object... args) {
- delegate.error(message, args, throwable);
- }
-}
diff --git a/src/main/java/org/eclipse/keyple/core/util/logging/Slf4jLoggerProvider.java b/src/main/java/org/eclipse/keyple/core/util/logging/Slf4jLoggerProvider.java
deleted file mode 100644
index ba34cee..0000000
--- a/src/main/java/org/eclipse/keyple/core/util/logging/Slf4jLoggerProvider.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/* **************************************************************************************
- * Copyright (c) 2026 Calypso Networks Association https://calypsonet.org/
- *
- * See the NOTICE file(s) distributed with this work for additional information
- * regarding copyright ownership.
- *
- * This program and the accompanying materials are made available under the terms of the
- * Eclipse Public License 2.0 which is available at http://www.eclipse.org/legal/epl-2.0
- *
- * SPDX-License-Identifier: EPL-2.0
- ************************************************************************************** */
-package org.eclipse.keyple.core.util.logging;
-
-import org.eclipse.keyple.core.util.logging.spi.LoggerProvider;
-
-/**
- * Provides a temporary defaul implementation of the {@link LoggerProvider} interface that creates
- * loggers leveraging the SLF4J logging framework. Specifically, this class wraps SLF4J's {@link
- * org.slf4j.Logger}, returning instances of {@link Slf4jLogger}, which act as adapters between the
- * {@link LoggerProvider} interface and SLF4J.
- *
- * This implementation is intended to standardize the creation of logger instances while
- * utilizing SLF4J for actual logging operations, ensuring compatibility with SLF4J-based logging
- * systems.
- *
- * Thread-safe and suitable for use in multi-threaded applications, this class guarantees
- * consistent logger instances for a given class name.
- *
- * @since 2.5.0
- */
-class Slf4jLoggerProvider implements LoggerProvider {
-
- /**
- * {@inheritDoc}
- *
- * @since 2.5.0
- */
- @Override
- public Logger getLogger(String className) {
- return new Slf4jLogger(org.slf4j.LoggerFactory.getLogger(className));
- }
-}
diff --git a/src/main/java/org/eclipse/keyple/core/util/logging/package-info.java b/src/main/java/org/eclipse/keyple/core/util/logging/package-info.java
deleted file mode 100644
index 56d327d..0000000
--- a/src/main/java/org/eclipse/keyple/core/util/logging/package-info.java
+++ /dev/null
@@ -1,6 +0,0 @@
-/**
- * Logging abstraction layer.
- *
- * @since 2.5.0
- */
-package org.eclipse.keyple.core.util.logging;
diff --git a/src/main/java/org/eclipse/keyple/core/util/logging/spi/LoggerProvider.java b/src/main/java/org/eclipse/keyple/core/util/logging/spi/LoggerProvider.java
deleted file mode 100644
index 4663963..0000000
--- a/src/main/java/org/eclipse/keyple/core/util/logging/spi/LoggerProvider.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/* **************************************************************************************
- * Copyright (c) 2026 Calypso Networks Association https://calypsonet.org/
- *
- * See the NOTICE file(s) distributed with this work for additional information
- * regarding copyright ownership.
- *
- * This program and the accompanying materials are made available under the terms of the
- * Eclipse Public License 2.0 which is available at http://www.eclipse.org/legal/epl-2.0
- *
- * SPDX-License-Identifier: EPL-2.0
- ************************************************************************************** */
-package org.eclipse.keyple.core.util.logging.spi;
-
-import org.eclipse.keyple.core.util.logging.Logger;
-
-/**
- * Provides an abstraction for obtaining {@link Logger} instances. This interface centralizes the
- * creation and retrieval of loggers by name, allowing different implementations to support various
- * logging frameworks or custom logging behavior.
- *
- * Implementations of this interface should ensure thread-safety and provide a consistent logger
- * instance for a given name.
- *
- * @since 2.5.0
- */
-public interface LoggerProvider {
-
- /**
- * Retrieves a {@link Logger} instance associated with the specified class name. The returned
- * logger can be used for logging messages at different levels.
- *
- * @param className the name of the logger to retrieve
- * @return the {@link Logger} instance associated with the specified class name
- * @since 2.5.0
- */
- Logger getLogger(String className);
-}
diff --git a/src/main/java/org/eclipse/keyple/core/util/logging/spi/package-info.java b/src/main/java/org/eclipse/keyple/core/util/logging/spi/package-info.java
deleted file mode 100644
index 655bd32..0000000
--- a/src/main/java/org/eclipse/keyple/core/util/logging/spi/package-info.java
+++ /dev/null
@@ -1,6 +0,0 @@
-/**
- * SPI interfaces associated with the logging abstraction layer.
- *
- * @since 2.5.0
- */
-package org.eclipse.keyple.core.util.logging.spi;
diff --git a/src/main/uml/api_class_diagram.puml b/src/main/uml/api_class_diagram.puml
index 85240f2..ef7d20b 100644
--- a/src/main/uml/api_class_diagram.puml
+++ b/src/main/uml/api_class_diagram.puml
@@ -1,6 +1,6 @@
@startuml
title
- Keyple - keyple-util-java-lib - 2.5.+ (2026-01-20)
+ Keyple - keyple-util-java-lib - 2.3.+ (2024-04-10)
end title
' == THEME ==
@@ -174,33 +174,6 @@ package "org.eclipse.keyple.core.util" as util {
...
}
}
- package logging {
- +class "ContactCardCommonProtocol" as ContactCardCommonProtocol {
ISO_7816_3
@@ -221,11 +194,6 @@ package "org.eclipse.keyple.core.util" as util {
' Associations
-LoggerFactory .right.> LoggerProvider #C_USE : use >
-LoggerFactory ..> Logger #C_LINK : provide >
-
-LoggerProvider ..> Logger #C_LINK : provide >
-
' == LAYOUT ==
ByteArrayUtil -[hidden]- JsonUtil
@@ -239,7 +207,5 @@ Assert -[hidden]- BerTlvUtil
package util #C_GREY1 {}
package util.json #C_GREY2 {}
package util.protocol #C_GREY2 {}
-package util.logging #C_GREY2 {}
-package util.logging.spi #C_GREY3 {}
@enduml
\ No newline at end of file
diff --git a/src/main/uml/api_class_diagram.svg b/src/main/uml/api_class_diagram.svg
index e5ba237..fcc04fd 100644
--- a/src/main/uml/api_class_diagram.svg
+++ b/src/main/uml/api_class_diagram.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/src/test/java/org/eclipse/keyple/core/util/logging/LoggerFactoryTest.java b/src/test/java/org/eclipse/keyple/core/util/logging/LoggerFactoryTest.java
deleted file mode 100644
index fa70a96..0000000
--- a/src/test/java/org/eclipse/keyple/core/util/logging/LoggerFactoryTest.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/* **************************************************************************************
- * Copyright (c) 2026 Calypso Networks Association https://calypsonet.org/
- *
- * See the NOTICE file(s) distributed with this work for additional information
- * regarding copyright ownership.
- *
- * This program and the accompanying materials are made available under the terms of the
- * Eclipse Public License 2.0 which is available at http://www.eclipse.org/legal/epl-2.0
- *
- * SPDX-License-Identifier: EPL-2.0
- ************************************************************************************** */
-package org.eclipse.keyple.core.util.logging;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.Mockito.*;
-
-import org.eclipse.keyple.core.util.logging.spi.LoggerProvider;
-import org.junit.Test;
-
-public class LoggerFactoryTest {
-
- @Test
- public void getLogger_shouldReturnLoggerFromProvider() {
- // Given
- LoggerProvider mockProvider = mock(LoggerProvider.class);
- Logger mockLogger = mock(Logger.class);
- when(mockProvider.getLogger(anyString())).thenReturn(mockLogger);
-
- // When
- LoggerFactory.setProvider(mockProvider);
- Logger logger = LoggerFactory.getLogger(LoggerFactoryTest.class);
-
- // Then
- assertThat(logger).isSameAs(mockLogger);
- verify(mockProvider).getLogger(LoggerFactoryTest.class.getName());
- }
-
- @Test
- public void setProvider_shouldAllowOverride() {
- // Given
- LoggerProvider mockProvider = mock(LoggerProvider.class);
-
- // When
- LoggerFactory.setProvider(mockProvider);
- LoggerFactory.getLogger(String.class);
-
- // Then
- verify(mockProvider).getLogger(String.class.getName());
- }
-}
diff --git a/src/test/java/org/eclipse/keyple/core/util/logging/NoOpLoggerProviderTest.java b/src/test/java/org/eclipse/keyple/core/util/logging/NoOpLoggerProviderTest.java
deleted file mode 100644
index 381d263..0000000
--- a/src/test/java/org/eclipse/keyple/core/util/logging/NoOpLoggerProviderTest.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/* **************************************************************************************
- * Copyright (c) 2026 Calypso Networks Association https://calypsonet.org/
- *
- * See the NOTICE file(s) distributed with this work for additional information
- * regarding copyright ownership.
- *
- * This program and the accompanying materials are made available under the terms of the
- * Eclipse Public License 2.0 which is available at http://www.eclipse.org/legal/epl-2.0
- *
- * SPDX-License-Identifier: EPL-2.0
- ************************************************************************************** */
-package org.eclipse.keyple.core.util.logging;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-import org.junit.Test;
-
-public class NoOpLoggerProviderTest {
-
- @Test
- public void shouldReturnNoOpLogger() {
- NoOpLoggerProvider provider = new NoOpLoggerProvider();
- assertThat(provider.getLogger("test.logger")).isInstanceOf(NoOpLogger.class);
- }
-}
diff --git a/src/test/java/org/eclipse/keyple/core/util/logging/NoOpLoggerTest.java b/src/test/java/org/eclipse/keyple/core/util/logging/NoOpLoggerTest.java
deleted file mode 100644
index 5a15716..0000000
--- a/src/test/java/org/eclipse/keyple/core/util/logging/NoOpLoggerTest.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/* **************************************************************************************
- * Copyright (c) 2026 Calypso Networks Association https://calypsonet.org/
- *
- * See the NOTICE file(s) distributed with this work for additional information
- * regarding copyright ownership.
- *
- * This program and the accompanying materials are made available under the terms of the
- * Eclipse Public License 2.0 which is available at http://www.eclipse.org/legal/epl-2.0
- *
- * SPDX-License-Identifier: EPL-2.0
- ************************************************************************************** */
-package org.eclipse.keyple.core.util.logging;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.assertThatCode;
-
-import org.junit.Test;
-
-public class NoOpLoggerTest {
-
- @Test
- public void levelsShouldBeDisabled() {
- NoOpLogger logger = new NoOpLogger();
- assertThat(logger.isTraceEnabled()).isFalse();
- assertThat(logger.isDebugEnabled()).isFalse();
- assertThat(logger.isInfoEnabled()).isFalse();
- assertThat(logger.isWarnEnabled()).isFalse();
- assertThat(logger.isErrorEnabled()).isFalse();
- }
-
- @Test
- public void methodsShouldNotThrowException() {
- NoOpLogger logger = new NoOpLogger();
- assertThatCode(
- () -> {
- logger.trace("message", "arg");
- logger.debug("message", "arg");
- logger.info("message", "arg");
- logger.warn("message", "arg");
- logger.error("message", "arg");
- logger.warn("message", new Exception(), "arg");
- logger.error("message", new Exception(), "arg");
- })
- .doesNotThrowAnyException();
- }
-}
diff --git a/src/test/java/org/eclipse/keyple/core/util/logging/Slf4jLoggerProviderTest.java b/src/test/java/org/eclipse/keyple/core/util/logging/Slf4jLoggerProviderTest.java
deleted file mode 100644
index 0686ad2..0000000
--- a/src/test/java/org/eclipse/keyple/core/util/logging/Slf4jLoggerProviderTest.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/* **************************************************************************************
- * Copyright (c) 2026 Calypso Networks Association https://calypsonet.org/
- *
- * See the NOTICE file(s) distributed with this work for additional information
- * regarding copyright ownership.
- *
- * This program and the accompanying materials are made available under the terms of the
- * Eclipse Public License 2.0 which is available at http://www.eclipse.org/legal/epl-2.0
- *
- * SPDX-License-Identifier: EPL-2.0
- ************************************************************************************** */
-package org.eclipse.keyple.core.util.logging;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-import org.junit.Test;
-
-public class Slf4jLoggerProviderTest {
-
- @Test
- public void shouldReturnSlf4jLogger() {
- Slf4jLoggerProvider provider = new Slf4jLoggerProvider();
- Logger logger = provider.getLogger("test.logger");
-
- assertThat(logger).isInstanceOf(Slf4jLogger.class);
- }
-}
diff --git a/src/test/java/org/eclipse/keyple/core/util/logging/Slf4jLoggerTest.java b/src/test/java/org/eclipse/keyple/core/util/logging/Slf4jLoggerTest.java
deleted file mode 100644
index 509f4f0..0000000
--- a/src/test/java/org/eclipse/keyple/core/util/logging/Slf4jLoggerTest.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/* **************************************************************************************
- * Copyright (c) 2026 Calypso Networks Association https://calypsonet.org/
- *
- * See the NOTICE file(s) distributed with this work for additional information
- * regarding copyright ownership.
- *
- * This program and the accompanying materials are made available under the terms of the
- * Eclipse Public License 2.0 which is available at http://www.eclipse.org/legal/epl-2.0
- *
- * SPDX-License-Identifier: EPL-2.0
- ************************************************************************************** */
-package org.eclipse.keyple.core.util.logging;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.Mockito.*;
-
-import org.junit.Before;
-import org.junit.Test;
-
-public class Slf4jLoggerTest {
-
- private org.slf4j.Logger mockDelegate;
- private Slf4jLogger slf4jLogger;
-
- @Before
- public void setUp() {
- mockDelegate = mock(org.slf4j.Logger.class);
- slf4jLogger = new Slf4jLogger(mockDelegate);
- }
-
- @Test
- public void shouldDelegateEnabledChecks() {
- when(mockDelegate.isTraceEnabled()).thenReturn(true);
- assertThat(slf4jLogger.isTraceEnabled()).isTrue();
-
- when(mockDelegate.isDebugEnabled()).thenReturn(true);
- assertThat(slf4jLogger.isDebugEnabled()).isTrue();
-
- when(mockDelegate.isInfoEnabled()).thenReturn(true);
- assertThat(slf4jLogger.isInfoEnabled()).isTrue();
-
- when(mockDelegate.isWarnEnabled()).thenReturn(true);
- assertThat(slf4jLogger.isWarnEnabled()).isTrue();
-
- when(mockDelegate.isErrorEnabled()).thenReturn(true);
- assertThat(slf4jLogger.isErrorEnabled()).isTrue();
- }
-
- @Test
- public void shouldDelegateLogMethods() {
- Object[] args = {"arg1"};
-
- slf4jLogger.trace("msg", args);
- verify(mockDelegate).trace("msg", args);
-
- slf4jLogger.debug("msg", args);
- verify(mockDelegate).debug("msg", args);
-
- slf4jLogger.info("msg", args);
- verify(mockDelegate).info("msg", args);
-
- slf4jLogger.warn("msg", args);
- verify(mockDelegate).warn("msg", args);
-
- slf4jLogger.error("msg", args);
- verify(mockDelegate).error("msg", args);
- }
-
- @Test
- public void shouldDelegateLogWithThrowableMethods() {
- Throwable t = new RuntimeException();
- Object[] args = {"arg1"};
-
- slf4jLogger.warn("msg", t, args);
- verify(mockDelegate).warn("msg", args, t);
-
- slf4jLogger.error("msg", t, args);
- verify(mockDelegate).error("msg", args, t);
- }
-}
diff --git a/src/test/resources/simplelogger.properties b/src/test/resources/simplelogger.properties
deleted file mode 100644
index 3f352a5..0000000
--- a/src/test/resources/simplelogger.properties
+++ /dev/null
@@ -1,36 +0,0 @@
-# SLF4J's SimpleLogger configuration file
-# Simple implementation of Logger that sends all enabled log messages, for all defined loggers, to System.err.
-
-# Default logging detail level for all instances of SimpleLogger.
-# Must be one of ("trace", "debug", "info", "warn", or "error").
-# If not specified, defaults to "info".
-org.slf4j.simpleLogger.defaultLogLevel=info
-
-# Logging detail level for a SimpleLogger instance named "xxxxx".
-# Must be one of ("trace", "debug", "info", "warn", or "error").
-# If not specified, the default logging detail level is used.
-#org.slf4j.simpleLogger.log.xxxxx=
-
-# Set to true if you want the current date and time to be included in output messages.
-# Default is false, and will output the number of milliseconds elapsed since startup.
-org.slf4j.simpleLogger.showDateTime=true
-
-# The date and time format to be used in the output messages.
-# The pattern describing the date and time format is the same that is used in java.text.SimpleDateFormat.
-# If the format is not specified or is invalid, the default format is used.
-# The default format is yyyy-MM-dd HH:mm:ss:SSS Z.
-org.slf4j.simpleLogger.dateTimeFormat=[HH:mm:ss:SSS]
-
-# Set to true if you want to output the current thread name.
-# Defaults to true.
-org.slf4j.simpleLogger.showThreadName=true
-
-# Set to true if you want the Logger instance name to be included in output messages.
-# Defaults to true.
-org.slf4j.simpleLogger.showLogName=false
-
-# Set to true if you want the last component of the name to be included in output messages.
-# Defaults to false.
-org.slf4j.simpleLogger.showShortLogName=true
-
-org.slf4j.simpleLogger.levelInBrackets=true
\ No newline at end of file