You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2022/05/26 10:12:46 UTC

[camel] branch main updated (d264793aa97 -> 9ac7a51272c)

This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a change to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git


    from d264793aa97 Upgrades
     new 71f4773eca0 Milo 0.6.6
     new 9ac7a51272c CAMEL-18144: Upgrade to Milo 0.6.6

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 camel-dependencies/pom.xml                         |  2 +-
 components/camel-milo/pom.xml                      | 12 ++++++
 .../milo/client/MiloClientEndpointConfigurer.java  |  6 +++
 .../milo/client/MiloClientEndpointUriFactory.java  |  3 +-
 .../milo/server/MiloServerComponentConfigurer.java |  4 +-
 .../camel/component/milo/client/milo-client.json   |  1 +
 .../camel/component/milo/server/milo-server.json   |  2 +-
 .../component/milo/client/MiloClientConsumer.java  |  7 +++
 .../component/milo/client/MiloClientEndpoint.java  | 14 ++++++
 .../milo/client/internal/SubscriptionManager.java  |  4 +-
 .../component/milo/server/MiloServerComponent.java | 17 ++++----
 .../milo/server/internal/CamelNamespace.java       | 30 +++++++++----
 .../milo/server/internal/CamelServerItem.java      | 50 ++++++++++++++--------
 .../component/milo/AbstractMiloServerTest.java     |  2 +-
 .../MiloClientCachingConnectionManagerTest.java    | 11 ++++-
 .../milo/MonitorItemMultiConnectionsCertTest.java  | 14 ++++++
 .../milo/MonitorItemMultiConnectionsTest.java      | 14 ++++++
 .../camel/component/milo/MonitorItemTest.java      | 32 +++++++++++---
 .../camel/component/milo/ReadValuesClientTest.java | 14 ++++++
 .../camel/component/milo/WriteClientTest.java      | 14 ++++++
 .../component/milo/browse/BrowseServerTest.java    | 14 ++++++
 .../camel/component/milo/call/CallClientTest.java  | 33 +++++++++++++-
 .../component/milo/call/MockCamelNamespace.java    | 28 +++++++++---
 .../camel/component/milo/client/NodeIdTest.java    | 14 ++++++
 .../component/milo/converter/ConverterTest.java    | 14 ++++++
 .../component/milo/server/ServerLocalTest.java     | 12 +++++-
 .../server/ServerSetCertificateManagerTest.java    | 14 ++++++
 .../milo/server/ServerSetSecurityPoliciesTest.java | 14 ++++++
 parent/pom.xml                                     |  2 +-
 29 files changed, 337 insertions(+), 61 deletions(-)


[camel] 01/02: Milo 0.6.6

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 71f4773eca00e7d25b565e3a508610efc9bb11bd
Author: Klug Andreas (CI/XDM1) <kg...@bosch.com>
AuthorDate: Wed May 25 15:54:26 2022 +0200

    Milo 0.6.6
---
 camel-dependencies/pom.xml                         |  2 +-
 components/camel-milo/pom.xml                      | 12 +++++
 .../component/milo/client/MiloClientConsumer.java  |  9 +++-
 .../component/milo/client/MiloClientEndpoint.java  | 16 ++++++-
 .../milo/client/internal/SubscriptionManager.java  |  4 +-
 .../component/milo/server/MiloServerComponent.java | 17 +++----
 .../milo/server/internal/CamelNamespace.java       | 38 ++++++++++-----
 .../milo/server/internal/CamelServerItem.java      | 55 +++++++++++++---------
 .../component/milo/AbstractMiloServerTest.java     |  2 +-
 .../MiloClientCachingConnectionManagerTest.java    | 11 ++++-
 .../milo/MonitorItemMultiConnectionsCertTest.java  | 16 ++++++-
 .../milo/MonitorItemMultiConnectionsTest.java      | 16 ++++++-
 .../camel/component/milo/MonitorItemTest.java      | 38 +++++++++++----
 .../camel/component/milo/ReadValuesClientTest.java | 16 ++++++-
 .../camel/component/milo/WriteClientTest.java      | 18 ++++++-
 .../component/milo/browse/BrowseServerTest.java    | 16 ++++++-
 .../camel/component/milo/call/CallClientTest.java  | 33 ++++++++++++-
 .../component/milo/call/MockCamelNamespace.java    | 30 ++++++++----
 .../camel/component/milo/client/NodeIdTest.java    | 16 ++++++-
 .../component/milo/converter/ConverterTest.java    | 16 ++++++-
 .../component/milo/server/ServerLocalTest.java     | 14 +++++-
 .../server/ServerSetCertificateManagerTest.java    | 16 ++++++-
 .../milo/server/ServerSetSecurityPoliciesTest.java | 16 ++++++-
 23 files changed, 348 insertions(+), 79 deletions(-)

diff --git a/camel-dependencies/pom.xml b/camel-dependencies/pom.xml
index 78b2c318694..2674df36cc0 100644
--- a/camel-dependencies/pom.xml
+++ b/camel-dependencies/pom.xml
@@ -404,7 +404,7 @@
     <microprofile-fault-tolerance-version>3.0</microprofile-fault-tolerance-version>
     <microprofile-metrics-version>3.0.1</microprofile-metrics-version>
     <milo-guava-version>26.0-jre</milo-guava-version>
-    <milo-version>0.3.7</milo-version>
+    <milo-version>0.6.6</milo-version>
     <mina-version>2.1.5</mina-version>
     <minidns-version>0.3.4</minidns-version>
     <minimal-json-version>0.9.5</minimal-json-version>
diff --git a/components/camel-milo/pom.xml b/components/camel-milo/pom.xml
index bc45a3c79c4..3a705ff7442 100644
--- a/components/camel-milo/pom.xml
+++ b/components/camel-milo/pom.xml
@@ -56,6 +56,18 @@
             <version>${milo-version}</version>
         </dependency>
 
+        <dependency>
+            <groupId>org.eclipse.milo</groupId>
+            <artifactId>stack-core</artifactId>
+            <version>${milo-version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.eclipse.milo</groupId>
+            <artifactId>dictionary-manager</artifactId>
+            <version>${milo-version}</version>
+        </dependency>
+
         <dependency>
             <groupId>com.google.guava</groupId>
             <artifactId>guava</artifactId>
diff --git a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConsumer.java b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConsumer.java
index 60689104638..15572a0cdd2 100644
--- a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConsumer.java
+++ b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConsumer.java
@@ -35,11 +35,13 @@ public class MiloClientConsumer extends DefaultConsumer {
     private MonitorHandle handle;
     private ExpandedNodeId node;
     private Double samplingInterval;
+    private boolean omitNullValues;
 
     public MiloClientConsumer(final MiloClientEndpoint endpoint, final Processor processor) {
         super(endpoint, processor);
         this.node = endpoint.getNodeId();
         this.samplingInterval = endpoint.getSamplingInterval();
+        this.omitNullValues = endpoint.isOmitNullValues();
     }
 
     @Override
@@ -68,7 +70,12 @@ public class MiloClientConsumer extends DefaultConsumer {
 
     private void handleValueUpdate(final DataValue value) {
         LOG.debug("Handle item update - {} = {}", node, value);
-
+        
+        if(omitNullValues && (value == null || value.getValue() == null || value.getValue().getValue() == null)){
+            LOG.debug("Handle item update omitted due to null values (see omitNullValues parameter)");
+            return;
+        }
+        
         final Exchange exchange = createExchange(true);
         try {
             mapToMessage(value, exchange.getMessage());
diff --git a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientEndpoint.java b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientEndpoint.java
index a1b25db531c..e7a6de742f1 100644
--- a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientEndpoint.java
+++ b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientEndpoint.java
@@ -77,7 +77,13 @@ public class MiloClientEndpoint extends DefaultEndpoint {
      */
     @UriParam
     private boolean defaultAwaitWrites;
-
+    
+    /**
+     * Omit notifications in case of null values
+     */
+    @UriParam(defaultValue = "true")
+    private boolean omitNullValues = true;
+    
     @UriParam
     private MonitorFilterConfiguration monitorFilterConfiguration;
 
@@ -189,4 +195,12 @@ public class MiloClientEndpoint extends DefaultEndpoint {
     public void setMonitorFilterType(MonitorFilterType monitorFilterType) {
         this.monitorFilterType = monitorFilterType;
     }
+    
+    public boolean isOmitNullValues() {
+        return omitNullValues;
+    }
+    
+    public void setOmitNullValues(boolean omitNullValues) {
+        this.omitNullValues = omitNullValues;
+    }
 }
diff --git a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/internal/SubscriptionManager.java b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/internal/SubscriptionManager.java
index 0627485da42..d0748eda832 100644
--- a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/internal/SubscriptionManager.java
+++ b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/internal/SubscriptionManager.java
@@ -162,7 +162,7 @@ public class SubscriptionManager {
                 return null;
             }
             final MonitoringFilter monitorFilter = this.monitorFilterConfiguration.createMonitoringFilter();
-            return ExtensionObject.encode(client.getSerializationContext(), monitorFilter);
+            return ExtensionObject.encode(client.getStaticSerializationContext(), monitorFilter);
         }
     }
 
@@ -203,7 +203,7 @@ public class SubscriptionManager {
                     Double samplingInterval = s.getSamplingInterval();
 
                     final MonitoringParameters parameters = new MonitoringParameters(
-                            entry.getKey(), samplingInterval, s.createMonitoringFilter(client), null, null);
+                            entry.getKey(), samplingInterval, s.createMonitoringFilter(client), null, true);
                     items.add(new MonitoredItemCreateRequest(itemId, MonitoringMode.Reporting, parameters));
                 }
             }
diff --git a/components/camel-milo/src/main/java/org/apache/camel/component/milo/server/MiloServerComponent.java b/components/camel-milo/src/main/java/org/apache/camel/component/milo/server/MiloServerComponent.java
index d8c3b072ad0..f4013d5d2a7 100644
--- a/components/camel-milo/src/main/java/org/apache/camel/component/milo/server/MiloServerComponent.java
+++ b/components/camel-milo/src/main/java/org/apache/camel/component/milo/server/MiloServerComponent.java
@@ -54,7 +54,6 @@ import org.eclipse.milo.opcua.stack.core.UaException;
 import org.eclipse.milo.opcua.stack.core.security.CertificateManager;
 import org.eclipse.milo.opcua.stack.core.security.CertificateValidator;
 import org.eclipse.milo.opcua.stack.core.security.DefaultCertificateManager;
-import org.eclipse.milo.opcua.stack.core.security.DefaultCertificateValidator;
 import org.eclipse.milo.opcua.stack.core.security.DefaultTrustListManager;
 import org.eclipse.milo.opcua.stack.core.security.SecurityPolicy;
 import org.eclipse.milo.opcua.stack.core.transport.TransportProfile;
@@ -64,6 +63,8 @@ import org.eclipse.milo.opcua.stack.core.types.enumerated.UserTokenType;
 import org.eclipse.milo.opcua.stack.core.types.structured.BuildInfo;
 import org.eclipse.milo.opcua.stack.core.types.structured.UserTokenPolicy;
 import org.eclipse.milo.opcua.stack.server.EndpointConfiguration;
+import org.eclipse.milo.opcua.stack.server.security.DefaultServerCertificateValidator;
+import org.eclipse.milo.opcua.stack.server.security.ServerCertificateValidator;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -119,7 +120,7 @@ public class MiloServerComponent extends DefaultComponent {
     @Metadata(label = "security")
     private String defaultCertificateValidator;
     @Metadata(label = "security")
-    private CertificateValidator certificateValidator;
+    private ServerCertificateValidator certificateValidator;
     @Metadata(label = "security")
     private X509Certificate certificate;
 
@@ -324,19 +325,19 @@ public class MiloServerComponent extends DefaultComponent {
                 .build();
     }
 
-    private static final class DenyAllCertificateValidator implements CertificateValidator {
-        public static final CertificateValidator INSTANCE = new DenyAllCertificateValidator();
+    private static final class DenyAllCertificateValidator implements ServerCertificateValidator {
+        public static final ServerCertificateValidator INSTANCE = new DenyAllCertificateValidator();
 
         private DenyAllCertificateValidator() {
         }
 
         @Override
-        public void validate(final X509Certificate certificate) throws UaException {
+        public void validateCertificateChain(List<X509Certificate> list, String s) throws UaException {
             throw new UaException(StatusCodes.Bad_CertificateUseNotAllowed);
         }
 
         @Override
-        public void verifyTrustChain(List<X509Certificate> certificateChain) throws UaException {
+        public void validateCertificateChain(List<X509Certificate> list) throws UaException {
             throw new UaException(StatusCodes.Bad_CertificateUseNotAllowed);
         }
     }
@@ -581,7 +582,7 @@ public class MiloServerComponent extends DefaultComponent {
     /**
      * Validator for client certificates
      */
-    public void setCertificateValidator(final CertificateValidator certificateValidator) {
+    public void setCertificateValidator(final ServerCertificateValidator certificateValidator) {
         this.certificateValidator = certificateValidator;
     }
 
@@ -592,7 +593,7 @@ public class MiloServerComponent extends DefaultComponent {
         this.defaultCertificateValidator = defaultCertificateValidator;
         try {
             DefaultTrustListManager trustListManager = new DefaultTrustListManager(new File(defaultCertificateValidator));
-            this.certificateValidator = new DefaultCertificateValidator(trustListManager);
+            this.certificateValidator = new DefaultServerCertificateValidator(trustListManager);
         } catch (IOException e) {
             throw new RuntimeCamelException(e);
         }
diff --git a/components/camel-milo/src/main/java/org/apache/camel/component/milo/server/internal/CamelNamespace.java b/components/camel-milo/src/main/java/org/apache/camel/component/milo/server/internal/CamelNamespace.java
index 924f2da7a95..2c7720501a6 100644
--- a/components/camel-milo/src/main/java/org/apache/camel/component/milo/server/internal/CamelNamespace.java
+++ b/components/camel-milo/src/main/java/org/apache/camel/component/milo/server/internal/CamelNamespace.java
@@ -23,8 +23,9 @@ import java.util.Map;
 import org.eclipse.milo.opcua.sdk.core.Reference;
 import org.eclipse.milo.opcua.sdk.server.OpcUaServer;
 import org.eclipse.milo.opcua.sdk.server.api.DataItem;
-import org.eclipse.milo.opcua.sdk.server.api.ManagedNamespace;
+import org.eclipse.milo.opcua.sdk.server.api.ManagedNamespaceWithLifecycle;
 import org.eclipse.milo.opcua.sdk.server.api.MonitoredItem;
+import org.eclipse.milo.opcua.sdk.server.dtd.DataTypeDictionaryManager;
 import org.eclipse.milo.opcua.sdk.server.nodes.UaFolderNode;
 import org.eclipse.milo.opcua.sdk.server.nodes.UaObjectNode;
 import org.eclipse.milo.opcua.sdk.server.util.SubscriptionModel;
@@ -32,8 +33,10 @@ import org.eclipse.milo.opcua.stack.core.Identifiers;
 import org.eclipse.milo.opcua.stack.core.types.builtin.LocalizedText;
 import org.eclipse.milo.opcua.stack.core.types.builtin.NodeId;
 import org.eclipse.milo.opcua.stack.core.types.builtin.QualifiedName;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
-public class CamelNamespace extends ManagedNamespace {
+public class CamelNamespace extends ManagedNamespaceWithLifecycle {
 
     private final SubscriptionModel subscriptionModel;
 
@@ -41,16 +44,24 @@ public class CamelNamespace extends ManagedNamespace {
     private UaFolderNode folder;
 
     private final Map<String, CamelServerItem> itemMap = new HashMap<>();
-
+    
+    private final DataTypeDictionaryManager dictionaryManager;
+    
+    private final Logger log = LoggerFactory.getLogger(CamelNamespace.class);
+    
     public CamelNamespace(final String namespaceUri, final OpcUaServer server) {
         super(server, namespaceUri);
-
+    
         this.subscriptionModel = new SubscriptionModel(server, this);
+        this.dictionaryManager = new DataTypeDictionaryManager(getNodeContext(), namespaceUri);
+    
+        getLifecycleManager().addLifecycle(dictionaryManager);
+        getLifecycleManager().addLifecycle(subscriptionModel);
+    
+        getLifecycleManager().addStartupTask(this::createNodes);
     }
-
-    @Override
-    protected void onStartup() {
-        super.onStartup();
+    
+    protected void createNodes() {
         // create structure
 
         final NodeId nodeId = newNodeId("camel");
@@ -63,13 +74,13 @@ public class CamelNamespace extends ManagedNamespace {
         final NodeId nodeId2 = newNodeId("items");
         final QualifiedName name2 = newQualifiedName("items");
         final LocalizedText displayName2 = LocalizedText.english("Items");
-
-        this.itemsObject = UaObjectNode.builder(getNodeContext())
+        
+        this.itemsObject = UaObjectNode.build(getNodeContext(), builder -> builder
                 .setNodeId(nodeId2)
                 .setBrowseName(name2)
                 .setDisplayName(displayName2)
                 .setTypeDefinition(Identifiers.FolderType)
-                .build();
+                .buildAndAdd());
         this.folder.addComponent(this.itemsObject);
         this.getNodeManager().addNode(this.itemsObject);
 
@@ -90,21 +101,25 @@ public class CamelNamespace extends ManagedNamespace {
 
     @Override
     public void onDataItemsCreated(final List<DataItem> dataItems) {
+        log.trace("onDataItemsCreated");
         this.subscriptionModel.onDataItemsCreated(dataItems);
     }
 
     @Override
     public void onDataItemsModified(final List<DataItem> dataItems) {
+        log.trace("onDataItemsModified");
         this.subscriptionModel.onDataItemsModified(dataItems);
     }
 
     @Override
     public void onDataItemsDeleted(final List<DataItem> dataItems) {
+        log.trace("onDataItemsDeleted");
         this.subscriptionModel.onDataItemsDeleted(dataItems);
     }
 
     @Override
     public void onMonitoringModeChanged(final List<MonitoredItem> monitoredItems) {
+        log.trace("onMonitoringModeChanged");
         this.subscriptionModel.onMonitoringModeChanged(monitoredItems);
     }
 
@@ -114,5 +129,4 @@ public class CamelNamespace extends ManagedNamespace {
                     k -> new CamelServerItem(itemId, getNodeContext(), getNamespaceIndex(), this.itemsObject));
         }
     }
-
 }
diff --git a/components/camel-milo/src/main/java/org/apache/camel/component/milo/server/internal/CamelServerItem.java b/components/camel-milo/src/main/java/org/apache/camel/component/milo/server/internal/CamelServerItem.java
index a19a0bcc936..b19791f3dfd 100644
--- a/components/camel-milo/src/main/java/org/apache/camel/component/milo/server/internal/CamelServerItem.java
+++ b/components/camel-milo/src/main/java/org/apache/camel/component/milo/server/internal/CamelServerItem.java
@@ -21,12 +21,16 @@ import java.util.LinkedList;
 import java.util.Set;
 import java.util.concurrent.CopyOnWriteArraySet;
 import java.util.function.Consumer;
+import java.util.function.Predicate;
 
 import org.apache.camel.RuntimeCamelException;
 import org.eclipse.milo.opcua.sdk.core.AccessLevel;
 import org.eclipse.milo.opcua.sdk.server.nodes.UaNodeContext;
 import org.eclipse.milo.opcua.sdk.server.nodes.UaObjectNode;
 import org.eclipse.milo.opcua.sdk.server.nodes.UaVariableNode;
+import org.eclipse.milo.opcua.sdk.server.nodes.filters.AttributeFilter;
+import org.eclipse.milo.opcua.sdk.server.nodes.filters.AttributeFilterContext;
+import org.eclipse.milo.opcua.stack.core.AttributeId;
 import org.eclipse.milo.opcua.stack.core.types.builtin.DataValue;
 import org.eclipse.milo.opcua.stack.core.types.builtin.DateTime;
 import org.eclipse.milo.opcua.stack.core.types.builtin.LocalizedText;
@@ -38,8 +42,6 @@ import org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UShort;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import static org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.Unsigned.ubyte;
-
 public class CamelServerItem {
     private static final Logger LOG = LoggerFactory.getLogger(CamelServerItem.class);
 
@@ -59,28 +61,37 @@ public class CamelServerItem {
         final NodeId nodeId = new NodeId(namespaceIndex, itemId);
         final QualifiedName qname = new QualifiedName(namespaceIndex, itemId);
         final LocalizedText displayName = LocalizedText.english(itemId);
-
+        
         // create variable node
-
-        this.item = new UaVariableNode(nodeContext, nodeId, qname, displayName) {
-
-            @Override
-            public synchronized DataValue getValue() {
-                return getDataValue();
-            }
-
-            @Override
-            public synchronized void setValue(final DataValue value) {
-                setDataValue(value);
-            }
-
-        };
-
-        this.item.setAccessLevel(ubyte(AccessLevel.getMask(AccessLevel.READ_WRITE)));
-        this.item.setUserAccessLevel(ubyte(AccessLevel.getMask(AccessLevel.READ_WRITE)));
-
+    
+        final Predicate<AttributeId> filter = AttributeId.Value::equals;
+        this.item = UaVariableNode.build(nodeContext, builder->
+            builder
+                .setNodeId(nodeId)
+                .setBrowseName(qname)
+                .setDisplayName(displayName)
+                .setAccessLevel(AccessLevel.toValue(AccessLevel.READ_WRITE))
+                .setUserAccessLevel(AccessLevel.toValue(AccessLevel.READ_WRITE))
+                .addAttributeFilter(new AttributeFilter(){
+    
+                    @Override
+                    public Object getAttribute(AttributeFilterContext.GetAttributeContext ctx, AttributeId attributeId){
+                        if(filter.test(attributeId) && ctx.getSession().isPresent()) {
+                            return getDataValue();
+                        }
+                        return ctx.getAttribute(attributeId);
+                    }
+    
+                    @Override
+                    public void setAttribute(AttributeFilterContext.SetAttributeContext ctx, AttributeId attributeId, Object value){
+                        if(filter.test(attributeId) && ctx.getSession().isPresent()) {
+                            setDataValue((DataValue)value);
+                        }
+                        ctx.setAttribute(attributeId, value);
+                    }})
+                .buildAndAdd());
+        
         baseNode.addComponent(this.item);
-        nodeContext.getNodeManager().addNode(this.item);
     }
 
     public void dispose() {
diff --git a/components/camel-milo/src/test/java/org/apache/camel/component/milo/AbstractMiloServerTest.java b/components/camel-milo/src/test/java/org/apache/camel/component/milo/AbstractMiloServerTest.java
index c4677ba8642..15629de341b 100644
--- a/components/camel-milo/src/test/java/org/apache/camel/component/milo/AbstractMiloServerTest.java
+++ b/components/camel-milo/src/test/java/org/apache/camel/component/milo/AbstractMiloServerTest.java
@@ -83,7 +83,7 @@ public abstract class AbstractMiloServerTest extends CamelTestSupport {
             final AssertionClause clause, final Class<T> bodyClass,
             final Consumer<T> valueConsumer) {
         clause.predicate(exchange -> {
-            final T body = exchange.getIn().getBody(bodyClass);
+            final T body = exchange.getMessage().getBody(bodyClass);
             valueConsumer.accept(body);
             return true;
         });
diff --git a/components/camel-milo/src/test/java/org/apache/camel/component/milo/MiloClientCachingConnectionManagerTest.java b/components/camel-milo/src/test/java/org/apache/camel/component/milo/MiloClientCachingConnectionManagerTest.java
index 8822bd98ab4..3e11f89b733 100644
--- a/components/camel-milo/src/test/java/org/apache/camel/component/milo/MiloClientCachingConnectionManagerTest.java
+++ b/components/camel-milo/src/test/java/org/apache/camel/component/milo/MiloClientCachingConnectionManagerTest.java
@@ -23,13 +23,22 @@ import org.apache.camel.component.milo.client.MonitorFilterConfiguration;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class MiloClientCachingConnectionManagerTest {
 
+    private static final Logger LOG = LoggerFactory.getLogger(MiloClientCachingConnectionManagerTest.class);
+    
     private MiloClientCachingConnectionManager instance;
 
     @BeforeEach
-    public void setup() {
+    public void setup(TestInfo testInfo) {
+        final var displayName=testInfo.getDisplayName();
+        LOG.info("********************************************************************************");
+        LOG.info(displayName);
+        LOG.info("********************************************************************************");
         instance = new MiloClientCachingConnectionManager();
     }
 
diff --git a/components/camel-milo/src/test/java/org/apache/camel/component/milo/MonitorItemMultiConnectionsCertTest.java b/components/camel-milo/src/test/java/org/apache/camel/component/milo/MonitorItemMultiConnectionsCertTest.java
index 303a38e95c1..89d5cae692b 100644
--- a/components/camel-milo/src/test/java/org/apache/camel/component/milo/MonitorItemMultiConnectionsCertTest.java
+++ b/components/camel-milo/src/test/java/org/apache/camel/component/milo/MonitorItemMultiConnectionsCertTest.java
@@ -29,7 +29,11 @@ import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.milo.server.MiloServerComponent;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.eclipse.milo.opcua.stack.core.security.SecurityPolicy;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
 
@@ -65,6 +69,8 @@ public class MonitorItemMultiConnectionsCertTest extends AbstractMiloServerTest
     private static final String MOCK_TEST_2 = "mock:test2";
     private static final String MOCK_TEST_3 = "mock:test3";
 
+    private static final Logger LOG = LoggerFactory.getLogger(MonitorItemMultiConnectionsCertTest.class);
+    
     @EndpointInject(MOCK_TEST_1)
     protected MockEndpoint test1Endpoint;
 
@@ -76,7 +82,15 @@ public class MonitorItemMultiConnectionsCertTest extends AbstractMiloServerTest
 
     @Produce(DIRECT_START_1)
     protected ProducerTemplate producer1;
-
+    
+    @BeforeEach
+    public void setup(TestInfo testInfo) {
+        final var displayName=testInfo.getDisplayName();
+        LOG.info("********************************************************************************");
+        LOG.info(displayName);
+        LOG.info("********************************************************************************");
+    }
+    
     @Override
     protected void configureMiloServer(final MiloServerComponent server) throws Exception {
         super.configureMiloServer(server);
diff --git a/components/camel-milo/src/test/java/org/apache/camel/component/milo/MonitorItemMultiConnectionsTest.java b/components/camel-milo/src/test/java/org/apache/camel/component/milo/MonitorItemMultiConnectionsTest.java
index 50ae33acb0c..a4a16818d54 100644
--- a/components/camel-milo/src/test/java/org/apache/camel/component/milo/MonitorItemMultiConnectionsTest.java
+++ b/components/camel-milo/src/test/java/org/apache/camel/component/milo/MonitorItemMultiConnectionsTest.java
@@ -23,7 +23,11 @@ import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.milo.server.MiloServerComponent;
 import org.apache.camel.component.mock.MockEndpoint;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Testing monitoring items over multiple connections
@@ -53,6 +57,8 @@ public class MonitorItemMultiConnectionsTest extends AbstractMiloServerTest {
     private static final String MOCK_TEST_2 = "mock:test2";
     private static final String MOCK_TEST_3 = "mock:test3";
 
+    private static final Logger LOG = LoggerFactory.getLogger(MonitorItemMultiConnectionsTest.class);
+    
     @EndpointInject(MOCK_TEST_1)
     protected MockEndpoint test1Endpoint;
 
@@ -64,7 +70,15 @@ public class MonitorItemMultiConnectionsTest extends AbstractMiloServerTest {
 
     @Produce(DIRECT_START_1)
     protected ProducerTemplate producer1;
-
+    
+    @BeforeEach
+    public void setup(TestInfo testInfo) {
+        final var displayName=testInfo.getDisplayName();
+        LOG.info("********************************************************************************");
+        LOG.info(displayName);
+        LOG.info("********************************************************************************");
+    }
+    
     @Override
     protected RoutesBuilder createRouteBuilder() {
         return new RouteBuilder() {
diff --git a/components/camel-milo/src/test/java/org/apache/camel/component/milo/MonitorItemTest.java b/components/camel-milo/src/test/java/org/apache/camel/component/milo/MonitorItemTest.java
index 36fe995023b..228fd9b9c0e 100644
--- a/components/camel-milo/src/test/java/org/apache/camel/component/milo/MonitorItemTest.java
+++ b/components/camel-milo/src/test/java/org/apache/camel/component/milo/MonitorItemTest.java
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.component.milo;
 
+import java.util.concurrent.TimeUnit;
+
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Produce;
 import org.apache.camel.ProducerTemplate;
@@ -23,7 +25,13 @@ import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.milo.server.MiloServerComponent;
 import org.apache.camel.component.mock.MockEndpoint;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import static org.apache.camel.LoggingLevel.INFO;
 
 /**
  * Testing the monitor functionality for item
@@ -41,6 +49,8 @@ public class MonitorItemTest extends AbstractMiloServerTest {
 
     private static final String MOCK_TEST_1 = "mock:test1";
 
+    private static final Logger LOG = LoggerFactory.getLogger(MonitorItemTest.class);
+    
     @EndpointInject(MOCK_TEST_1)
     protected MockEndpoint test1Endpoint;
 
@@ -58,7 +68,15 @@ public class MonitorItemTest extends AbstractMiloServerTest {
             }
         };
     }
-
+    
+    @BeforeEach
+    public void setup(TestInfo testInfo) {
+        final var displayName=testInfo.getDisplayName();
+        LOG.info("********************************************************************************");
+        LOG.info(displayName);
+        LOG.info("********************************************************************************");
+    }
+    
     /**
      * Monitor multiple events
      */
@@ -68,17 +86,19 @@ public class MonitorItemTest extends AbstractMiloServerTest {
          * we will wait 2 * 1_000 milliseconds between server updates since the
          * default server update rate is 1_000 milliseconds
          */
-
+        final var time=2 * 1_000;
+        
+        // item 1 ... only this one receives
+        test1Endpoint.reset();
+        test1Endpoint.setExpectedCount(3);
+        
         // set server values
         this.producer1.sendBody("Foo");
-        Thread.sleep(2_000);
+        Thread.sleep(time);
         this.producer1.sendBody("Bar");
-        Thread.sleep(2_000);
+        Thread.sleep(time);
         this.producer1.sendBody("Baz");
-        Thread.sleep(2_000);
-
-        // item 1 ... only this one receives
-        this.test1Endpoint.setExpectedCount(3);
+        Thread.sleep(time);
 
         // tests
         testBody(this.test1Endpoint.message(0), assertGoodValue("Foo"));
@@ -86,6 +106,6 @@ public class MonitorItemTest extends AbstractMiloServerTest {
         testBody(this.test1Endpoint.message(2), assertGoodValue("Baz"));
 
         // assert
-        assertMockEndpointsSatisfied();
+        assertMockEndpointsSatisfied(time,TimeUnit.MILLISECONDS);
     }
 }
diff --git a/components/camel-milo/src/test/java/org/apache/camel/component/milo/ReadValuesClientTest.java b/components/camel-milo/src/test/java/org/apache/camel/component/milo/ReadValuesClientTest.java
index 63cac63e7b1..a2b277ad2e8 100644
--- a/components/camel-milo/src/test/java/org/apache/camel/component/milo/ReadValuesClientTest.java
+++ b/components/camel-milo/src/test/java/org/apache/camel/component/milo/ReadValuesClientTest.java
@@ -26,7 +26,11 @@ import org.apache.camel.ProducerTemplate;
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class ReadValuesClientTest extends AbstractMiloServerTest {
 
@@ -40,6 +44,8 @@ public class ReadValuesClientTest extends AbstractMiloServerTest {
 
     private static final String MOCK_TEST_1 = "mock:test1";
 
+    private static final Logger LOG = LoggerFactory.getLogger(ReadValuesClientTest.class);
+    
     @EndpointInject(MOCK_TEST_1)
     protected MockEndpoint test1Endpoint;
 
@@ -48,7 +54,15 @@ public class ReadValuesClientTest extends AbstractMiloServerTest {
 
     @Produce(DIRECT_START_2)
     protected ProducerTemplate producer2;
-
+    
+    @BeforeEach
+    public void setup(TestInfo testInfo) {
+        final var displayName=testInfo.getDisplayName();
+        LOG.info("********************************************************************************");
+        LOG.info(displayName);
+        LOG.info("********************************************************************************");
+    }
+    
     @Override
     protected RoutesBuilder createRouteBuilder() {
         return new RouteBuilder() {
diff --git a/components/camel-milo/src/test/java/org/apache/camel/component/milo/WriteClientTest.java b/components/camel-milo/src/test/java/org/apache/camel/component/milo/WriteClientTest.java
index 345ccf73575..8158b032984 100644
--- a/components/camel-milo/src/test/java/org/apache/camel/component/milo/WriteClientTest.java
+++ b/components/camel-milo/src/test/java/org/apache/camel/component/milo/WriteClientTest.java
@@ -24,7 +24,11 @@ import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.milo.server.MiloServerComponent;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.eclipse.milo.opcua.stack.core.types.builtin.Variant;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import static org.apache.camel.component.milo.NodeIds.nodeValue;
 
@@ -60,7 +64,9 @@ public class WriteClientTest extends AbstractMiloServerTest {
 
     private static final String MOCK_TEST_1 = "mock:test1";
     private static final String MOCK_TEST_2 = "mock:test2";
-
+    
+    private static final Logger LOG = LoggerFactory.getLogger(WriteClientTest.class);
+    
     @EndpointInject(MOCK_TEST_1)
     protected MockEndpoint test1Endpoint;
 
@@ -96,7 +102,15 @@ public class WriteClientTest extends AbstractMiloServerTest {
             }
         };
     }
-
+    
+    @BeforeEach
+    public void setup(TestInfo testInfo) {
+        final var displayName=testInfo.getDisplayName();
+        LOG.info("********************************************************************************");
+        LOG.info(displayName);
+        LOG.info("********************************************************************************");
+    }
+    
     @Test
     public void testWrite1() throws Exception {
         // item 1
diff --git a/components/camel-milo/src/test/java/org/apache/camel/component/milo/browse/BrowseServerTest.java b/components/camel-milo/src/test/java/org/apache/camel/component/milo/browse/BrowseServerTest.java
index 58a7093fb29..1a006c9a4a6 100644
--- a/components/camel-milo/src/test/java/org/apache/camel/component/milo/browse/BrowseServerTest.java
+++ b/components/camel-milo/src/test/java/org/apache/camel/component/milo/browse/BrowseServerTest.java
@@ -39,7 +39,11 @@ import org.eclipse.milo.opcua.stack.core.types.builtin.ExpandedNodeId;
 import org.eclipse.milo.opcua.stack.core.types.builtin.LocalizedText;
 import org.eclipse.milo.opcua.stack.core.types.structured.BrowseResult;
 import org.eclipse.milo.opcua.stack.core.types.structured.ReferenceDescription;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
@@ -102,6 +106,8 @@ public class BrowseServerTest extends AbstractMiloServerTest {
 
     private static final String MILO_BROWSE_NODE_VIA_ENDPOINT
             = MILO_BROWSE_ROOT + "&node=RAW(ns=0;i=86)";
+    
+    private static final Logger LOG = LoggerFactory.getLogger(BrowseServerTest.class);
 
     @EndpointInject(MOCK_TEST_1)
     protected MockEndpoint mock1;
@@ -156,7 +162,15 @@ public class BrowseServerTest extends AbstractMiloServerTest {
 
     @Produce(DIRECT_START_9)
     protected ProducerTemplate producer9;
-
+    
+    @BeforeEach
+    public void setup(TestInfo testInfo) {
+        final var displayName=testInfo.getDisplayName();
+        LOG.info("********************************************************************************");
+        LOG.info(displayName);
+        LOG.info("********************************************************************************");
+    }
+    
     @Override
     protected RoutesBuilder createRouteBuilder() {
         return new RouteBuilder() {
diff --git a/components/camel-milo/src/test/java/org/apache/camel/component/milo/call/CallClientTest.java b/components/camel-milo/src/test/java/org/apache/camel/component/milo/call/CallClientTest.java
index 489987f9ef3..846f4140889 100644
--- a/components/camel-milo/src/test/java/org/apache/camel/component/milo/call/CallClientTest.java
+++ b/components/camel-milo/src/test/java/org/apache/camel/component/milo/call/CallClientTest.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.component.milo.call;
 
+import java.security.cert.X509Certificate;
 import java.util.Arrays;
 import java.util.EnumSet;
 import java.util.LinkedHashSet;
@@ -32,16 +33,20 @@ import org.eclipse.milo.opcua.sdk.server.OpcUaServer;
 import org.eclipse.milo.opcua.sdk.server.api.config.OpcUaServerConfig;
 import org.eclipse.milo.opcua.sdk.server.api.config.OpcUaServerConfigBuilder;
 import org.eclipse.milo.opcua.sdk.server.util.HostnameUtil;
+import org.eclipse.milo.opcua.stack.core.UaException;
 import org.eclipse.milo.opcua.stack.core.security.DefaultCertificateManager;
-import org.eclipse.milo.opcua.stack.core.security.InsecureCertificateValidator;
 import org.eclipse.milo.opcua.stack.core.security.SecurityPolicy;
 import org.eclipse.milo.opcua.stack.core.transport.TransportProfile;
 import org.eclipse.milo.opcua.stack.core.types.builtin.LocalizedText;
 import org.eclipse.milo.opcua.stack.core.types.enumerated.MessageSecurityMode;
 import org.eclipse.milo.opcua.stack.core.types.structured.UserTokenPolicy;
 import org.eclipse.milo.opcua.stack.server.EndpointConfiguration;
+import org.eclipse.milo.opcua.stack.server.security.ServerCertificateValidator;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import static org.apache.camel.component.milo.NodeIds.nodeValue;
 import static org.eclipse.milo.opcua.sdk.server.api.config.OpcUaServerConfig.USER_TOKEN_POLICY_ANONYMOUS;
@@ -61,12 +66,22 @@ public class CallClientTest extends AbstractMiloServerTest {
             = MILO_CLIENT_BASE_C1 + "?node=" + NodeIds.nodeValue(MockCamelNamespace.URI, MockCamelNamespace.FOLDER_ID)
               + "&method=" + nodeValue(MockCamelNamespace.URI, MockCamelNamespace.CALL_ID) + "&overrideHost=true";
 
+    private static final Logger LOG = LoggerFactory.getLogger(CallClientTest.class);
+    
     private OpcUaServer server;
     private MockCamelNamespace namespace;
     private MockCallMethod callMethod;
 
     @Produce(DIRECT_START_1)
     private ProducerTemplate producer1;
+    
+    @BeforeEach
+    public void setup(TestInfo testInfo) {
+        final var displayName=testInfo.getDisplayName();
+        LOG.info("********************************************************************************");
+        LOG.info(displayName);
+        LOG.info("********************************************************************************");
+    }
 
     @Override
     protected RoutesBuilder createRouteBuilder() {
@@ -173,4 +188,20 @@ public class CallClientTest extends AbstractMiloServerTest {
         // we always write synchronously since we do need the message order
         producerTemplate.sendBodyAndHeader(input, "await", true);
     }
+    
+    private static final class InsecureCertificateValidator implements ServerCertificateValidator{
+        
+        public static final ServerCertificateValidator INSTANCE = new CallClientTest.InsecureCertificateValidator();
+        
+        private InsecureCertificateValidator() {
+        }
+        
+        @Override
+        public void validateCertificateChain(List<X509Certificate> list,String s) throws UaException {
+        }
+        
+        @Override
+        public void validateCertificateChain(List<X509Certificate> list) throws UaException{
+        }
+    }
 }
diff --git a/components/camel-milo/src/test/java/org/apache/camel/component/milo/call/MockCamelNamespace.java b/components/camel-milo/src/test/java/org/apache/camel/component/milo/call/MockCamelNamespace.java
index 70bbe26cf8d..b8240cf3b4b 100644
--- a/components/camel-milo/src/test/java/org/apache/camel/component/milo/call/MockCamelNamespace.java
+++ b/components/camel-milo/src/test/java/org/apache/camel/component/milo/call/MockCamelNamespace.java
@@ -24,9 +24,10 @@ import java.util.function.Function;
 import org.apache.camel.component.milo.client.MiloClientConsumer;
 import org.apache.camel.component.milo.server.internal.CamelServerItem;
 import org.eclipse.milo.opcua.sdk.core.Reference;
+import org.eclipse.milo.opcua.sdk.server.Lifecycle;
 import org.eclipse.milo.opcua.sdk.server.OpcUaServer;
 import org.eclipse.milo.opcua.sdk.server.api.DataItem;
-import org.eclipse.milo.opcua.sdk.server.api.ManagedNamespace;
+import org.eclipse.milo.opcua.sdk.server.api.ManagedNamespaceWithLifecycle;
 import org.eclipse.milo.opcua.sdk.server.api.MonitoredItem;
 import org.eclipse.milo.opcua.sdk.server.api.methods.AbstractMethodInvocationHandler;
 import org.eclipse.milo.opcua.sdk.server.nodes.UaFolderNode;
@@ -39,7 +40,7 @@ import org.eclipse.milo.opcua.stack.core.types.builtin.QualifiedName;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class MockCamelNamespace extends ManagedNamespace {
+public class MockCamelNamespace extends ManagedNamespaceWithLifecycle{
 
     public static final String URI = "urn:org:apache:camel:mock";
     public static final int FOLDER_ID = 1;
@@ -61,11 +62,24 @@ public class MockCamelNamespace extends ManagedNamespace {
 
         this.subscriptionModel = new SubscriptionModel(server, this);
         this.callMethodCreator = callMethodCreator;
+    
+        super.getLifecycleManager().addLifecycle(new Lifecycle() {
+        
+            @Override
+            public void startup() {
+                LOG.trace("CamelNamespace startup");
+                createNodes();
+            }
+        
+            @Override
+            public void shutdown() {
+                LOG.trace("CamelNamespace shutdown");
+            }
+        });
     }
-
-    @Override
-    protected void onStartup() {
-        super.onStartup();
+    
+    private void createNodes() {
+        
         // create structure
 
         final NodeId nodeId = newNodeId(FOLDER_ID);
@@ -96,8 +110,8 @@ public class MockCamelNamespace extends ManagedNamespace {
                 .build();
 
         AbstractMethodInvocationHandler callMethod = callMethodCreator.apply(methodNode);
-        methodNode.setProperty(UaMethodNode.InputArguments, callMethod.getInputArguments());
-        methodNode.setProperty(UaMethodNode.OutputArguments, callMethod.getOutputArguments());
+        methodNode.setInputArguments(callMethod.getInputArguments());
+        methodNode.setOutputArguments(callMethod.getOutputArguments());
         methodNode.setInvocationHandler(callMethod);
 
         getNodeManager().addNode(methodNode);
diff --git a/components/camel-milo/src/test/java/org/apache/camel/component/milo/client/NodeIdTest.java b/components/camel-milo/src/test/java/org/apache/camel/component/milo/client/NodeIdTest.java
index c98c12f344f..f5ad99980b9 100644
--- a/components/camel-milo/src/test/java/org/apache/camel/component/milo/client/NodeIdTest.java
+++ b/components/camel-milo/src/test/java/org/apache/camel/component/milo/client/NodeIdTest.java
@@ -21,7 +21,11 @@ import java.io.Serializable;
 import org.apache.camel.ResolveEndpointFailedException;
 import org.apache.camel.component.milo.AbstractMiloServerTest;
 import org.eclipse.milo.opcua.stack.core.types.builtin.ExpandedNodeId;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import static com.google.common.net.UrlEscapers.urlFormParameterEscaper;
 import static org.apache.camel.component.milo.server.MiloServerComponent.DEFAULT_NAMESPACE_URI;
@@ -35,7 +39,17 @@ import static org.junit.jupiter.api.Assertions.assertThrows;
  * Testing different ways to specify node IDs
  */
 public class NodeIdTest extends AbstractMiloServerTest {
-
+    
+    private static final Logger LOG = LoggerFactory.getLogger(NodeIdTest.class);
+    
+    @BeforeEach
+    public void setup(TestInfo testInfo) {
+        final var displayName = testInfo.getDisplayName();
+        LOG.info("********************************************************************************");
+        LOG.info(displayName);
+        LOG.info("********************************************************************************");
+    }
+    
     @Test
     public void testFull1() {
         final String s = String.format("nsu=%s;s=%s", DEFAULT_NAMESPACE_URI, "item-1");
diff --git a/components/camel-milo/src/test/java/org/apache/camel/component/milo/converter/ConverterTest.java b/components/camel-milo/src/test/java/org/apache/camel/component/milo/converter/ConverterTest.java
index 03cdbf280ba..b771fec3043 100644
--- a/components/camel-milo/src/test/java/org/apache/camel/component/milo/converter/ConverterTest.java
+++ b/components/camel-milo/src/test/java/org/apache/camel/component/milo/converter/ConverterTest.java
@@ -19,14 +19,28 @@ package org.apache.camel.component.milo.converter;
 import org.apache.camel.test.junit5.CamelTestSupport;
 import org.eclipse.milo.opcua.stack.core.types.builtin.DataValue;
 import org.eclipse.milo.opcua.stack.core.types.builtin.Variant;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class ConverterTest extends CamelTestSupport {
-
+    
+    private static final Logger LOG = LoggerFactory.getLogger(ConverterTest.class);
+    
+    @BeforeEach
+    public void setup(TestInfo testInfo) {
+        final var displayName = testInfo.getDisplayName();
+        LOG.info("********************************************************************************");
+        LOG.info(displayName);
+        LOG.info("********************************************************************************");
+    }
+    
     @Test
     public void testDataValueToVariant() {
         final Variant value = testConvertDataValue("Foo", Variant.class);
diff --git a/components/camel-milo/src/test/java/org/apache/camel/component/milo/server/ServerLocalTest.java b/components/camel-milo/src/test/java/org/apache/camel/component/milo/server/ServerLocalTest.java
index 2d00770477e..e757b707b96 100644
--- a/components/camel-milo/src/test/java/org/apache/camel/component/milo/server/ServerLocalTest.java
+++ b/components/camel-milo/src/test/java/org/apache/camel/component/milo/server/ServerLocalTest.java
@@ -19,6 +19,7 @@ package org.apache.camel.component.milo.server;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.milo.converter.ConverterTest;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.AvailablePortFinder;
 import org.apache.camel.test.junit5.CamelTestSupport;
@@ -27,6 +28,9 @@ import org.eclipse.milo.opcua.stack.core.types.builtin.Variant;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Unit tests for milo server component without using an actual connection
@@ -36,12 +40,18 @@ public class ServerLocalTest extends CamelTestSupport {
     private static final String MILO_ITEM_1 = "milo-server:myitem1";
 
     private static final String MOCK_TEST = "mock:test";
+    
+    private static final Logger LOG = LoggerFactory.getLogger(ConverterTest.class);
 
     @EndpointInject(MOCK_TEST)
     protected MockEndpoint testEndpoint;
-
+    
     @BeforeEach
-    public void pickFreePort() {
+    public void pickFreePort(TestInfo testInfo) {
+        final var displayName = testInfo.getDisplayName();
+        LOG.info("********************************************************************************");
+        LOG.info(displayName);
+        LOG.info("********************************************************************************");
         final MiloServerComponent component = context().getComponent("milo-server", MiloServerComponent.class);
         component.setPort(AvailablePortFinder.getNextAvailable());
     }
diff --git a/components/camel-milo/src/test/java/org/apache/camel/component/milo/server/ServerSetCertificateManagerTest.java b/components/camel-milo/src/test/java/org/apache/camel/component/milo/server/ServerSetCertificateManagerTest.java
index 7a31039ebe8..e9b0840b613 100644
--- a/components/camel-milo/src/test/java/org/apache/camel/component/milo/server/ServerSetCertificateManagerTest.java
+++ b/components/camel-milo/src/test/java/org/apache/camel/component/milo/server/ServerSetCertificateManagerTest.java
@@ -21,7 +21,11 @@ import java.nio.file.Path;
 import java.nio.file.Paths;
 
 import org.apache.camel.component.milo.AbstractMiloServerTest;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
 
@@ -29,7 +33,17 @@ import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
  * Test setting the certificate manager
  */
 public class ServerSetCertificateManagerTest extends AbstractMiloServerTest {
-
+    
+    private static final Logger LOG = LoggerFactory.getLogger(ServerSetCertificateManagerTest.class);
+    
+    @BeforeEach
+    public void setup(TestInfo testInfo) {
+        final var displayName = testInfo.getDisplayName();
+        LOG.info("********************************************************************************");
+        LOG.info(displayName);
+        LOG.info("********************************************************************************");
+    }
+    
     @Override
     protected void configureMiloServer(final MiloServerComponent server) throws Exception {
         super.configureMiloServer(server);
diff --git a/components/camel-milo/src/test/java/org/apache/camel/component/milo/server/ServerSetSecurityPoliciesTest.java b/components/camel-milo/src/test/java/org/apache/camel/component/milo/server/ServerSetSecurityPoliciesTest.java
index c28ca63ae25..3156a7d4806 100644
--- a/components/camel-milo/src/test/java/org/apache/camel/component/milo/server/ServerSetSecurityPoliciesTest.java
+++ b/components/camel-milo/src/test/java/org/apache/camel/component/milo/server/ServerSetSecurityPoliciesTest.java
@@ -18,13 +18,27 @@ package org.apache.camel.component.milo.server;
 
 import org.apache.camel.test.junit5.CamelTestSupport;
 import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Test setting security policies
  */
 public class ServerSetSecurityPoliciesTest extends CamelTestSupport {
-
+    
+    private static final Logger LOG = LoggerFactory.getLogger(ServerSetSecurityPoliciesTest.class);
+    
+    @BeforeEach
+    public void setup(TestInfo testInfo) {
+        final var displayName = testInfo.getDisplayName();
+        LOG.info("********************************************************************************");
+        LOG.info(displayName);
+        LOG.info("********************************************************************************");
+    }
+    
     @Test
     public void testSetSecurityPolicies1() {
         final MiloServerComponent component = new MiloServerComponent();


[camel] 02/02: CAMEL-18144: Upgrade to Milo 0.6.6

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 9ac7a51272c9b1d8d7ea90c6db34c10e7ee021bd
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu May 26 12:12:33 2022 +0200

    CAMEL-18144: Upgrade to Milo 0.6.6
---
 .../milo/client/MiloClientEndpointConfigurer.java  |  6 +++++
 .../milo/client/MiloClientEndpointUriFactory.java  |  3 ++-
 .../milo/server/MiloServerComponentConfigurer.java |  4 +--
 .../camel/component/milo/client/milo-client.json   |  1 +
 .../camel/component/milo/server/milo-server.json   |  2 +-
 .../component/milo/client/MiloClientConsumer.java  |  6 ++---
 .../component/milo/client/MiloClientEndpoint.java  |  8 +++---
 .../milo/server/internal/CamelNamespace.java       | 16 ++++++------
 .../milo/server/internal/CamelServerItem.java      | 29 +++++++++++-----------
 .../MiloClientCachingConnectionManagerTest.java    |  4 +--
 .../milo/MonitorItemMultiConnectionsCertTest.java  |  8 +++---
 .../milo/MonitorItemMultiConnectionsTest.java      |  8 +++---
 .../camel/component/milo/MonitorItemTest.java      | 18 ++++++--------
 .../camel/component/milo/ReadValuesClientTest.java |  8 +++---
 .../camel/component/milo/WriteClientTest.java      | 10 ++++----
 .../component/milo/browse/BrowseServerTest.java    |  8 +++---
 .../camel/component/milo/call/CallClientTest.java  | 22 ++++++++--------
 .../component/milo/call/MockCamelNamespace.java    | 12 ++++-----
 .../camel/component/milo/client/NodeIdTest.java    |  6 ++---
 .../component/milo/converter/ConverterTest.java    |  6 ++---
 .../component/milo/server/ServerLocalTest.java     |  4 +--
 .../server/ServerSetCertificateManagerTest.java    |  6 ++---
 .../milo/server/ServerSetSecurityPoliciesTest.java |  6 ++---
 parent/pom.xml                                     |  2 +-
 24 files changed, 105 insertions(+), 98 deletions(-)

diff --git a/components/camel-milo/src/generated/java/org/apache/camel/component/milo/client/MiloClientEndpointConfigurer.java b/components/camel-milo/src/generated/java/org/apache/camel/component/milo/client/MiloClientEndpointConfigurer.java
index ce5ec336637..3c2798f3b28 100644
--- a/components/camel-milo/src/generated/java/org/apache/camel/component/milo/client/MiloClientEndpointConfigurer.java
+++ b/components/camel-milo/src/generated/java/org/apache/camel/component/milo/client/MiloClientEndpointConfigurer.java
@@ -69,6 +69,8 @@ public class MiloClientEndpointConfigurer extends PropertyConfigurerSupport impl
         case "monitorfiltertype":
         case "monitorFilterType": target.getMonitorFilterConfiguration().setMonitorFilterType(property(camelContext, org.apache.camel.component.milo.client.MonitorFilterType.class, value)); return true;
         case "node": target.setNode(property(camelContext, java.lang.String.class, value)); return true;
+        case "omitnullvalues":
+        case "omitNullValues": target.setOmitNullValues(property(camelContext, boolean.class, value)); return true;
         case "overridehost":
         case "overrideHost": target.getConfiguration().setOverrideHost(property(camelContext, boolean.class, value)); return true;
         case "producturi":
@@ -138,6 +140,8 @@ public class MiloClientEndpointConfigurer extends PropertyConfigurerSupport impl
         case "monitorfiltertype":
         case "monitorFilterType": return org.apache.camel.component.milo.client.MonitorFilterType.class;
         case "node": return java.lang.String.class;
+        case "omitnullvalues":
+        case "omitNullValues": return boolean.class;
         case "overridehost":
         case "overrideHost": return boolean.class;
         case "producturi":
@@ -208,6 +212,8 @@ public class MiloClientEndpointConfigurer extends PropertyConfigurerSupport impl
         case "monitorfiltertype":
         case "monitorFilterType": return target.getMonitorFilterConfiguration().getMonitorFilterType();
         case "node": return target.getNode();
+        case "omitnullvalues":
+        case "omitNullValues": return target.isOmitNullValues();
         case "overridehost":
         case "overrideHost": return target.getConfiguration().isOverrideHost();
         case "producturi":
diff --git a/components/camel-milo/src/generated/java/org/apache/camel/component/milo/client/MiloClientEndpointUriFactory.java b/components/camel-milo/src/generated/java/org/apache/camel/component/milo/client/MiloClientEndpointUriFactory.java
index 8b8bc45bed0..904120ebf41 100644
--- a/components/camel-milo/src/generated/java/org/apache/camel/component/milo/client/MiloClientEndpointUriFactory.java
+++ b/components/camel-milo/src/generated/java/org/apache/camel/component/milo/client/MiloClientEndpointUriFactory.java
@@ -21,7 +21,7 @@ public class MiloClientEndpointUriFactory extends org.apache.camel.support.compo
     private static final Set<String> SECRET_PROPERTY_NAMES;
     private static final Set<String> MULTI_VALUE_PREFIXES;
     static {
-        Set<String> props = new HashSet<>(33);
+        Set<String> props = new HashSet<>(34);
         props.add("allowedSecurityPolicies");
         props.add("applicationName");
         props.add("applicationUri");
@@ -48,6 +48,7 @@ public class MiloClientEndpointUriFactory extends org.apache.camel.support.compo
         props.add("method");
         props.add("monitorFilterType");
         props.add("node");
+        props.add("omitNullValues");
         props.add("overrideHost");
         props.add("productUri");
         props.add("requestTimeout");
diff --git a/components/camel-milo/src/generated/java/org/apache/camel/component/milo/server/MiloServerComponentConfigurer.java b/components/camel-milo/src/generated/java/org/apache/camel/component/milo/server/MiloServerComponentConfigurer.java
index 76560509863..5b4f44f6017 100644
--- a/components/camel-milo/src/generated/java/org/apache/camel/component/milo/server/MiloServerComponentConfigurer.java
+++ b/components/camel-milo/src/generated/java/org/apache/camel/component/milo/server/MiloServerComponentConfigurer.java
@@ -37,7 +37,7 @@ public class MiloServerComponentConfigurer extends PropertyConfigurerSupport imp
         case "certificatemanager":
         case "certificateManager": target.setCertificateManager(property(camelContext, org.eclipse.milo.opcua.stack.core.security.CertificateManager.class, value)); return true;
         case "certificatevalidator":
-        case "certificateValidator": target.setCertificateValidator(property(camelContext, org.eclipse.milo.opcua.stack.core.security.CertificateValidator.class, value)); return true;
+        case "certificateValidator": target.setCertificateValidator(property(camelContext, org.eclipse.milo.opcua.stack.server.security.ServerCertificateValidator.class, value)); return true;
         case "defaultcertificatevalidator":
         case "defaultCertificateValidator": target.setDefaultCertificateValidator(property(camelContext, java.lang.String.class, value)); return true;
         case "enableanonymousauthentication":
@@ -81,7 +81,7 @@ public class MiloServerComponentConfigurer extends PropertyConfigurerSupport imp
         case "certificatemanager":
         case "certificateManager": return org.eclipse.milo.opcua.stack.core.security.CertificateManager.class;
         case "certificatevalidator":
-        case "certificateValidator": return org.eclipse.milo.opcua.stack.core.security.CertificateValidator.class;
+        case "certificateValidator": return org.eclipse.milo.opcua.stack.server.security.ServerCertificateValidator.class;
         case "defaultcertificatevalidator":
         case "defaultCertificateValidator": return java.lang.String.class;
         case "enableanonymousauthentication":
diff --git a/components/camel-milo/src/generated/resources/org/apache/camel/component/milo/client/milo-client.json b/components/camel-milo/src/generated/resources/org/apache/camel/component/milo/client/milo-client.json
index 83aec39aee5..18ca6075d1c 100644
--- a/components/camel-milo/src/generated/resources/org/apache/camel/component/milo/client/milo-client.json
+++ b/components/camel-milo/src/generated/resources/org/apache/camel/component/milo/client/milo-client.json
@@ -64,6 +64,7 @@
     "method": { "kind": "parameter", "displayName": "Method", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The method definition (see Method ID)" },
     "monitorFilterType": { "kind": "parameter", "displayName": "Monitor Filter Type", "group": "common", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.milo.client.MonitorFilterType", "enum": [ "dataChangeFilter" ], "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.milo.client.MonitorFilterConfiguration", "configurationField": "monitorFilterConfiguration", "description": "Monitor Filter T [...]
     "node": { "kind": "parameter", "displayName": "Node", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The node definition (see Node ID)" },
+    "omitNullValues": { "kind": "parameter", "displayName": "Omit Null Values", "group": "common", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Omit notifications in case of null values" },
     "samplingInterval": { "kind": "parameter", "displayName": "Sampling Interval", "group": "common", "label": "", "required": false, "type": "number", "javaType": "java.lang.Double", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "0.0", "description": "The sampling interval in milliseconds" },
     "bridgeErrorHandler": { "kind": "parameter", "displayName": "Bridge Error Handler", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a m [...]
     "exceptionHandler": { "kind": "parameter", "displayName": "Exception Handler", "group": "consumer (advanced)", "label": "consumer,advanced", "required": false, "type": "object", "javaType": "org.apache.camel.spi.ExceptionHandler", "optionalPrefix": "consumer.", "deprecated": false, "autowired": false, "secret": false, "description": "To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By default the con [...]
diff --git a/components/camel-milo/src/generated/resources/org/apache/camel/component/milo/server/milo-server.json b/components/camel-milo/src/generated/resources/org/apache/camel/component/milo/server/milo-server.json
index e8dbdc9c4a8..746d0521fe3 100644
--- a/components/camel-milo/src/generated/resources/org/apache/camel/component/milo/server/milo-server.json
+++ b/components/camel-milo/src/generated/resources/org/apache/camel/component/milo/server/milo-server.json
@@ -35,7 +35,7 @@
     "autowiredEnabled": { "kind": "property", "displayName": "Autowired Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching type, which t [...]
     "certificate": { "kind": "property", "displayName": "Certificate", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "java.security.cert.X509Certificate", "deprecated": false, "autowired": false, "secret": false, "description": "Server certificate" },
     "certificateManager": { "kind": "property", "displayName": "Certificate Manager", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "org.eclipse.milo.opcua.stack.core.security.CertificateManager", "deprecated": false, "autowired": false, "secret": false, "description": "Server certificate manager" },
-    "certificateValidator": { "kind": "property", "displayName": "Certificate Validator", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "org.eclipse.milo.opcua.stack.core.security.CertificateValidator", "deprecated": false, "autowired": false, "secret": false, "description": "Validator for client certificates" },
+    "certificateValidator": { "kind": "property", "displayName": "Certificate Validator", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "org.eclipse.milo.opcua.stack.server.security.ServerCertificateValidator", "deprecated": false, "autowired": false, "secret": false, "description": "Validator for client certificates" },
     "defaultCertificateValidator": { "kind": "property", "displayName": "Default Certificate Validator", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Validator for client certificates using default file based approach" },
     "enableAnonymousAuthentication": { "kind": "property", "displayName": "Enable Anonymous Authentication", "group": "security", "label": "security", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Enable anonymous authentication, disabled by default" },
     "securityPolicies": { "kind": "property", "displayName": "Security Policies", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "java.util.Set<org.eclipse.milo.opcua.stack.core.security.SecurityPolicy>", "deprecated": false, "autowired": false, "secret": false, "description": "Security policies" },
diff --git a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConsumer.java b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConsumer.java
index 15572a0cdd2..c71d87fd30d 100644
--- a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConsumer.java
+++ b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConsumer.java
@@ -70,12 +70,12 @@ public class MiloClientConsumer extends DefaultConsumer {
 
     private void handleValueUpdate(final DataValue value) {
         LOG.debug("Handle item update - {} = {}", node, value);
-        
-        if(omitNullValues && (value == null || value.getValue() == null || value.getValue().getValue() == null)){
+
+        if (omitNullValues && (value == null || value.getValue() == null || value.getValue().getValue() == null)) {
             LOG.debug("Handle item update omitted due to null values (see omitNullValues parameter)");
             return;
         }
-        
+
         final Exchange exchange = createExchange(true);
         try {
             mapToMessage(value, exchange.getMessage());
diff --git a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientEndpoint.java b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientEndpoint.java
index e7a6de742f1..6073a192a5f 100644
--- a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientEndpoint.java
+++ b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientEndpoint.java
@@ -77,13 +77,13 @@ public class MiloClientEndpoint extends DefaultEndpoint {
      */
     @UriParam
     private boolean defaultAwaitWrites;
-    
+
     /**
      * Omit notifications in case of null values
      */
     @UriParam(defaultValue = "true")
     private boolean omitNullValues = true;
-    
+
     @UriParam
     private MonitorFilterConfiguration monitorFilterConfiguration;
 
@@ -195,11 +195,11 @@ public class MiloClientEndpoint extends DefaultEndpoint {
     public void setMonitorFilterType(MonitorFilterType monitorFilterType) {
         this.monitorFilterType = monitorFilterType;
     }
-    
+
     public boolean isOmitNullValues() {
         return omitNullValues;
     }
-    
+
     public void setOmitNullValues(boolean omitNullValues) {
         this.omitNullValues = omitNullValues;
     }
diff --git a/components/camel-milo/src/main/java/org/apache/camel/component/milo/server/internal/CamelNamespace.java b/components/camel-milo/src/main/java/org/apache/camel/component/milo/server/internal/CamelNamespace.java
index 2c7720501a6..a398a856a5a 100644
--- a/components/camel-milo/src/main/java/org/apache/camel/component/milo/server/internal/CamelNamespace.java
+++ b/components/camel-milo/src/main/java/org/apache/camel/component/milo/server/internal/CamelNamespace.java
@@ -44,23 +44,23 @@ public class CamelNamespace extends ManagedNamespaceWithLifecycle {
     private UaFolderNode folder;
 
     private final Map<String, CamelServerItem> itemMap = new HashMap<>();
-    
+
     private final DataTypeDictionaryManager dictionaryManager;
-    
+
     private final Logger log = LoggerFactory.getLogger(CamelNamespace.class);
-    
+
     public CamelNamespace(final String namespaceUri, final OpcUaServer server) {
         super(server, namespaceUri);
-    
+
         this.subscriptionModel = new SubscriptionModel(server, this);
         this.dictionaryManager = new DataTypeDictionaryManager(getNodeContext(), namespaceUri);
-    
+
         getLifecycleManager().addLifecycle(dictionaryManager);
         getLifecycleManager().addLifecycle(subscriptionModel);
-    
+
         getLifecycleManager().addStartupTask(this::createNodes);
     }
-    
+
     protected void createNodes() {
         // create structure
 
@@ -74,7 +74,7 @@ public class CamelNamespace extends ManagedNamespaceWithLifecycle {
         final NodeId nodeId2 = newNodeId("items");
         final QualifiedName name2 = newQualifiedName("items");
         final LocalizedText displayName2 = LocalizedText.english("Items");
-        
+
         this.itemsObject = UaObjectNode.build(getNodeContext(), builder -> builder
                 .setNodeId(nodeId2)
                 .setBrowseName(name2)
diff --git a/components/camel-milo/src/main/java/org/apache/camel/component/milo/server/internal/CamelServerItem.java b/components/camel-milo/src/main/java/org/apache/camel/component/milo/server/internal/CamelServerItem.java
index b19791f3dfd..1b9799d7875 100644
--- a/components/camel-milo/src/main/java/org/apache/camel/component/milo/server/internal/CamelServerItem.java
+++ b/components/camel-milo/src/main/java/org/apache/camel/component/milo/server/internal/CamelServerItem.java
@@ -61,36 +61,37 @@ public class CamelServerItem {
         final NodeId nodeId = new NodeId(namespaceIndex, itemId);
         final QualifiedName qname = new QualifiedName(namespaceIndex, itemId);
         final LocalizedText displayName = LocalizedText.english(itemId);
-        
+
         // create variable node
-    
+
         final Predicate<AttributeId> filter = AttributeId.Value::equals;
-        this.item = UaVariableNode.build(nodeContext, builder->
-            builder
+        this.item = UaVariableNode.build(nodeContext, builder -> builder
                 .setNodeId(nodeId)
                 .setBrowseName(qname)
                 .setDisplayName(displayName)
                 .setAccessLevel(AccessLevel.toValue(AccessLevel.READ_WRITE))
                 .setUserAccessLevel(AccessLevel.toValue(AccessLevel.READ_WRITE))
-                .addAttributeFilter(new AttributeFilter(){
-    
+                .addAttributeFilter(new AttributeFilter() {
+
                     @Override
-                    public Object getAttribute(AttributeFilterContext.GetAttributeContext ctx, AttributeId attributeId){
-                        if(filter.test(attributeId) && ctx.getSession().isPresent()) {
+                    public Object getAttribute(AttributeFilterContext.GetAttributeContext ctx, AttributeId attributeId) {
+                        if (filter.test(attributeId) && ctx.getSession().isPresent()) {
                             return getDataValue();
                         }
                         return ctx.getAttribute(attributeId);
                     }
-    
+
                     @Override
-                    public void setAttribute(AttributeFilterContext.SetAttributeContext ctx, AttributeId attributeId, Object value){
-                        if(filter.test(attributeId) && ctx.getSession().isPresent()) {
-                            setDataValue((DataValue)value);
+                    public void setAttribute(
+                            AttributeFilterContext.SetAttributeContext ctx, AttributeId attributeId, Object value) {
+                        if (filter.test(attributeId) && ctx.getSession().isPresent()) {
+                            setDataValue((DataValue) value);
                         }
                         ctx.setAttribute(attributeId, value);
-                    }})
+                    }
+                })
                 .buildAndAdd());
-        
+
         baseNode.addComponent(this.item);
     }
 
diff --git a/components/camel-milo/src/test/java/org/apache/camel/component/milo/MiloClientCachingConnectionManagerTest.java b/components/camel-milo/src/test/java/org/apache/camel/component/milo/MiloClientCachingConnectionManagerTest.java
index 3e11f89b733..d1768f21fb6 100644
--- a/components/camel-milo/src/test/java/org/apache/camel/component/milo/MiloClientCachingConnectionManagerTest.java
+++ b/components/camel-milo/src/test/java/org/apache/camel/component/milo/MiloClientCachingConnectionManagerTest.java
@@ -30,12 +30,12 @@ import org.slf4j.LoggerFactory;
 public class MiloClientCachingConnectionManagerTest {
 
     private static final Logger LOG = LoggerFactory.getLogger(MiloClientCachingConnectionManagerTest.class);
-    
+
     private MiloClientCachingConnectionManager instance;
 
     @BeforeEach
     public void setup(TestInfo testInfo) {
-        final var displayName=testInfo.getDisplayName();
+        final var displayName = testInfo.getDisplayName();
         LOG.info("********************************************************************************");
         LOG.info(displayName);
         LOG.info("********************************************************************************");
diff --git a/components/camel-milo/src/test/java/org/apache/camel/component/milo/MonitorItemMultiConnectionsCertTest.java b/components/camel-milo/src/test/java/org/apache/camel/component/milo/MonitorItemMultiConnectionsCertTest.java
index 89d5cae692b..6a58bbdec42 100644
--- a/components/camel-milo/src/test/java/org/apache/camel/component/milo/MonitorItemMultiConnectionsCertTest.java
+++ b/components/camel-milo/src/test/java/org/apache/camel/component/milo/MonitorItemMultiConnectionsCertTest.java
@@ -70,7 +70,7 @@ public class MonitorItemMultiConnectionsCertTest extends AbstractMiloServerTest
     private static final String MOCK_TEST_3 = "mock:test3";
 
     private static final Logger LOG = LoggerFactory.getLogger(MonitorItemMultiConnectionsCertTest.class);
-    
+
     @EndpointInject(MOCK_TEST_1)
     protected MockEndpoint test1Endpoint;
 
@@ -82,15 +82,15 @@ public class MonitorItemMultiConnectionsCertTest extends AbstractMiloServerTest
 
     @Produce(DIRECT_START_1)
     protected ProducerTemplate producer1;
-    
+
     @BeforeEach
     public void setup(TestInfo testInfo) {
-        final var displayName=testInfo.getDisplayName();
+        final var displayName = testInfo.getDisplayName();
         LOG.info("********************************************************************************");
         LOG.info(displayName);
         LOG.info("********************************************************************************");
     }
-    
+
     @Override
     protected void configureMiloServer(final MiloServerComponent server) throws Exception {
         super.configureMiloServer(server);
diff --git a/components/camel-milo/src/test/java/org/apache/camel/component/milo/MonitorItemMultiConnectionsTest.java b/components/camel-milo/src/test/java/org/apache/camel/component/milo/MonitorItemMultiConnectionsTest.java
index a4a16818d54..af212f9e903 100644
--- a/components/camel-milo/src/test/java/org/apache/camel/component/milo/MonitorItemMultiConnectionsTest.java
+++ b/components/camel-milo/src/test/java/org/apache/camel/component/milo/MonitorItemMultiConnectionsTest.java
@@ -58,7 +58,7 @@ public class MonitorItemMultiConnectionsTest extends AbstractMiloServerTest {
     private static final String MOCK_TEST_3 = "mock:test3";
 
     private static final Logger LOG = LoggerFactory.getLogger(MonitorItemMultiConnectionsTest.class);
-    
+
     @EndpointInject(MOCK_TEST_1)
     protected MockEndpoint test1Endpoint;
 
@@ -70,15 +70,15 @@ public class MonitorItemMultiConnectionsTest extends AbstractMiloServerTest {
 
     @Produce(DIRECT_START_1)
     protected ProducerTemplate producer1;
-    
+
     @BeforeEach
     public void setup(TestInfo testInfo) {
-        final var displayName=testInfo.getDisplayName();
+        final var displayName = testInfo.getDisplayName();
         LOG.info("********************************************************************************");
         LOG.info(displayName);
         LOG.info("********************************************************************************");
     }
-    
+
     @Override
     protected RoutesBuilder createRouteBuilder() {
         return new RouteBuilder() {
diff --git a/components/camel-milo/src/test/java/org/apache/camel/component/milo/MonitorItemTest.java b/components/camel-milo/src/test/java/org/apache/camel/component/milo/MonitorItemTest.java
index 228fd9b9c0e..68c6e13a9ab 100644
--- a/components/camel-milo/src/test/java/org/apache/camel/component/milo/MonitorItemTest.java
+++ b/components/camel-milo/src/test/java/org/apache/camel/component/milo/MonitorItemTest.java
@@ -31,8 +31,6 @@ import org.junit.jupiter.api.TestInfo;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import static org.apache.camel.LoggingLevel.INFO;
-
 /**
  * Testing the monitor functionality for item
  */
@@ -50,7 +48,7 @@ public class MonitorItemTest extends AbstractMiloServerTest {
     private static final String MOCK_TEST_1 = "mock:test1";
 
     private static final Logger LOG = LoggerFactory.getLogger(MonitorItemTest.class);
-    
+
     @EndpointInject(MOCK_TEST_1)
     protected MockEndpoint test1Endpoint;
 
@@ -68,15 +66,15 @@ public class MonitorItemTest extends AbstractMiloServerTest {
             }
         };
     }
-    
+
     @BeforeEach
     public void setup(TestInfo testInfo) {
-        final var displayName=testInfo.getDisplayName();
+        final var displayName = testInfo.getDisplayName();
         LOG.info("********************************************************************************");
         LOG.info(displayName);
         LOG.info("********************************************************************************");
     }
-    
+
     /**
      * Monitor multiple events
      */
@@ -86,12 +84,12 @@ public class MonitorItemTest extends AbstractMiloServerTest {
          * we will wait 2 * 1_000 milliseconds between server updates since the
          * default server update rate is 1_000 milliseconds
          */
-        final var time=2 * 1_000;
-        
+        final var time = 2 * 1_000;
+
         // item 1 ... only this one receives
         test1Endpoint.reset();
         test1Endpoint.setExpectedCount(3);
-        
+
         // set server values
         this.producer1.sendBody("Foo");
         Thread.sleep(time);
@@ -106,6 +104,6 @@ public class MonitorItemTest extends AbstractMiloServerTest {
         testBody(this.test1Endpoint.message(2), assertGoodValue("Baz"));
 
         // assert
-        assertMockEndpointsSatisfied(time,TimeUnit.MILLISECONDS);
+        assertMockEndpointsSatisfied(time, TimeUnit.MILLISECONDS);
     }
 }
diff --git a/components/camel-milo/src/test/java/org/apache/camel/component/milo/ReadValuesClientTest.java b/components/camel-milo/src/test/java/org/apache/camel/component/milo/ReadValuesClientTest.java
index a2b277ad2e8..97500ac124c 100644
--- a/components/camel-milo/src/test/java/org/apache/camel/component/milo/ReadValuesClientTest.java
+++ b/components/camel-milo/src/test/java/org/apache/camel/component/milo/ReadValuesClientTest.java
@@ -45,7 +45,7 @@ public class ReadValuesClientTest extends AbstractMiloServerTest {
     private static final String MOCK_TEST_1 = "mock:test1";
 
     private static final Logger LOG = LoggerFactory.getLogger(ReadValuesClientTest.class);
-    
+
     @EndpointInject(MOCK_TEST_1)
     protected MockEndpoint test1Endpoint;
 
@@ -54,15 +54,15 @@ public class ReadValuesClientTest extends AbstractMiloServerTest {
 
     @Produce(DIRECT_START_2)
     protected ProducerTemplate producer2;
-    
+
     @BeforeEach
     public void setup(TestInfo testInfo) {
-        final var displayName=testInfo.getDisplayName();
+        final var displayName = testInfo.getDisplayName();
         LOG.info("********************************************************************************");
         LOG.info(displayName);
         LOG.info("********************************************************************************");
     }
-    
+
     @Override
     protected RoutesBuilder createRouteBuilder() {
         return new RouteBuilder() {
diff --git a/components/camel-milo/src/test/java/org/apache/camel/component/milo/WriteClientTest.java b/components/camel-milo/src/test/java/org/apache/camel/component/milo/WriteClientTest.java
index 8158b032984..7d9c6f6afdf 100644
--- a/components/camel-milo/src/test/java/org/apache/camel/component/milo/WriteClientTest.java
+++ b/components/camel-milo/src/test/java/org/apache/camel/component/milo/WriteClientTest.java
@@ -64,9 +64,9 @@ public class WriteClientTest extends AbstractMiloServerTest {
 
     private static final String MOCK_TEST_1 = "mock:test1";
     private static final String MOCK_TEST_2 = "mock:test2";
-    
+
     private static final Logger LOG = LoggerFactory.getLogger(WriteClientTest.class);
-    
+
     @EndpointInject(MOCK_TEST_1)
     protected MockEndpoint test1Endpoint;
 
@@ -102,15 +102,15 @@ public class WriteClientTest extends AbstractMiloServerTest {
             }
         };
     }
-    
+
     @BeforeEach
     public void setup(TestInfo testInfo) {
-        final var displayName=testInfo.getDisplayName();
+        final var displayName = testInfo.getDisplayName();
         LOG.info("********************************************************************************");
         LOG.info(displayName);
         LOG.info("********************************************************************************");
     }
-    
+
     @Test
     public void testWrite1() throws Exception {
         // item 1
diff --git a/components/camel-milo/src/test/java/org/apache/camel/component/milo/browse/BrowseServerTest.java b/components/camel-milo/src/test/java/org/apache/camel/component/milo/browse/BrowseServerTest.java
index 1a006c9a4a6..eeefc6cd03d 100644
--- a/components/camel-milo/src/test/java/org/apache/camel/component/milo/browse/BrowseServerTest.java
+++ b/components/camel-milo/src/test/java/org/apache/camel/component/milo/browse/BrowseServerTest.java
@@ -106,7 +106,7 @@ public class BrowseServerTest extends AbstractMiloServerTest {
 
     private static final String MILO_BROWSE_NODE_VIA_ENDPOINT
             = MILO_BROWSE_ROOT + "&node=RAW(ns=0;i=86)";
-    
+
     private static final Logger LOG = LoggerFactory.getLogger(BrowseServerTest.class);
 
     @EndpointInject(MOCK_TEST_1)
@@ -162,15 +162,15 @@ public class BrowseServerTest extends AbstractMiloServerTest {
 
     @Produce(DIRECT_START_9)
     protected ProducerTemplate producer9;
-    
+
     @BeforeEach
     public void setup(TestInfo testInfo) {
-        final var displayName=testInfo.getDisplayName();
+        final var displayName = testInfo.getDisplayName();
         LOG.info("********************************************************************************");
         LOG.info(displayName);
         LOG.info("********************************************************************************");
     }
-    
+
     @Override
     protected RoutesBuilder createRouteBuilder() {
         return new RouteBuilder() {
diff --git a/components/camel-milo/src/test/java/org/apache/camel/component/milo/call/CallClientTest.java b/components/camel-milo/src/test/java/org/apache/camel/component/milo/call/CallClientTest.java
index 846f4140889..208cf732e15 100644
--- a/components/camel-milo/src/test/java/org/apache/camel/component/milo/call/CallClientTest.java
+++ b/components/camel-milo/src/test/java/org/apache/camel/component/milo/call/CallClientTest.java
@@ -67,17 +67,17 @@ public class CallClientTest extends AbstractMiloServerTest {
               + "&method=" + nodeValue(MockCamelNamespace.URI, MockCamelNamespace.CALL_ID) + "&overrideHost=true";
 
     private static final Logger LOG = LoggerFactory.getLogger(CallClientTest.class);
-    
+
     private OpcUaServer server;
     private MockCamelNamespace namespace;
     private MockCallMethod callMethod;
 
     @Produce(DIRECT_START_1)
     private ProducerTemplate producer1;
-    
+
     @BeforeEach
     public void setup(TestInfo testInfo) {
-        final var displayName=testInfo.getDisplayName();
+        final var displayName = testInfo.getDisplayName();
         LOG.info("********************************************************************************");
         LOG.info(displayName);
         LOG.info("********************************************************************************");
@@ -188,20 +188,20 @@ public class CallClientTest extends AbstractMiloServerTest {
         // we always write synchronously since we do need the message order
         producerTemplate.sendBodyAndHeader(input, "await", true);
     }
-    
-    private static final class InsecureCertificateValidator implements ServerCertificateValidator{
-        
+
+    private static final class InsecureCertificateValidator implements ServerCertificateValidator {
+
         public static final ServerCertificateValidator INSTANCE = new CallClientTest.InsecureCertificateValidator();
-        
+
         private InsecureCertificateValidator() {
         }
-        
+
         @Override
-        public void validateCertificateChain(List<X509Certificate> list,String s) throws UaException {
+        public void validateCertificateChain(List<X509Certificate> list, String s) throws UaException {
         }
-        
+
         @Override
-        public void validateCertificateChain(List<X509Certificate> list) throws UaException{
+        public void validateCertificateChain(List<X509Certificate> list) throws UaException {
         }
     }
 }
diff --git a/components/camel-milo/src/test/java/org/apache/camel/component/milo/call/MockCamelNamespace.java b/components/camel-milo/src/test/java/org/apache/camel/component/milo/call/MockCamelNamespace.java
index b8240cf3b4b..2893153ba2e 100644
--- a/components/camel-milo/src/test/java/org/apache/camel/component/milo/call/MockCamelNamespace.java
+++ b/components/camel-milo/src/test/java/org/apache/camel/component/milo/call/MockCamelNamespace.java
@@ -40,7 +40,7 @@ import org.eclipse.milo.opcua.stack.core.types.builtin.QualifiedName;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class MockCamelNamespace extends ManagedNamespaceWithLifecycle{
+public class MockCamelNamespace extends ManagedNamespaceWithLifecycle {
 
     public static final String URI = "urn:org:apache:camel:mock";
     public static final int FOLDER_ID = 1;
@@ -62,24 +62,24 @@ public class MockCamelNamespace extends ManagedNamespaceWithLifecycle{
 
         this.subscriptionModel = new SubscriptionModel(server, this);
         this.callMethodCreator = callMethodCreator;
-    
+
         super.getLifecycleManager().addLifecycle(new Lifecycle() {
-        
+
             @Override
             public void startup() {
                 LOG.trace("CamelNamespace startup");
                 createNodes();
             }
-        
+
             @Override
             public void shutdown() {
                 LOG.trace("CamelNamespace shutdown");
             }
         });
     }
-    
+
     private void createNodes() {
-        
+
         // create structure
 
         final NodeId nodeId = newNodeId(FOLDER_ID);
diff --git a/components/camel-milo/src/test/java/org/apache/camel/component/milo/client/NodeIdTest.java b/components/camel-milo/src/test/java/org/apache/camel/component/milo/client/NodeIdTest.java
index f5ad99980b9..1869d639429 100644
--- a/components/camel-milo/src/test/java/org/apache/camel/component/milo/client/NodeIdTest.java
+++ b/components/camel-milo/src/test/java/org/apache/camel/component/milo/client/NodeIdTest.java
@@ -39,9 +39,9 @@ import static org.junit.jupiter.api.Assertions.assertThrows;
  * Testing different ways to specify node IDs
  */
 public class NodeIdTest extends AbstractMiloServerTest {
-    
+
     private static final Logger LOG = LoggerFactory.getLogger(NodeIdTest.class);
-    
+
     @BeforeEach
     public void setup(TestInfo testInfo) {
         final var displayName = testInfo.getDisplayName();
@@ -49,7 +49,7 @@ public class NodeIdTest extends AbstractMiloServerTest {
         LOG.info(displayName);
         LOG.info("********************************************************************************");
     }
-    
+
     @Test
     public void testFull1() {
         final String s = String.format("nsu=%s;s=%s", DEFAULT_NAMESPACE_URI, "item-1");
diff --git a/components/camel-milo/src/test/java/org/apache/camel/component/milo/converter/ConverterTest.java b/components/camel-milo/src/test/java/org/apache/camel/component/milo/converter/ConverterTest.java
index b771fec3043..c6bea708738 100644
--- a/components/camel-milo/src/test/java/org/apache/camel/component/milo/converter/ConverterTest.java
+++ b/components/camel-milo/src/test/java/org/apache/camel/component/milo/converter/ConverterTest.java
@@ -30,9 +30,9 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class ConverterTest extends CamelTestSupport {
-    
+
     private static final Logger LOG = LoggerFactory.getLogger(ConverterTest.class);
-    
+
     @BeforeEach
     public void setup(TestInfo testInfo) {
         final var displayName = testInfo.getDisplayName();
@@ -40,7 +40,7 @@ public class ConverterTest extends CamelTestSupport {
         LOG.info(displayName);
         LOG.info("********************************************************************************");
     }
-    
+
     @Test
     public void testDataValueToVariant() {
         final Variant value = testConvertDataValue("Foo", Variant.class);
diff --git a/components/camel-milo/src/test/java/org/apache/camel/component/milo/server/ServerLocalTest.java b/components/camel-milo/src/test/java/org/apache/camel/component/milo/server/ServerLocalTest.java
index e757b707b96..998e3ac1805 100644
--- a/components/camel-milo/src/test/java/org/apache/camel/component/milo/server/ServerLocalTest.java
+++ b/components/camel-milo/src/test/java/org/apache/camel/component/milo/server/ServerLocalTest.java
@@ -40,12 +40,12 @@ public class ServerLocalTest extends CamelTestSupport {
     private static final String MILO_ITEM_1 = "milo-server:myitem1";
 
     private static final String MOCK_TEST = "mock:test";
-    
+
     private static final Logger LOG = LoggerFactory.getLogger(ConverterTest.class);
 
     @EndpointInject(MOCK_TEST)
     protected MockEndpoint testEndpoint;
-    
+
     @BeforeEach
     public void pickFreePort(TestInfo testInfo) {
         final var displayName = testInfo.getDisplayName();
diff --git a/components/camel-milo/src/test/java/org/apache/camel/component/milo/server/ServerSetCertificateManagerTest.java b/components/camel-milo/src/test/java/org/apache/camel/component/milo/server/ServerSetCertificateManagerTest.java
index e9b0840b613..dece0fee534 100644
--- a/components/camel-milo/src/test/java/org/apache/camel/component/milo/server/ServerSetCertificateManagerTest.java
+++ b/components/camel-milo/src/test/java/org/apache/camel/component/milo/server/ServerSetCertificateManagerTest.java
@@ -33,9 +33,9 @@ import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
  * Test setting the certificate manager
  */
 public class ServerSetCertificateManagerTest extends AbstractMiloServerTest {
-    
+
     private static final Logger LOG = LoggerFactory.getLogger(ServerSetCertificateManagerTest.class);
-    
+
     @BeforeEach
     public void setup(TestInfo testInfo) {
         final var displayName = testInfo.getDisplayName();
@@ -43,7 +43,7 @@ public class ServerSetCertificateManagerTest extends AbstractMiloServerTest {
         LOG.info(displayName);
         LOG.info("********************************************************************************");
     }
-    
+
     @Override
     protected void configureMiloServer(final MiloServerComponent server) throws Exception {
         super.configureMiloServer(server);
diff --git a/components/camel-milo/src/test/java/org/apache/camel/component/milo/server/ServerSetSecurityPoliciesTest.java b/components/camel-milo/src/test/java/org/apache/camel/component/milo/server/ServerSetSecurityPoliciesTest.java
index 3156a7d4806..6238aa193a3 100644
--- a/components/camel-milo/src/test/java/org/apache/camel/component/milo/server/ServerSetSecurityPoliciesTest.java
+++ b/components/camel-milo/src/test/java/org/apache/camel/component/milo/server/ServerSetSecurityPoliciesTest.java
@@ -28,9 +28,9 @@ import org.slf4j.LoggerFactory;
  * Test setting security policies
  */
 public class ServerSetSecurityPoliciesTest extends CamelTestSupport {
-    
+
     private static final Logger LOG = LoggerFactory.getLogger(ServerSetSecurityPoliciesTest.class);
-    
+
     @BeforeEach
     public void setup(TestInfo testInfo) {
         final var displayName = testInfo.getDisplayName();
@@ -38,7 +38,7 @@ public class ServerSetSecurityPoliciesTest extends CamelTestSupport {
         LOG.info(displayName);
         LOG.info("********************************************************************************");
     }
-    
+
     @Test
     public void testSetSecurityPolicies1() {
         final MiloServerComponent component = new MiloServerComponent();
diff --git a/parent/pom.xml b/parent/pom.xml
index 7d220ca09e1..5e5885c1a7c 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -390,7 +390,7 @@
         <microprofile-config-version>2.0.1</microprofile-config-version>
         <microprofile-metrics-version>3.0.1</microprofile-metrics-version>
         <microprofile-fault-tolerance-version>3.0</microprofile-fault-tolerance-version>
-        <milo-version>0.3.7</milo-version>
+        <milo-version>0.6.6</milo-version>
         <milo-guava-version>26.0-jre</milo-guava-version>
         <mina-version>2.1.5</mina-version>
         <minidns-version>0.3.4</minidns-version>