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

acosentino pushed a commit to branch CAMEL-22086
in repository https://gitbox.apache.org/repos/asf/camel.git

commit ce90e987753a7c42562d0c58112ce021355a3e10
Author: Sebastian Steinfeld <[email protected]>
AuthorDate: Mon Sep 22 17:37:32 2025 +0200

    CAMEL-22086 - migrate to current milo version
---
 .../milo/browse/MiloBrowseComponentConfigurer.java |  76 ++++-----
 .../milo/browse/MiloBrowseEndpointConfigurer.java  |  88 +++++------
 .../milo/client/MiloClientComponentConfigurer.java |  88 +++++------
 .../milo/client/MiloClientEndpointConfigurer.java  |  96 ++++++------
 .../milo/converter/ValueConverterLoader.java       |   4 +-
 .../milo/server/MiloServerComponentConfigurer.java |  36 ++---
 .../services/org/apache/camel/component.properties |   2 +-
 .../camel/component/milo/browse/milo-browse.json   |   2 +-
 .../camel/component/milo/client/milo-client.json   |   4 +-
 .../camel/component/milo/server/milo-server.json   |   2 +-
 .../milo/client/MiloClientConfiguration.java       |  12 +-
 .../milo/client/MonitorFilterConfiguration.java    |   7 +-
 .../milo/client/internal/SubscriptionManager.java  | 169 ++++++++++++++-------
 .../component/milo/server/MiloServerComponent.java | 169 ++++++++++++++-------
 .../component/milo/server/internal/CallMethod.java |   2 +-
 .../milo/server/internal/CamelNamespace.java       |  12 +-
 .../milo/server/internal/CamelServerItem.java      |   6 +-
 .../camel/component/milo/call/CallClientTest.java  |  90 ++++++-----
 .../camel/component/milo/call/MockCallMethod.java  |   2 +-
 .../component/milo/call/MockCamelNamespace.java    |   8 +-
 .../milo/call/TestCertificateFactory.java          |  79 ++++++++++
 .../camel/component/milo/client/NodeIdTest.java    |  12 +-
 22 files changed, 588 insertions(+), 378 deletions(-)

diff --git 
a/components/camel-milo/src/generated/java/org/apache/camel/component/milo/browse/MiloBrowseComponentConfigurer.java
 
b/components/camel-milo/src/generated/java/org/apache/camel/component/milo/browse/MiloBrowseComponentConfigurer.java
index 15d217eb5675..0d248a6b7917 100644
--- 
a/components/camel-milo/src/generated/java/org/apache/camel/component/milo/browse/MiloBrowseComponentConfigurer.java
+++ 
b/components/camel-milo/src/generated/java/org/apache/camel/component/milo/browse/MiloBrowseComponentConfigurer.java
@@ -29,52 +29,52 @@ public class MiloBrowseComponentConfigurer extends 
PropertyConfigurerSupport imp
         MiloBrowseComponent target = (MiloBrowseComponent) obj;
         switch (ignoreCase ? name.toLowerCase() : name) {
         case "allowedsecuritypolicies":
-        case "allowedSecurityPolicies": 
getOrCreateConfiguration(target).setAllowedSecurityPolicies(property(camelContext,
 java.lang.String.class, value)); return true;
+        case "allowedSecurityPolicies": 
getOrCreateConfiguration(target).setAllowedSecurityPolicies(property(camelContext,
 String.class, value)); return true;
         case "applicationname":
-        case "applicationName": 
getOrCreateConfiguration(target).setApplicationName(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "applicationName": 
getOrCreateConfiguration(target).setApplicationName(property(camelContext, 
String.class, value)); return true;
         case "applicationuri":
-        case "applicationUri": 
getOrCreateConfiguration(target).setApplicationUri(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "applicationUri": 
getOrCreateConfiguration(target).setApplicationUri(property(camelContext, 
String.class, value)); return true;
         case "autowiredenabled":
         case "autowiredEnabled": 
target.setAutowiredEnabled(property(camelContext, boolean.class, value)); 
return true;
         case "channellifetime":
-        case "channelLifetime": 
getOrCreateConfiguration(target).setChannelLifetime(property(camelContext, 
java.lang.Long.class, value)); return true;
+        case "channelLifetime": 
getOrCreateConfiguration(target).setChannelLifetime(property(camelContext, 
Long.class, value)); return true;
         case "clientid":
-        case "clientId": 
getOrCreateConfiguration(target).setClientId(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "clientId": 
getOrCreateConfiguration(target).setClientId(property(camelContext, 
String.class, value)); return true;
         case "configuration": target.setConfiguration(property(camelContext, 
org.apache.camel.component.milo.client.MiloClientConfiguration.class, value)); 
return true;
         case "discoveryendpointsuffix":
-        case "discoveryEndpointSuffix": 
getOrCreateConfiguration(target).setDiscoveryEndpointSuffix(property(camelContext,
 java.lang.String.class, value)); return true;
+        case "discoveryEndpointSuffix": 
getOrCreateConfiguration(target).setDiscoveryEndpointSuffix(property(camelContext,
 String.class, value)); return true;
         case "discoveryendpointuri":
-        case "discoveryEndpointUri": 
getOrCreateConfiguration(target).setDiscoveryEndpointUri(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "discoveryEndpointUri": 
getOrCreateConfiguration(target).setDiscoveryEndpointUri(property(camelContext, 
String.class, value)); return true;
         case "keyalias":
-        case "keyAlias": 
getOrCreateConfiguration(target).setKeyAlias(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "keyAlias": 
getOrCreateConfiguration(target).setKeyAlias(property(camelContext, 
String.class, value)); return true;
         case "keypassword":
-        case "keyPassword": 
getOrCreateConfiguration(target).setKeyPassword(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "keyPassword": 
getOrCreateConfiguration(target).setKeyPassword(property(camelContext, 
String.class, value)); return true;
         case "keystorepassword":
-        case "keyStorePassword": 
getOrCreateConfiguration(target).setKeyStorePassword(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "keyStorePassword": 
getOrCreateConfiguration(target).setKeyStorePassword(property(camelContext, 
String.class, value)); return true;
         case "keystoretype":
-        case "keyStoreType": 
getOrCreateConfiguration(target).setKeyStoreType(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "keyStoreType": 
getOrCreateConfiguration(target).setKeyStoreType(property(camelContext, 
String.class, value)); return true;
         case "keystoreurl":
-        case "keyStoreUrl": 
getOrCreateConfiguration(target).setKeyStoreUrl(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "keyStoreUrl": 
getOrCreateConfiguration(target).setKeyStoreUrl(property(camelContext, 
String.class, value)); return true;
         case "lazystartproducer":
         case "lazyStartProducer": 
target.setLazyStartProducer(property(camelContext, boolean.class, value)); 
return true;
         case "maxpendingpublishrequests":
-        case "maxPendingPublishRequests": 
getOrCreateConfiguration(target).setMaxPendingPublishRequests(property(camelContext,
 java.lang.Long.class, value)); return true;
+        case "maxPendingPublishRequests": 
getOrCreateConfiguration(target).setMaxPendingPublishRequests(property(camelContext,
 Long.class, value)); return true;
         case "maxresponsemessagesize":
-        case "maxResponseMessageSize": 
getOrCreateConfiguration(target).setMaxResponseMessageSize(property(camelContext,
 java.lang.Long.class, value)); return true;
+        case "maxResponseMessageSize": 
getOrCreateConfiguration(target).setMaxResponseMessageSize(property(camelContext,
 Long.class, value)); return true;
         case "miloclientconnectionmanager":
         case "miloClientConnectionManager": 
target.setMiloClientConnectionManager(property(camelContext, 
org.apache.camel.component.milo.client.MiloClientConnectionManager.class, 
value)); return true;
         case "overridehost":
         case "overrideHost": 
getOrCreateConfiguration(target).setOverrideHost(property(camelContext, 
boolean.class, value)); return true;
         case "producturi":
-        case "productUri": 
getOrCreateConfiguration(target).setProductUri(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "productUri": 
getOrCreateConfiguration(target).setProductUri(property(camelContext, 
String.class, value)); return true;
         case "requesttimeout":
-        case "requestTimeout": 
getOrCreateConfiguration(target).setRequestTimeout(property(camelContext, 
java.lang.Long.class, value)); return true;
+        case "requestTimeout": 
getOrCreateConfiguration(target).setRequestTimeout(property(camelContext, 
Long.class, value)); return true;
         case "requestedpublishinginterval":
-        case "requestedPublishingInterval": 
getOrCreateConfiguration(target).setRequestedPublishingInterval(property(camelContext,
 java.lang.Double.class, value)); return true;
+        case "requestedPublishingInterval": 
getOrCreateConfiguration(target).setRequestedPublishingInterval(property(camelContext,
 Double.class, value)); return true;
         case "sessionname":
-        case "sessionName": 
getOrCreateConfiguration(target).setSessionName(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "sessionName": 
getOrCreateConfiguration(target).setSessionName(property(camelContext, 
String.class, value)); return true;
         case "sessiontimeout":
-        case "sessionTimeout": 
getOrCreateConfiguration(target).setSessionTimeout(property(camelContext, 
java.lang.Long.class, value)); return true;
+        case "sessionTimeout": 
getOrCreateConfiguration(target).setSessionTimeout(property(camelContext, 
Long.class, value)); return true;
         default: return false;
         }
     }
@@ -88,52 +88,52 @@ public class MiloBrowseComponentConfigurer extends 
PropertyConfigurerSupport imp
     public Class<?> getOptionType(String name, boolean ignoreCase) {
         switch (ignoreCase ? name.toLowerCase() : name) {
         case "allowedsecuritypolicies":
-        case "allowedSecurityPolicies": return java.lang.String.class;
+        case "allowedSecurityPolicies": return String.class;
         case "applicationname":
-        case "applicationName": return java.lang.String.class;
+        case "applicationName": return String.class;
         case "applicationuri":
-        case "applicationUri": return java.lang.String.class;
+        case "applicationUri": return String.class;
         case "autowiredenabled":
         case "autowiredEnabled": return boolean.class;
         case "channellifetime":
-        case "channelLifetime": return java.lang.Long.class;
+        case "channelLifetime": return Long.class;
         case "clientid":
-        case "clientId": return java.lang.String.class;
+        case "clientId": return String.class;
         case "configuration": return 
org.apache.camel.component.milo.client.MiloClientConfiguration.class;
         case "discoveryendpointsuffix":
-        case "discoveryEndpointSuffix": return java.lang.String.class;
+        case "discoveryEndpointSuffix": return String.class;
         case "discoveryendpointuri":
-        case "discoveryEndpointUri": return java.lang.String.class;
+        case "discoveryEndpointUri": return String.class;
         case "keyalias":
-        case "keyAlias": return java.lang.String.class;
+        case "keyAlias": return String.class;
         case "keypassword":
-        case "keyPassword": return java.lang.String.class;
+        case "keyPassword": return String.class;
         case "keystorepassword":
-        case "keyStorePassword": return java.lang.String.class;
+        case "keyStorePassword": return String.class;
         case "keystoretype":
-        case "keyStoreType": return java.lang.String.class;
+        case "keyStoreType": return String.class;
         case "keystoreurl":
-        case "keyStoreUrl": return java.lang.String.class;
+        case "keyStoreUrl": return String.class;
         case "lazystartproducer":
         case "lazyStartProducer": return boolean.class;
         case "maxpendingpublishrequests":
-        case "maxPendingPublishRequests": return java.lang.Long.class;
+        case "maxPendingPublishRequests": return Long.class;
         case "maxresponsemessagesize":
-        case "maxResponseMessageSize": return java.lang.Long.class;
+        case "maxResponseMessageSize": return Long.class;
         case "miloclientconnectionmanager":
         case "miloClientConnectionManager": return 
org.apache.camel.component.milo.client.MiloClientConnectionManager.class;
         case "overridehost":
         case "overrideHost": return boolean.class;
         case "producturi":
-        case "productUri": return java.lang.String.class;
+        case "productUri": return String.class;
         case "requesttimeout":
-        case "requestTimeout": return java.lang.Long.class;
+        case "requestTimeout": return Long.class;
         case "requestedpublishinginterval":
-        case "requestedPublishingInterval": return java.lang.Double.class;
+        case "requestedPublishingInterval": return Double.class;
         case "sessionname":
-        case "sessionName": return java.lang.String.class;
+        case "sessionName": return String.class;
         case "sessiontimeout":
-        case "sessionTimeout": return java.lang.Long.class;
+        case "sessionTimeout": return Long.class;
         default: return null;
         }
     }
diff --git 
a/components/camel-milo/src/generated/java/org/apache/camel/component/milo/browse/MiloBrowseEndpointConfigurer.java
 
b/components/camel-milo/src/generated/java/org/apache/camel/component/milo/browse/MiloBrowseEndpointConfigurer.java
index 5923b0b853a5..a6578f035091 100644
--- 
a/components/camel-milo/src/generated/java/org/apache/camel/component/milo/browse/MiloBrowseEndpointConfigurer.java
+++ 
b/components/camel-milo/src/generated/java/org/apache/camel/component/milo/browse/MiloBrowseEndpointConfigurer.java
@@ -22,58 +22,58 @@ public class MiloBrowseEndpointConfigurer extends 
PropertyConfigurerSupport impl
         MiloBrowseEndpoint target = (MiloBrowseEndpoint) obj;
         switch (ignoreCase ? name.toLowerCase() : name) {
         case "allowedsecuritypolicies":
-        case "allowedSecurityPolicies": 
target.getConfiguration().setAllowedSecurityPolicies(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "allowedSecurityPolicies": 
target.getConfiguration().setAllowedSecurityPolicies(property(camelContext, 
String.class, value)); return true;
         case "applicationname":
-        case "applicationName": 
target.getConfiguration().setApplicationName(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "applicationName": 
target.getConfiguration().setApplicationName(property(camelContext, 
String.class, value)); return true;
         case "applicationuri":
-        case "applicationUri": 
target.getConfiguration().setApplicationUri(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "applicationUri": 
target.getConfiguration().setApplicationUri(property(camelContext, 
String.class, value)); return true;
         case "channellifetime":
-        case "channelLifetime": 
target.getConfiguration().setChannelLifetime(property(camelContext, 
java.lang.Long.class, value)); return true;
+        case "channelLifetime": 
target.getConfiguration().setChannelLifetime(property(camelContext, Long.class, 
value)); return true;
         case "clientid":
-        case "clientId": 
target.getConfiguration().setClientId(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "clientId": 
target.getConfiguration().setClientId(property(camelContext, String.class, 
value)); return true;
         case "depth": target.setDepth(property(camelContext, int.class, 
value)); return true;
         case "direction": target.setDirection(property(camelContext, 
org.eclipse.milo.opcua.stack.core.types.enumerated.BrowseDirection.class, 
value)); return true;
         case "discoveryendpointsuffix":
-        case "discoveryEndpointSuffix": 
target.getConfiguration().setDiscoveryEndpointSuffix(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "discoveryEndpointSuffix": 
target.getConfiguration().setDiscoveryEndpointSuffix(property(camelContext, 
String.class, value)); return true;
         case "discoveryendpointuri":
-        case "discoveryEndpointUri": 
target.getConfiguration().setDiscoveryEndpointUri(property(camelContext, 
java.lang.String.class, value)); return true;
-        case "filter": target.setFilter(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "discoveryEndpointUri": 
target.getConfiguration().setDiscoveryEndpointUri(property(camelContext, 
String.class, value)); return true;
+        case "filter": target.setFilter(property(camelContext, String.class, 
value)); return true;
         case "includesubtypes":
         case "includeSubTypes": 
target.setIncludeSubTypes(property(camelContext, boolean.class, value)); return 
true;
         case "keyalias":
-        case "keyAlias": 
target.getConfiguration().setKeyAlias(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "keyAlias": 
target.getConfiguration().setKeyAlias(property(camelContext, String.class, 
value)); return true;
         case "keypassword":
-        case "keyPassword": 
target.getConfiguration().setKeyPassword(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "keyPassword": 
target.getConfiguration().setKeyPassword(property(camelContext, String.class, 
value)); return true;
         case "keystorepassword":
-        case "keyStorePassword": 
target.getConfiguration().setKeyStorePassword(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "keyStorePassword": 
target.getConfiguration().setKeyStorePassword(property(camelContext, 
String.class, value)); return true;
         case "keystoretype":
-        case "keyStoreType": 
target.getConfiguration().setKeyStoreType(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "keyStoreType": 
target.getConfiguration().setKeyStoreType(property(camelContext, String.class, 
value)); return true;
         case "keystoreurl":
-        case "keyStoreUrl": 
target.getConfiguration().setKeyStoreUrl(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "keyStoreUrl": 
target.getConfiguration().setKeyStoreUrl(property(camelContext, String.class, 
value)); return true;
         case "lazystartproducer":
         case "lazyStartProducer": 
target.setLazyStartProducer(property(camelContext, boolean.class, value)); 
return true;
         case "maxnodeidsperrequest":
         case "maxNodeIdsPerRequest": 
target.setMaxNodeIdsPerRequest(property(camelContext, int.class, value)); 
return true;
         case "maxpendingpublishrequests":
-        case "maxPendingPublishRequests": 
target.getConfiguration().setMaxPendingPublishRequests(property(camelContext, 
java.lang.Long.class, value)); return true;
+        case "maxPendingPublishRequests": 
target.getConfiguration().setMaxPendingPublishRequests(property(camelContext, 
Long.class, value)); return true;
         case "maxresponsemessagesize":
-        case "maxResponseMessageSize": 
target.getConfiguration().setMaxResponseMessageSize(property(camelContext, 
java.lang.Long.class, value)); return true;
-        case "node": target.setNode(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "maxResponseMessageSize": 
target.getConfiguration().setMaxResponseMessageSize(property(camelContext, 
Long.class, value)); return true;
+        case "node": target.setNode(property(camelContext, String.class, 
value)); return true;
         case "nodeclasses":
-        case "nodeClasses": target.setNodeClasses(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "nodeClasses": target.setNodeClasses(property(camelContext, 
String.class, value)); return true;
         case "overridehost":
         case "overrideHost": 
target.getConfiguration().setOverrideHost(property(camelContext, boolean.class, 
value)); return true;
         case "producturi":
-        case "productUri": 
target.getConfiguration().setProductUri(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "productUri": 
target.getConfiguration().setProductUri(property(camelContext, String.class, 
value)); return true;
         case "recursive": target.setRecursive(property(camelContext, 
boolean.class, value)); return true;
         case "requesttimeout":
-        case "requestTimeout": 
target.getConfiguration().setRequestTimeout(property(camelContext, 
java.lang.Long.class, value)); return true;
+        case "requestTimeout": 
target.getConfiguration().setRequestTimeout(property(camelContext, Long.class, 
value)); return true;
         case "requestedpublishinginterval":
-        case "requestedPublishingInterval": 
target.getConfiguration().setRequestedPublishingInterval(property(camelContext, 
java.lang.Double.class, value)); return true;
+        case "requestedPublishingInterval": 
target.getConfiguration().setRequestedPublishingInterval(property(camelContext, 
Double.class, value)); return true;
         case "sessionname":
-        case "sessionName": 
target.getConfiguration().setSessionName(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "sessionName": 
target.getConfiguration().setSessionName(property(camelContext, String.class, 
value)); return true;
         case "sessiontimeout":
-        case "sessionTimeout": 
target.getConfiguration().setSessionTimeout(property(camelContext, 
java.lang.Long.class, value)); return true;
+        case "sessionTimeout": 
target.getConfiguration().setSessionTimeout(property(camelContext, Long.class, 
value)); return true;
         default: return false;
         }
     }
@@ -82,58 +82,58 @@ public class MiloBrowseEndpointConfigurer extends 
PropertyConfigurerSupport impl
     public Class<?> getOptionType(String name, boolean ignoreCase) {
         switch (ignoreCase ? name.toLowerCase() : name) {
         case "allowedsecuritypolicies":
-        case "allowedSecurityPolicies": return java.lang.String.class;
+        case "allowedSecurityPolicies": return String.class;
         case "applicationname":
-        case "applicationName": return java.lang.String.class;
+        case "applicationName": return String.class;
         case "applicationuri":
-        case "applicationUri": return java.lang.String.class;
+        case "applicationUri": return String.class;
         case "channellifetime":
-        case "channelLifetime": return java.lang.Long.class;
+        case "channelLifetime": return Long.class;
         case "clientid":
-        case "clientId": return java.lang.String.class;
+        case "clientId": return String.class;
         case "depth": return int.class;
         case "direction": return 
org.eclipse.milo.opcua.stack.core.types.enumerated.BrowseDirection.class;
         case "discoveryendpointsuffix":
-        case "discoveryEndpointSuffix": return java.lang.String.class;
+        case "discoveryEndpointSuffix": return String.class;
         case "discoveryendpointuri":
-        case "discoveryEndpointUri": return java.lang.String.class;
-        case "filter": return java.lang.String.class;
+        case "discoveryEndpointUri": return String.class;
+        case "filter": return String.class;
         case "includesubtypes":
         case "includeSubTypes": return boolean.class;
         case "keyalias":
-        case "keyAlias": return java.lang.String.class;
+        case "keyAlias": return String.class;
         case "keypassword":
-        case "keyPassword": return java.lang.String.class;
+        case "keyPassword": return String.class;
         case "keystorepassword":
-        case "keyStorePassword": return java.lang.String.class;
+        case "keyStorePassword": return String.class;
         case "keystoretype":
-        case "keyStoreType": return java.lang.String.class;
+        case "keyStoreType": return String.class;
         case "keystoreurl":
-        case "keyStoreUrl": return java.lang.String.class;
+        case "keyStoreUrl": return String.class;
         case "lazystartproducer":
         case "lazyStartProducer": return boolean.class;
         case "maxnodeidsperrequest":
         case "maxNodeIdsPerRequest": return int.class;
         case "maxpendingpublishrequests":
-        case "maxPendingPublishRequests": return java.lang.Long.class;
+        case "maxPendingPublishRequests": return Long.class;
         case "maxresponsemessagesize":
-        case "maxResponseMessageSize": return java.lang.Long.class;
-        case "node": return java.lang.String.class;
+        case "maxResponseMessageSize": return Long.class;
+        case "node": return String.class;
         case "nodeclasses":
-        case "nodeClasses": return java.lang.String.class;
+        case "nodeClasses": return String.class;
         case "overridehost":
         case "overrideHost": return boolean.class;
         case "producturi":
-        case "productUri": return java.lang.String.class;
+        case "productUri": return String.class;
         case "recursive": return boolean.class;
         case "requesttimeout":
-        case "requestTimeout": return java.lang.Long.class;
+        case "requestTimeout": return Long.class;
         case "requestedpublishinginterval":
-        case "requestedPublishingInterval": return java.lang.Double.class;
+        case "requestedPublishingInterval": return Double.class;
         case "sessionname":
-        case "sessionName": return java.lang.String.class;
+        case "sessionName": return String.class;
         case "sessiontimeout":
-        case "sessionTimeout": return java.lang.Long.class;
+        case "sessionTimeout": return Long.class;
         default: return null;
         }
     }
diff --git 
a/components/camel-milo/src/generated/java/org/apache/camel/component/milo/client/MiloClientComponentConfigurer.java
 
b/components/camel-milo/src/generated/java/org/apache/camel/component/milo/client/MiloClientComponentConfigurer.java
index 1f6b384409e9..8c635f17e2cc 100644
--- 
a/components/camel-milo/src/generated/java/org/apache/camel/component/milo/client/MiloClientComponentConfigurer.java
+++ 
b/components/camel-milo/src/generated/java/org/apache/camel/component/milo/client/MiloClientComponentConfigurer.java
@@ -17,9 +17,9 @@ import 
org.apache.camel.support.component.PropertyConfigurerSupport;
 @SuppressWarnings("unchecked")
 public class MiloClientComponentConfigurer extends PropertyConfigurerSupport 
implements GeneratedPropertyConfigurer, PropertyConfigurerGetter {
 
-    private org.apache.camel.component.milo.client.MiloClientConfiguration 
getOrCreateConfiguration(MiloClientComponent target) {
+    private MiloClientConfiguration 
getOrCreateConfiguration(MiloClientComponent target) {
         if (target.getConfiguration() == null) {
-            target.setConfiguration(new 
org.apache.camel.component.milo.client.MiloClientConfiguration());
+            target.setConfiguration(new MiloClientConfiguration());
         }
         return target.getConfiguration();
     }
@@ -29,54 +29,54 @@ public class MiloClientComponentConfigurer extends 
PropertyConfigurerSupport imp
         MiloClientComponent target = (MiloClientComponent) obj;
         switch (ignoreCase ? name.toLowerCase() : name) {
         case "allowedsecuritypolicies":
-        case "allowedSecurityPolicies": 
getOrCreateConfiguration(target).setAllowedSecurityPolicies(property(camelContext,
 java.lang.String.class, value)); return true;
+        case "allowedSecurityPolicies": 
getOrCreateConfiguration(target).setAllowedSecurityPolicies(property(camelContext,
 String.class, value)); return true;
         case "applicationname":
-        case "applicationName": 
getOrCreateConfiguration(target).setApplicationName(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "applicationName": 
getOrCreateConfiguration(target).setApplicationName(property(camelContext, 
String.class, value)); return true;
         case "applicationuri":
-        case "applicationUri": 
getOrCreateConfiguration(target).setApplicationUri(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "applicationUri": 
getOrCreateConfiguration(target).setApplicationUri(property(camelContext, 
String.class, value)); return true;
         case "autowiredenabled":
         case "autowiredEnabled": 
target.setAutowiredEnabled(property(camelContext, boolean.class, value)); 
return true;
         case "bridgeerrorhandler":
         case "bridgeErrorHandler": 
target.setBridgeErrorHandler(property(camelContext, boolean.class, value)); 
return true;
         case "channellifetime":
-        case "channelLifetime": 
getOrCreateConfiguration(target).setChannelLifetime(property(camelContext, 
java.lang.Long.class, value)); return true;
+        case "channelLifetime": 
getOrCreateConfiguration(target).setChannelLifetime(property(camelContext, 
Long.class, value)); return true;
         case "clientid":
-        case "clientId": 
getOrCreateConfiguration(target).setClientId(property(camelContext, 
java.lang.String.class, value)); return true;
-        case "configuration": target.setConfiguration(property(camelContext, 
org.apache.camel.component.milo.client.MiloClientConfiguration.class, value)); 
return true;
+        case "clientId": 
getOrCreateConfiguration(target).setClientId(property(camelContext, 
String.class, value)); return true;
+        case "configuration": target.setConfiguration(property(camelContext, 
MiloClientConfiguration.class, value)); return true;
         case "discoveryendpointsuffix":
-        case "discoveryEndpointSuffix": 
getOrCreateConfiguration(target).setDiscoveryEndpointSuffix(property(camelContext,
 java.lang.String.class, value)); return true;
+        case "discoveryEndpointSuffix": 
getOrCreateConfiguration(target).setDiscoveryEndpointSuffix(property(camelContext,
 String.class, value)); return true;
         case "discoveryendpointuri":
-        case "discoveryEndpointUri": 
getOrCreateConfiguration(target).setDiscoveryEndpointUri(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "discoveryEndpointUri": 
getOrCreateConfiguration(target).setDiscoveryEndpointUri(property(camelContext, 
String.class, value)); return true;
         case "keyalias":
-        case "keyAlias": 
getOrCreateConfiguration(target).setKeyAlias(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "keyAlias": 
getOrCreateConfiguration(target).setKeyAlias(property(camelContext, 
String.class, value)); return true;
         case "keypassword":
-        case "keyPassword": 
getOrCreateConfiguration(target).setKeyPassword(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "keyPassword": 
getOrCreateConfiguration(target).setKeyPassword(property(camelContext, 
String.class, value)); return true;
         case "keystorepassword":
-        case "keyStorePassword": 
getOrCreateConfiguration(target).setKeyStorePassword(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "keyStorePassword": 
getOrCreateConfiguration(target).setKeyStorePassword(property(camelContext, 
String.class, value)); return true;
         case "keystoretype":
-        case "keyStoreType": 
getOrCreateConfiguration(target).setKeyStoreType(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "keyStoreType": 
getOrCreateConfiguration(target).setKeyStoreType(property(camelContext, 
String.class, value)); return true;
         case "keystoreurl":
-        case "keyStoreUrl": 
getOrCreateConfiguration(target).setKeyStoreUrl(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "keyStoreUrl": 
getOrCreateConfiguration(target).setKeyStoreUrl(property(camelContext, 
String.class, value)); return true;
         case "lazystartproducer":
         case "lazyStartProducer": 
target.setLazyStartProducer(property(camelContext, boolean.class, value)); 
return true;
         case "maxpendingpublishrequests":
-        case "maxPendingPublishRequests": 
getOrCreateConfiguration(target).setMaxPendingPublishRequests(property(camelContext,
 java.lang.Long.class, value)); return true;
+        case "maxPendingPublishRequests": 
getOrCreateConfiguration(target).setMaxPendingPublishRequests(property(camelContext,
 Long.class, value)); return true;
         case "maxresponsemessagesize":
-        case "maxResponseMessageSize": 
getOrCreateConfiguration(target).setMaxResponseMessageSize(property(camelContext,
 java.lang.Long.class, value)); return true;
+        case "maxResponseMessageSize": 
getOrCreateConfiguration(target).setMaxResponseMessageSize(property(camelContext,
 Long.class, value)); return true;
         case "miloclientconnectionmanager":
-        case "miloClientConnectionManager": 
target.setMiloClientConnectionManager(property(camelContext, 
org.apache.camel.component.milo.client.MiloClientConnectionManager.class, 
value)); return true;
+        case "miloClientConnectionManager": 
target.setMiloClientConnectionManager(property(camelContext, 
MiloClientConnectionManager.class, value)); return true;
         case "overridehost":
         case "overrideHost": 
getOrCreateConfiguration(target).setOverrideHost(property(camelContext, 
boolean.class, value)); return true;
         case "producturi":
-        case "productUri": 
getOrCreateConfiguration(target).setProductUri(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "productUri": 
getOrCreateConfiguration(target).setProductUri(property(camelContext, 
String.class, value)); return true;
         case "requesttimeout":
-        case "requestTimeout": 
getOrCreateConfiguration(target).setRequestTimeout(property(camelContext, 
java.lang.Long.class, value)); return true;
+        case "requestTimeout": 
getOrCreateConfiguration(target).setRequestTimeout(property(camelContext, 
Long.class, value)); return true;
         case "requestedpublishinginterval":
-        case "requestedPublishingInterval": 
getOrCreateConfiguration(target).setRequestedPublishingInterval(property(camelContext,
 java.lang.Double.class, value)); return true;
+        case "requestedPublishingInterval": 
getOrCreateConfiguration(target).setRequestedPublishingInterval(property(camelContext,
 Double.class, value)); return true;
         case "sessionname":
-        case "sessionName": 
getOrCreateConfiguration(target).setSessionName(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "sessionName": 
getOrCreateConfiguration(target).setSessionName(property(camelContext, 
String.class, value)); return true;
         case "sessiontimeout":
-        case "sessionTimeout": 
getOrCreateConfiguration(target).setSessionTimeout(property(camelContext, 
java.lang.Long.class, value)); return true;
+        case "sessionTimeout": 
getOrCreateConfiguration(target).setSessionTimeout(property(camelContext, 
Long.class, value)); return true;
         default: return false;
         }
     }
@@ -90,54 +90,54 @@ public class MiloClientComponentConfigurer extends 
PropertyConfigurerSupport imp
     public Class<?> getOptionType(String name, boolean ignoreCase) {
         switch (ignoreCase ? name.toLowerCase() : name) {
         case "allowedsecuritypolicies":
-        case "allowedSecurityPolicies": return java.lang.String.class;
+        case "allowedSecurityPolicies": return String.class;
         case "applicationname":
-        case "applicationName": return java.lang.String.class;
+        case "applicationName": return String.class;
         case "applicationuri":
-        case "applicationUri": return java.lang.String.class;
+        case "applicationUri": return String.class;
         case "autowiredenabled":
         case "autowiredEnabled": return boolean.class;
         case "bridgeerrorhandler":
         case "bridgeErrorHandler": return boolean.class;
         case "channellifetime":
-        case "channelLifetime": return java.lang.Long.class;
+        case "channelLifetime": return Long.class;
         case "clientid":
-        case "clientId": return java.lang.String.class;
-        case "configuration": return 
org.apache.camel.component.milo.client.MiloClientConfiguration.class;
+        case "clientId": return String.class;
+        case "configuration": return MiloClientConfiguration.class;
         case "discoveryendpointsuffix":
-        case "discoveryEndpointSuffix": return java.lang.String.class;
+        case "discoveryEndpointSuffix": return String.class;
         case "discoveryendpointuri":
-        case "discoveryEndpointUri": return java.lang.String.class;
+        case "discoveryEndpointUri": return String.class;
         case "keyalias":
-        case "keyAlias": return java.lang.String.class;
+        case "keyAlias": return String.class;
         case "keypassword":
-        case "keyPassword": return java.lang.String.class;
+        case "keyPassword": return String.class;
         case "keystorepassword":
-        case "keyStorePassword": return java.lang.String.class;
+        case "keyStorePassword": return String.class;
         case "keystoretype":
-        case "keyStoreType": return java.lang.String.class;
+        case "keyStoreType": return String.class;
         case "keystoreurl":
-        case "keyStoreUrl": return java.lang.String.class;
+        case "keyStoreUrl": return String.class;
         case "lazystartproducer":
         case "lazyStartProducer": return boolean.class;
         case "maxpendingpublishrequests":
-        case "maxPendingPublishRequests": return java.lang.Long.class;
+        case "maxPendingPublishRequests": return Long.class;
         case "maxresponsemessagesize":
-        case "maxResponseMessageSize": return java.lang.Long.class;
+        case "maxResponseMessageSize": return Long.class;
         case "miloclientconnectionmanager":
-        case "miloClientConnectionManager": return 
org.apache.camel.component.milo.client.MiloClientConnectionManager.class;
+        case "miloClientConnectionManager": return 
MiloClientConnectionManager.class;
         case "overridehost":
         case "overrideHost": return boolean.class;
         case "producturi":
-        case "productUri": return java.lang.String.class;
+        case "productUri": return String.class;
         case "requesttimeout":
-        case "requestTimeout": return java.lang.Long.class;
+        case "requestTimeout": return Long.class;
         case "requestedpublishinginterval":
-        case "requestedPublishingInterval": return java.lang.Double.class;
+        case "requestedPublishingInterval": return Double.class;
         case "sessionname":
-        case "sessionName": return java.lang.String.class;
+        case "sessionName": return String.class;
         case "sessiontimeout":
-        case "sessionTimeout": return java.lang.Long.class;
+        case "sessionTimeout": return Long.class;
         default: return null;
         }
     }
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 3c2798f3b289..f4e3ee921521 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
@@ -22,69 +22,69 @@ public class MiloClientEndpointConfigurer extends 
PropertyConfigurerSupport impl
         MiloClientEndpoint target = (MiloClientEndpoint) obj;
         switch (ignoreCase ? name.toLowerCase() : name) {
         case "allowedsecuritypolicies":
-        case "allowedSecurityPolicies": 
target.getConfiguration().setAllowedSecurityPolicies(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "allowedSecurityPolicies": 
target.getConfiguration().setAllowedSecurityPolicies(property(camelContext, 
String.class, value)); return true;
         case "applicationname":
-        case "applicationName": 
target.getConfiguration().setApplicationName(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "applicationName": 
target.getConfiguration().setApplicationName(property(camelContext, 
String.class, value)); return true;
         case "applicationuri":
-        case "applicationUri": 
target.getConfiguration().setApplicationUri(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "applicationUri": 
target.getConfiguration().setApplicationUri(property(camelContext, 
String.class, value)); return true;
         case "bridgeerrorhandler":
         case "bridgeErrorHandler": 
target.setBridgeErrorHandler(property(camelContext, boolean.class, value)); 
return true;
         case "channellifetime":
-        case "channelLifetime": 
target.getConfiguration().setChannelLifetime(property(camelContext, 
java.lang.Long.class, value)); return true;
+        case "channelLifetime": 
target.getConfiguration().setChannelLifetime(property(camelContext, Long.class, 
value)); return true;
         case "clientid":
-        case "clientId": 
target.getConfiguration().setClientId(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "clientId": 
target.getConfiguration().setClientId(property(camelContext, String.class, 
value)); return true;
         case "datachangefilterdeadbandtype":
         case "dataChangeFilterDeadbandType": 
target.getMonitorFilterConfiguration().setDataChangeFilterDeadbandType(property(camelContext,
 org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UInteger.class, 
value)); return true;
         case "datachangefilterdeadbandvalue":
-        case "dataChangeFilterDeadbandValue": 
target.getMonitorFilterConfiguration().setDataChangeFilterDeadbandValue(property(camelContext,
 java.lang.Double.class, value)); return true;
+        case "dataChangeFilterDeadbandValue": 
target.getMonitorFilterConfiguration().setDataChangeFilterDeadbandValue(property(camelContext,
 Double.class, value)); return true;
         case "datachangefiltertrigger":
         case "dataChangeFilterTrigger": 
target.getMonitorFilterConfiguration().setDataChangeFilterTrigger(property(camelContext,
 org.eclipse.milo.opcua.stack.core.types.enumerated.DataChangeTrigger.class, 
value)); return true;
         case "defaultawaitwrites":
         case "defaultAwaitWrites": 
target.setDefaultAwaitWrites(property(camelContext, boolean.class, value)); 
return true;
         case "discoveryendpointsuffix":
-        case "discoveryEndpointSuffix": 
target.getConfiguration().setDiscoveryEndpointSuffix(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "discoveryEndpointSuffix": 
target.getConfiguration().setDiscoveryEndpointSuffix(property(camelContext, 
String.class, value)); return true;
         case "discoveryendpointuri":
-        case "discoveryEndpointUri": 
target.getConfiguration().setDiscoveryEndpointUri(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "discoveryEndpointUri": 
target.getConfiguration().setDiscoveryEndpointUri(property(camelContext, 
String.class, value)); return true;
         case "exceptionhandler":
         case "exceptionHandler": 
target.setExceptionHandler(property(camelContext, 
org.apache.camel.spi.ExceptionHandler.class, value)); return true;
         case "exchangepattern":
         case "exchangePattern": 
target.setExchangePattern(property(camelContext, 
org.apache.camel.ExchangePattern.class, value)); return true;
         case "keyalias":
-        case "keyAlias": 
target.getConfiguration().setKeyAlias(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "keyAlias": 
target.getConfiguration().setKeyAlias(property(camelContext, String.class, 
value)); return true;
         case "keypassword":
-        case "keyPassword": 
target.getConfiguration().setKeyPassword(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "keyPassword": 
target.getConfiguration().setKeyPassword(property(camelContext, String.class, 
value)); return true;
         case "keystorepassword":
-        case "keyStorePassword": 
target.getConfiguration().setKeyStorePassword(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "keyStorePassword": 
target.getConfiguration().setKeyStorePassword(property(camelContext, 
String.class, value)); return true;
         case "keystoretype":
-        case "keyStoreType": 
target.getConfiguration().setKeyStoreType(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "keyStoreType": 
target.getConfiguration().setKeyStoreType(property(camelContext, String.class, 
value)); return true;
         case "keystoreurl":
-        case "keyStoreUrl": 
target.getConfiguration().setKeyStoreUrl(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "keyStoreUrl": 
target.getConfiguration().setKeyStoreUrl(property(camelContext, String.class, 
value)); return true;
         case "lazystartproducer":
         case "lazyStartProducer": 
target.setLazyStartProducer(property(camelContext, boolean.class, value)); 
return true;
         case "maxpendingpublishrequests":
-        case "maxPendingPublishRequests": 
target.getConfiguration().setMaxPendingPublishRequests(property(camelContext, 
java.lang.Long.class, value)); return true;
+        case "maxPendingPublishRequests": 
target.getConfiguration().setMaxPendingPublishRequests(property(camelContext, 
Long.class, value)); return true;
         case "maxresponsemessagesize":
-        case "maxResponseMessageSize": 
target.getConfiguration().setMaxResponseMessageSize(property(camelContext, 
java.lang.Long.class, value)); return true;
-        case "method": target.setMethod(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "maxResponseMessageSize": 
target.getConfiguration().setMaxResponseMessageSize(property(camelContext, 
Long.class, value)); return true;
+        case "method": target.setMethod(property(camelContext, String.class, 
value)); return true;
         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 "monitorFilterType": 
target.getMonitorFilterConfiguration().setMonitorFilterType(property(camelContext,
 MonitorFilterType.class, value)); return true;
+        case "node": target.setNode(property(camelContext, 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":
-        case "productUri": 
target.getConfiguration().setProductUri(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "productUri": 
target.getConfiguration().setProductUri(property(camelContext, String.class, 
value)); return true;
         case "requesttimeout":
-        case "requestTimeout": 
target.getConfiguration().setRequestTimeout(property(camelContext, 
java.lang.Long.class, value)); return true;
+        case "requestTimeout": 
target.getConfiguration().setRequestTimeout(property(camelContext, Long.class, 
value)); return true;
         case "requestedpublishinginterval":
-        case "requestedPublishingInterval": 
target.getConfiguration().setRequestedPublishingInterval(property(camelContext, 
java.lang.Double.class, value)); return true;
+        case "requestedPublishingInterval": 
target.getConfiguration().setRequestedPublishingInterval(property(camelContext, 
Double.class, value)); return true;
         case "samplinginterval":
-        case "samplingInterval": 
target.setSamplingInterval(property(camelContext, java.lang.Double.class, 
value)); return true;
+        case "samplingInterval": 
target.setSamplingInterval(property(camelContext, Double.class, value)); return 
true;
         case "sessionname":
-        case "sessionName": 
target.getConfiguration().setSessionName(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "sessionName": 
target.getConfiguration().setSessionName(property(camelContext, String.class, 
value)); return true;
         case "sessiontimeout":
-        case "sessionTimeout": 
target.getConfiguration().setSessionTimeout(property(camelContext, 
java.lang.Long.class, value)); return true;
+        case "sessionTimeout": 
target.getConfiguration().setSessionTimeout(property(camelContext, Long.class, 
value)); return true;
         default: return false;
         }
     }
@@ -93,69 +93,69 @@ public class MiloClientEndpointConfigurer extends 
PropertyConfigurerSupport impl
     public Class<?> getOptionType(String name, boolean ignoreCase) {
         switch (ignoreCase ? name.toLowerCase() : name) {
         case "allowedsecuritypolicies":
-        case "allowedSecurityPolicies": return java.lang.String.class;
+        case "allowedSecurityPolicies": return String.class;
         case "applicationname":
-        case "applicationName": return java.lang.String.class;
+        case "applicationName": return String.class;
         case "applicationuri":
-        case "applicationUri": return java.lang.String.class;
+        case "applicationUri": return String.class;
         case "bridgeerrorhandler":
         case "bridgeErrorHandler": return boolean.class;
         case "channellifetime":
-        case "channelLifetime": return java.lang.Long.class;
+        case "channelLifetime": return Long.class;
         case "clientid":
-        case "clientId": return java.lang.String.class;
+        case "clientId": return String.class;
         case "datachangefilterdeadbandtype":
         case "dataChangeFilterDeadbandType": return 
org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UInteger.class;
         case "datachangefilterdeadbandvalue":
-        case "dataChangeFilterDeadbandValue": return java.lang.Double.class;
+        case "dataChangeFilterDeadbandValue": return Double.class;
         case "datachangefiltertrigger":
         case "dataChangeFilterTrigger": return 
org.eclipse.milo.opcua.stack.core.types.enumerated.DataChangeTrigger.class;
         case "defaultawaitwrites":
         case "defaultAwaitWrites": return boolean.class;
         case "discoveryendpointsuffix":
-        case "discoveryEndpointSuffix": return java.lang.String.class;
+        case "discoveryEndpointSuffix": return String.class;
         case "discoveryendpointuri":
-        case "discoveryEndpointUri": return java.lang.String.class;
+        case "discoveryEndpointUri": return String.class;
         case "exceptionhandler":
         case "exceptionHandler": return 
org.apache.camel.spi.ExceptionHandler.class;
         case "exchangepattern":
         case "exchangePattern": return org.apache.camel.ExchangePattern.class;
         case "keyalias":
-        case "keyAlias": return java.lang.String.class;
+        case "keyAlias": return String.class;
         case "keypassword":
-        case "keyPassword": return java.lang.String.class;
+        case "keyPassword": return String.class;
         case "keystorepassword":
-        case "keyStorePassword": return java.lang.String.class;
+        case "keyStorePassword": return String.class;
         case "keystoretype":
-        case "keyStoreType": return java.lang.String.class;
+        case "keyStoreType": return String.class;
         case "keystoreurl":
-        case "keyStoreUrl": return java.lang.String.class;
+        case "keyStoreUrl": return String.class;
         case "lazystartproducer":
         case "lazyStartProducer": return boolean.class;
         case "maxpendingpublishrequests":
-        case "maxPendingPublishRequests": return java.lang.Long.class;
+        case "maxPendingPublishRequests": return Long.class;
         case "maxresponsemessagesize":
-        case "maxResponseMessageSize": return java.lang.Long.class;
-        case "method": return java.lang.String.class;
+        case "maxResponseMessageSize": return Long.class;
+        case "method": return String.class;
         case "monitorfiltertype":
-        case "monitorFilterType": return 
org.apache.camel.component.milo.client.MonitorFilterType.class;
-        case "node": return java.lang.String.class;
+        case "monitorFilterType": return MonitorFilterType.class;
+        case "node": return String.class;
         case "omitnullvalues":
         case "omitNullValues": return boolean.class;
         case "overridehost":
         case "overrideHost": return boolean.class;
         case "producturi":
-        case "productUri": return java.lang.String.class;
+        case "productUri": return String.class;
         case "requesttimeout":
-        case "requestTimeout": return java.lang.Long.class;
+        case "requestTimeout": return Long.class;
         case "requestedpublishinginterval":
-        case "requestedPublishingInterval": return java.lang.Double.class;
+        case "requestedPublishingInterval": return Double.class;
         case "samplinginterval":
-        case "samplingInterval": return java.lang.Double.class;
+        case "samplingInterval": return Double.class;
         case "sessionname":
-        case "sessionName": return java.lang.String.class;
+        case "sessionName": return String.class;
         case "sessiontimeout":
-        case "sessionTimeout": return java.lang.Long.class;
+        case "sessionTimeout": return Long.class;
         default: return null;
         }
     }
diff --git 
a/components/camel-milo/src/generated/java/org/apache/camel/component/milo/converter/ValueConverterLoader.java
 
b/components/camel-milo/src/generated/java/org/apache/camel/component/milo/converter/ValueConverterLoader.java
index 2baa109f2ed2..7a81c0462136 100644
--- 
a/components/camel-milo/src/generated/java/org/apache/camel/component/milo/converter/ValueConverterLoader.java
+++ 
b/components/camel-milo/src/generated/java/org/apache/camel/component/milo/converter/ValueConverterLoader.java
@@ -42,9 +42,9 @@ public final class ValueConverterLoader implements 
TypeConverterLoader, CamelCon
 
     private void registerConverters(TypeConverterRegistry registry) {
         addTypeConverter(registry, 
org.eclipse.milo.opcua.stack.core.types.builtin.DataValue.class, 
org.eclipse.milo.opcua.stack.core.types.builtin.Variant.class, false,
-            (type, exchange, value) -> 
org.apache.camel.component.milo.converter.ValueConverter.toDataValue((org.eclipse.milo.opcua.stack.core.types.builtin.Variant)
 value));
+            (type, exchange, value) -> 
ValueConverter.toDataValue((org.eclipse.milo.opcua.stack.core.types.builtin.Variant)
 value));
         addTypeConverter(registry, 
org.eclipse.milo.opcua.stack.core.types.builtin.Variant.class, 
org.eclipse.milo.opcua.stack.core.types.builtin.DataValue.class, false,
-            (type, exchange, value) -> 
org.apache.camel.component.milo.converter.ValueConverter.toVariant((org.eclipse.milo.opcua.stack.core.types.builtin.DataValue)
 value));
+            (type, exchange, value) -> 
ValueConverter.toVariant((org.eclipse.milo.opcua.stack.core.types.builtin.DataValue)
 value));
     }
 
     private static void addTypeConverter(TypeConverterRegistry registry, 
Class<?> toType, Class<?> fromType, boolean allowNull, 
SimpleTypeConverter.ConversionMethod method) { 
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 5b4f44f60179..1c7e422e6e0b 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
@@ -22,13 +22,13 @@ public class MiloServerComponentConfigurer extends 
PropertyConfigurerSupport imp
         MiloServerComponent target = (MiloServerComponent) obj;
         switch (ignoreCase ? name.toLowerCase() : name) {
         case "applicationname":
-        case "applicationName": 
target.setApplicationName(property(camelContext, java.lang.String.class, 
value)); return true;
+        case "applicationName": 
target.setApplicationName(property(camelContext, String.class, value)); return 
true;
         case "applicationuri":
-        case "applicationUri": target.setApplicationUri(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "applicationUri": target.setApplicationUri(property(camelContext, 
String.class, value)); return true;
         case "autowiredenabled":
         case "autowiredEnabled": 
target.setAutowiredEnabled(property(camelContext, boolean.class, value)); 
return true;
         case "bindaddresses":
-        case "bindAddresses": target.setBindAddresses(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "bindAddresses": target.setBindAddresses(property(camelContext, 
String.class, value)); return true;
         case "bridgeerrorhandler":
         case "bridgeErrorHandler": 
target.setBridgeErrorHandler(property(camelContext, boolean.class, value)); 
return true;
         case "buildinfo":
@@ -39,23 +39,23 @@ public class MiloServerComponentConfigurer extends 
PropertyConfigurerSupport imp
         case "certificatevalidator":
         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 "defaultCertificateValidator": 
target.setDefaultCertificateValidator(property(camelContext, String.class, 
value)); return true;
         case "enableanonymousauthentication":
         case "enableAnonymousAuthentication": 
target.setEnableAnonymousAuthentication(property(camelContext, boolean.class, 
value)); return true;
         case "lazystartproducer":
         case "lazyStartProducer": 
target.setLazyStartProducer(property(camelContext, boolean.class, value)); 
return true;
         case "namespaceuri":
-        case "namespaceUri": target.setNamespaceUri(property(camelContext, 
java.lang.String.class, value)); return true;
-        case "path": target.setPath(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "namespaceUri": target.setNamespaceUri(property(camelContext, 
String.class, value)); return true;
+        case "path": target.setPath(property(camelContext, String.class, 
value)); return true;
         case "port": target.setPort(property(camelContext, int.class, value)); 
return true;
         case "producturi":
-        case "productUri": target.setProductUri(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "productUri": target.setProductUri(property(camelContext, 
String.class, value)); return true;
         case "securitypolicies":
         case "securityPolicies": 
target.setSecurityPolicies(property(camelContext, java.util.Set.class, value)); 
return true;
         case "securitypoliciesbyid":
-        case "securityPoliciesById": 
target.setSecurityPoliciesById(property(camelContext, java.lang.String.class, 
value)); return true;
+        case "securityPoliciesById": 
target.setSecurityPoliciesById(property(camelContext, String.class, value)); 
return true;
         case "userauthenticationcredentials":
-        case "userAuthenticationCredentials": 
target.setUserAuthenticationCredentials(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "userAuthenticationCredentials": 
target.setUserAuthenticationCredentials(property(camelContext, String.class, 
value)); return true;
         case "usernamesecuritypolicyuri":
         case "usernameSecurityPolicyUri": 
target.setUsernameSecurityPolicyUri(property(camelContext, 
org.eclipse.milo.opcua.stack.core.security.SecurityPolicy.class, value)); 
return true;
         default: return false;
@@ -66,13 +66,13 @@ public class MiloServerComponentConfigurer extends 
PropertyConfigurerSupport imp
     public Class<?> getOptionType(String name, boolean ignoreCase) {
         switch (ignoreCase ? name.toLowerCase() : name) {
         case "applicationname":
-        case "applicationName": return java.lang.String.class;
+        case "applicationName": return String.class;
         case "applicationuri":
-        case "applicationUri": return java.lang.String.class;
+        case "applicationUri": return String.class;
         case "autowiredenabled":
         case "autowiredEnabled": return boolean.class;
         case "bindaddresses":
-        case "bindAddresses": return java.lang.String.class;
+        case "bindAddresses": return String.class;
         case "bridgeerrorhandler":
         case "bridgeErrorHandler": return boolean.class;
         case "buildinfo":
@@ -83,23 +83,23 @@ public class MiloServerComponentConfigurer extends 
PropertyConfigurerSupport imp
         case "certificatevalidator":
         case "certificateValidator": return 
org.eclipse.milo.opcua.stack.server.security.ServerCertificateValidator.class;
         case "defaultcertificatevalidator":
-        case "defaultCertificateValidator": return java.lang.String.class;
+        case "defaultCertificateValidator": return String.class;
         case "enableanonymousauthentication":
         case "enableAnonymousAuthentication": return boolean.class;
         case "lazystartproducer":
         case "lazyStartProducer": return boolean.class;
         case "namespaceuri":
-        case "namespaceUri": return java.lang.String.class;
-        case "path": return java.lang.String.class;
+        case "namespaceUri": return String.class;
+        case "path": return String.class;
         case "port": return int.class;
         case "producturi":
-        case "productUri": return java.lang.String.class;
+        case "productUri": return String.class;
         case "securitypolicies":
         case "securityPolicies": return java.util.Set.class;
         case "securitypoliciesbyid":
-        case "securityPoliciesById": return java.lang.String.class;
+        case "securityPoliciesById": return String.class;
         case "userauthenticationcredentials":
-        case "userAuthenticationCredentials": return java.lang.String.class;
+        case "userAuthenticationCredentials": return String.class;
         case "usernamesecuritypolicyuri":
         case "usernameSecurityPolicyUri": return 
org.eclipse.milo.opcua.stack.core.security.SecurityPolicy.class;
         default: return null;
diff --git 
a/components/camel-milo/src/generated/resources/META-INF/services/org/apache/camel/component.properties
 
b/components/camel-milo/src/generated/resources/META-INF/services/org/apache/camel/component.properties
index aadfe339beeb..dacf84b93547 100644
--- 
a/components/camel-milo/src/generated/resources/META-INF/services/org/apache/camel/component.properties
+++ 
b/components/camel-milo/src/generated/resources/META-INF/services/org/apache/camel/component.properties
@@ -2,6 +2,6 @@
 components=milo-browse milo-client milo-server
 groupId=org.apache.camel
 artifactId=camel-milo
-version=4.0.0-SNAPSHOT
+version=3.22.4-SNAPSHOT
 projectName=Camel :: Milo
 projectDescription=Camel OPC UA support
diff --git 
a/components/camel-milo/src/generated/resources/org/apache/camel/component/milo/browse/milo-browse.json
 
b/components/camel-milo/src/generated/resources/org/apache/camel/component/milo/browse/milo-browse.json
index 6a3d643ee389..a59b6db8bec5 100644
--- 
a/components/camel-milo/src/generated/resources/org/apache/camel/component/milo/browse/milo-browse.json
+++ 
b/components/camel-milo/src/generated/resources/org/apache/camel/component/milo/browse/milo-browse.json
@@ -11,7 +11,7 @@
     "supportLevel": "Stable",
     "groupId": "org.apache.camel",
     "artifactId": "camel-milo",
-    "version": "4.0.0-SNAPSHOT",
+    "version": "3.22.4-SNAPSHOT",
     "scheme": "milo-browse",
     "extendsScheme": "",
     "syntax": "milo-browse:endpointUri",
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 bc226e5d244d..c6273f60ffb5 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
@@ -11,7 +11,7 @@
     "supportLevel": "Stable",
     "groupId": "org.apache.camel",
     "artifactId": "camel-milo",
-    "version": "4.0.0-SNAPSHOT",
+    "version": "3.22.4-SNAPSHOT",
     "scheme": "milo-client",
     "extendsScheme": "",
     "syntax": "milo-client:endpointUri",
@@ -57,7 +57,7 @@
     "clientId": { "kind": "parameter", "displayName": "Client Id", "group": 
"common", "label": "", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"configurationClass": 
"org.apache.camel.component.milo.client.MiloClientConfiguration", 
"configurationField": "configuration", "description": "A virtual client id to 
force the creation of a new connection instance" },
     "dataChangeFilterDeadbandType": { "kind": "parameter", "displayName": 
"Data Change Filter Deadband Type", "group": "common", "label": "", "required": 
false, "type": "object", "javaType": 
"org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UInteger", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": "0", 
"configurationClass": 
"org.apache.camel.component.milo.client.MonitorFilterConfiguration", 
"configurationField": "monitorFilterConfiguration", "descripti [...]
     "dataChangeFilterDeadbandValue": { "kind": "parameter", "displayName": 
"Data Change Filter Deadband Value", "group": "common", "label": "", 
"required": false, "type": "number", "javaType": "java.lang.Double", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
"0.0", "configurationClass": 
"org.apache.camel.component.milo.client.MonitorFilterConfiguration", 
"configurationField": "monitorFilterConfiguration", "description": "Deadband 
value for MonitorFilterType Da [...]
-    "dataChangeFilterTrigger": { "kind": "parameter", "displayName": "Data 
Change Filter Trigger", "group": "common", "label": "", "required": false, 
"type": "object", "javaType": 
"org.eclipse.milo.opcua.stack.core.types.enumerated.DataChangeTrigger", "enum": 
[ "Status", "StatusValue", "StatusValueTimestamp" ], "deprecated": false, 
"autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.milo.client.MonitorFilterConfiguration", 
"configurationField": "monitor [...]
+    "dataChangeFilterTrigger": { "kind": "parameter", "displayName": "Data 
Change Filter Trigger", "group": "common", "label": "", "required": false, 
"type": "object", "javaType": 
"org.eclipse.milo.opcua.stack.core.types.enumerated.DataChangeTrigger", "enum": 
[ "Status", "StatusValue", "StatusValueTimestamp" ], "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": "StatusValueTimestamp", 
"configurationClass": 
"org.apache.camel.component.milo.client.MonitorFilterConfig [...]
     "defaultAwaitWrites": { "kind": "parameter", "displayName": "Default Await 
Writes", "group": "common", "label": "", "required": false, "type": "boolean", 
"javaType": "boolean", "deprecated": false, "autowired": false, "secret": 
false, "defaultValue": false, "description": "Default await setting for writes" 
},
     "discoveryEndpointSuffix": { "kind": "parameter", "displayName": 
"Discovery Endpoint Suffix", "group": "common", "label": "", "required": false, 
"type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.milo.client.MiloClientConfiguration", 
"configurationField": "configuration", "description": "A suffix for endpoint 
URI when discovering" },
     "discoveryEndpointUri": { "kind": "parameter", "displayName": "Discovery 
Endpoint Uri", "group": "common", "label": "", "required": false, "type": 
"string", "javaType": "java.lang.String", "deprecated": false, "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.milo.client.MiloClientConfiguration", 
"configurationField": "configuration", "description": "An alternative discovery 
URI" },
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 524e6499462c..e68f5611f6ca 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
@@ -11,7 +11,7 @@
     "supportLevel": "Stable",
     "groupId": "org.apache.camel",
     "artifactId": "camel-milo",
-    "version": "4.0.0-SNAPSHOT",
+    "version": "3.22.4-SNAPSHOT",
     "scheme": "milo-server",
     "extendsScheme": "",
     "syntax": "milo-server:itemId",
diff --git 
a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConfiguration.java
 
b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConfiguration.java
index a9d0a713e9d5..41acde36a5af 100644
--- 
a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConfiguration.java
+++ 
b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MiloClientConfiguration.java
@@ -23,18 +23,17 @@ import java.util.Set;
 import java.util.function.Consumer;
 
 import jakarta.xml.bind.annotation.XmlTransient;
-
-import com.google.common.base.Supplier;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.component.milo.KeyStoreLoader;
 import org.apache.camel.component.milo.KeyStoreLoader.Result;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.spi.UriParams;
-import org.eclipse.milo.opcua.sdk.client.api.config.OpcUaClientConfigBuilder;
+import org.eclipse.milo.opcua.sdk.client.OpcUaClientConfigBuilder;
 import org.eclipse.milo.opcua.stack.core.security.SecurityPolicy;
 import org.eclipse.milo.opcua.stack.core.types.builtin.LocalizedText;
 import org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UInteger;
 import org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.Unsigned;
+import org.eclipse.milo.shaded.com.google.common.base.Supplier;
 
 @UriParams
 public class MiloClientConfiguration implements Cloneable {
@@ -431,9 +430,10 @@ public class MiloClientConfiguration implements Cloneable {
         if (configuration.getRequestTimeout() != null) {
             
builder.setRequestTimeout(Unsigned.uint(configuration.getRequestTimeout()));
         }
-        if (configuration.getChannelLifetime() != null) {
-            
builder.setChannelLifetime(Unsigned.uint(configuration.getChannelLifetime()));
-        }
+        // FIXME - validate moving of ChannelLifetime to SubscriptionManager
+//        if (configuration.getChannelLifetime() != null) {
+//            
builder.setChannelLifetime(Unsigned.uint(configuration.getChannelLifetime()));
+//        }
 
         whenHasText(configuration::getSessionName, value -> 
builder.setSessionName(() -> value));
         if (configuration.getSessionTimeout() != null) {
diff --git 
a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MonitorFilterConfiguration.java
 
b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MonitorFilterConfiguration.java
index 694b49328aae..66feb1d33dbe 100644
--- 
a/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MonitorFilterConfiguration.java
+++ 
b/components/camel-milo/src/main/java/org/apache/camel/component/milo/client/MonitorFilterConfiguration.java
@@ -37,8 +37,8 @@ public class MonitorFilterConfiguration implements Cloneable {
     @UriParam(defaultValue = "0.0", description = "Deadband value for 
MonitorFilterType DataChangeFilter.")
     private Double dataChangeFilterDeadbandValue = 0.0;
 
-    @UriParam(description = "Daata change trigger for data change monitor 
filter type.")
-    private DataChangeTrigger dataChangeFilterTrigger = 
DataChangeTrigger.StatusValue;
+    @UriParam(defaultValue = "StatusValueTimestamp", description = "Data 
change trigger for data change monitor filter type.")
+    private DataChangeTrigger dataChangeFilterTrigger = 
DataChangeTrigger.StatusValueTimestamp;
 
     public MonitorFilterType getMonitorFilterType() {
         return monitorFilterType;
@@ -80,7 +80,8 @@ public class MonitorFilterConfiguration implements Cloneable {
         switch (monitorFilterType) {
             default:
                 return new DataChangeFilter(
-                        DataChangeTrigger.StatusValueTimestamp, 
this.getDataChangeFilterDeadbandType(),
+                        this.getDataChangeFilterTrigger(),
+                        this.getDataChangeFilterDeadbandType(),
                         this.getDataChangeFilterDeadbandValue());
         }
     }
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 98be64231209..23f8a072a956 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
@@ -39,28 +39,25 @@ import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
-import com.google.common.base.Strings;
-import com.google.common.collect.Lists;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.component.milo.client.MiloClientConfiguration;
 import org.apache.camel.component.milo.client.MonitorFilterConfiguration;
+import org.eclipse.milo.opcua.sdk.client.DiscoveryClient;
 import org.eclipse.milo.opcua.sdk.client.OpcUaClient;
-import org.eclipse.milo.opcua.sdk.client.api.config.OpcUaClientConfigBuilder;
-import org.eclipse.milo.opcua.sdk.client.api.identity.AnonymousProvider;
-import org.eclipse.milo.opcua.sdk.client.api.identity.CompositeProvider;
-import org.eclipse.milo.opcua.sdk.client.api.identity.IdentityProvider;
-import org.eclipse.milo.opcua.sdk.client.api.identity.UsernameProvider;
-import org.eclipse.milo.opcua.sdk.client.api.subscriptions.UaMonitoredItem;
-import org.eclipse.milo.opcua.sdk.client.api.subscriptions.UaSubscription;
-import 
org.eclipse.milo.opcua.sdk.client.api.subscriptions.UaSubscriptionManager.SubscriptionListener;
-import org.eclipse.milo.opcua.stack.client.DiscoveryClient;
+import org.eclipse.milo.opcua.sdk.client.OpcUaClientConfigBuilder;
+import org.eclipse.milo.opcua.sdk.client.identity.AnonymousProvider;
+import org.eclipse.milo.opcua.sdk.client.identity.CompositeProvider;
+import org.eclipse.milo.opcua.sdk.client.identity.IdentityProvider;
+import org.eclipse.milo.opcua.sdk.client.identity.UsernameProvider;
+import 
org.eclipse.milo.opcua.sdk.client.subscriptions.MonitoredItemServiceOperationResult;
+import org.eclipse.milo.opcua.sdk.client.subscriptions.OpcUaMonitoredItem;
+import org.eclipse.milo.opcua.sdk.client.subscriptions.OpcUaSubscription;
 import org.eclipse.milo.opcua.stack.core.AttributeId;
 import org.eclipse.milo.opcua.stack.core.Identifiers;
 import org.eclipse.milo.opcua.stack.core.StatusCodes;
 import org.eclipse.milo.opcua.stack.core.UaException;
 import org.eclipse.milo.opcua.stack.core.types.builtin.ByteString;
 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.ExpandedNodeId;
 import org.eclipse.milo.opcua.stack.core.types.builtin.ExtensionObject;
 import org.eclipse.milo.opcua.stack.core.types.builtin.NodeId;
@@ -84,6 +81,8 @@ import 
org.eclipse.milo.opcua.stack.core.types.structured.MonitoringFilter;
 import org.eclipse.milo.opcua.stack.core.types.structured.MonitoringParameters;
 import org.eclipse.milo.opcua.stack.core.types.structured.ReadValueId;
 import org.eclipse.milo.opcua.stack.core.types.structured.ReferenceDescription;
+import org.eclipse.milo.shaded.com.google.common.base.Strings;
+import org.eclipse.milo.shaded.com.google.common.collect.Lists;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -98,31 +97,21 @@ public class SubscriptionManager {
 
     private final AtomicLong clientHandleCounter = new AtomicLong();
 
-    private final class SubscriptionListenerImpl implements 
SubscriptionListener {
-        @Override
-        public void onSubscriptionTransferFailed(final UaSubscription 
subscription, final StatusCode statusCode) {
-            LOG.info("Transfer failed {} : {}", 
subscription.getSubscriptionId(), statusCode);
-
-            // we simply tear it down and build it up again
-            handleConnectionFailure(new RuntimeCamelException("Subscription 
failed to reconnect"));
-        }
+    private final class SubscriptionListenerImpl implements 
OpcUaSubscription.SubscriptionListener {
 
         @Override
-        public void onStatusChanged(final UaSubscription subscription, final 
StatusCode status) {
+        public void onStatusChanged(final OpcUaSubscription subscription, 
final StatusCode status) {
             LOG.info("Subscription status changed {} : {}", 
subscription.getSubscriptionId(), status);
         }
 
         @Override
-        public void onPublishFailure(final UaException exception) {
-        }
+        public void onTransferFailed(final OpcUaSubscription subscription, 
final StatusCode statusCode) {
+            LOG.info("Transfer failed {} : {}", 
subscription.getSubscriptionId(), statusCode);
 
-        @Override
-        public void onNotificationDataLost(final UaSubscription subscription) {
+            // we simply tear it down and build it up again
+            handleConnectionFailure(new RuntimeCamelException("Subscription 
failed to reconnect"));
         }
 
-        @Override
-        public void onKeepAlive(final UaSubscription subscription, final 
DateTime publishTime) {
-        }
     }
 
     public interface Worker<T> {
@@ -162,21 +151,21 @@ public class SubscriptionManager {
                 return null;
             }
             final MonitoringFilter monitorFilter = 
this.monitorFilterConfiguration.createMonitoringFilter();
-            return 
ExtensionObject.encode(client.getStaticSerializationContext(), monitorFilter);
+            return ExtensionObject.encode(client.getStaticEncodingContext(), 
monitorFilter);
         }
     }
 
     private class Connected {
         private OpcUaClient client;
-        private final UaSubscription manager;
+        private final OpcUaSubscription manager;
 
         private final Map<UInteger, Subscription> badSubscriptions = new 
HashMap<>();
 
-        private final Map<UInteger, UaMonitoredItem> goodSubscriptions = new 
HashMap<>();
+        private final Map<UInteger, OpcUaMonitoredItem> goodSubscriptions = 
new HashMap<>();
 
         private final Map<String, UShort> namespaceCache = new 
ConcurrentHashMap<>();
 
-        Connected(final OpcUaClient client, final UaSubscription manager) {
+        Connected(final OpcUaClient client, final OpcUaSubscription manager) {
             this.client = client;
             this.manager = manager;
         }
@@ -189,7 +178,8 @@ public class SubscriptionManager {
 
             // convert to requests
 
-            final List<MonitoredItemCreateRequest> items = new 
ArrayList<>(subscriptions.size());
+//            final List<MonitoredItemCreateRequest> items = new 
ArrayList<>(subscriptions.size());
+            final List<OpcUaMonitoredItem> items = new 
ArrayList<>(subscriptions.size());
 
             for (final Map.Entry<UInteger, Subscription> entry : 
subscriptions.entrySet()) {
                 final Subscription s = entry.getValue();
@@ -204,14 +194,33 @@ public class SubscriptionManager {
 
                     final MonitoringParameters parameters = new 
MonitoringParameters(
                             entry.getKey(), samplingInterval, 
s.createMonitoringFilter(client), null, true);
-                    items.add(new MonitoredItemCreateRequest(itemId, 
MonitoringMode.Reporting, parameters));
+//                    items.add(new MonitoredItemCreateRequest(itemId, 
MonitoringMode.Reporting, parameters));
+                    items.add(new OpcUaMonitoredItem(itemId, 
MonitoringMode.Reporting));
                 }
             }
 
             if (!items.isEmpty()) {
 
                 // create monitors
+                for(OpcUaMonitoredItem item : items) {
+                    this.manager.addMonitoredItem(item);
+                }
+                List<MonitoredItemServiceOperationResult> resultList = 
this.manager.createMonitoredItems();
+                for(MonitoredItemServiceOperationResult result: resultList) {
+                    StatusCode statusCode = result.operationResult().get();
+                    UInteger clientHandle = 
result.monitoredItem().getClientHandle().get();
+                    final Subscription s = subscriptions.get(clientHandle);
+                    if(statusCode.isBad()) {
+                        handleSubscriptionError(statusCode, clientHandle, s);
+                    } else {
+                        this.goodSubscriptions.put(clientHandle, 
result.monitoredItem());
+//                        item.setValueConsumer(s.getValueConsumer());
+                    }
+                }
+
+
 
+                /*
                 this.manager.createMonitoredItems(TimestampsToReturn.Both, 
items, (item, idx) -> {
 
                     // set value listener
@@ -226,6 +235,7 @@ public class SubscriptionManager {
                     }
 
                 }).get();
+                */
             }
 
             if (!this.badSubscriptions.isEmpty()) {
@@ -254,9 +264,13 @@ public class SubscriptionManager {
         }
 
         public void deactivate(final UInteger clientHandle) throws Exception {
-            final UaMonitoredItem item = 
this.goodSubscriptions.remove(clientHandle);
+            final OpcUaMonitoredItem item = 
this.goodSubscriptions.remove(clientHandle);
             if (item != null) {
-                
this.manager.deleteMonitoredItems(Collections.singletonList(item)).get();
+                // TODO is this migrated correctly?
+                this.manager.removeMonitoredItem(item);
+//                this.manager.synchronizeMonitoredItems();
+                this.manager.deleteMonitoredItems();
+//                
this.manager.deleteMonitoredItems(Collections.singletonList(item)).get();
             } else {
                 this.badSubscriptions.remove(clientHandle);
             }
@@ -282,9 +296,11 @@ public class SubscriptionManager {
              */
 
             LOG.debug("Looking up namespace on server: {}", namespaceUri);
-
-            final CompletableFuture<DataValue> future
-                    = this.client.readValue(0, TimestampsToReturn.Neither, 
Identifiers.Server_NamespaceArray);
+//
+//            final CompletableFuture<DataValue> future
+//                    = this.client.readValue(0, TimestampsToReturn.Neither, 
Identifiers.Server_NamespaceArray);
+            CompletableFuture<DataValue> future = 
this.client.readValuesAsync(0, TimestampsToReturn.Neither, 
Collections.singletonList(Identifiers.Server_NamespaceArray))
+                    .thenApply(r -> r.get(0));
 
             return future.thenApply(value -> {
                 final Object rawValue = value.getValue().getValue();
@@ -305,8 +321,13 @@ public class SubscriptionManager {
 
         public void dispose() {
             if (this.client != null) {
-                this.client.disconnect();
-                this.client = null;
+                try {
+                    this.client.disconnect();
+                    this.client = null;
+                } catch (final UaException e) {
+                    LOG.warn("Failed to disconnect client", e);
+                }
+
             }
         }
 
@@ -327,11 +348,9 @@ public class SubscriptionManager {
         }
 
         public CompletableFuture<StatusCode> write(final ExpandedNodeId 
nodeId, final DataValue value) {
-
+            /*
             return lookupNamespace(nodeId).thenCompose(node -> {
-
                 LOG.debug("Node - expanded: {}, full: {}", nodeId, node);
-
                 return this.client.writeValue(node, 
value).whenComplete((status, error) -> {
                     if (status != null) {
                         LOG.debug("Write to node={} = {} -> {}", node, value, 
status);
@@ -339,7 +358,22 @@ public class SubscriptionManager {
                         LOG.debug("Failed to write", error);
                     }
                 });
+            });
+            */
 
+            return lookupNamespace(nodeId).thenCompose(node -> {
+
+                LOG.debug("Node - expanded: {}, full: {}", nodeId, node);
+
+                return this.client.writeValuesAsync(List.of(node), 
List.of(value))
+                        .thenApply(r -> r.get(0))
+                        .whenComplete((status, error) -> {
+                            if (status != null) {
+                                LOG.debug("Write to node={} = {} -> {}", node, 
value, status);
+                            } else {
+                                LOG.debug("Failed to write", error);
+                            }
+                        });
             });
         }
 
@@ -356,6 +390,7 @@ public class SubscriptionManager {
 
                     final CallMethodRequest cmr = new CallMethodRequest(node, 
method, inputArguments);
 
+                    /*
                     return this.client.call(cmr).whenComplete((status, error) 
-> {
                         if (status != null) {
                             LOG.debug("Call to node={}, method={} = {}-> {}", 
nodeId, methodId, inputArguments, status);
@@ -363,6 +398,16 @@ public class SubscriptionManager {
                             LOG.debug("Failed to call", error);
                         }
                     });
+                    */
+                    return this.client.callAsync(List.of(cmr))
+                            .thenApply(r -> r.getResults()[0])
+                            .whenComplete((status, error) -> {
+                                if (status != null) {
+                                    LOG.debug("Call to node={}, method={} = 
{}-> {}", nodeId, methodId, inputArguments, status);
+                                } else {
+                                    LOG.debug("Failed to call", error);
+                                }
+                            });
 
                 });
 
@@ -376,7 +421,7 @@ public class SubscriptionManager {
 
             return CompletableFuture.allOf(nodeIdFutures).thenCompose(param -> 
{
                 List<NodeId> nodeIds = 
Stream.of(nodeIdFutures).map(CompletableFuture::join).collect(Collectors.toList());
-                return this.client.readValues(0, TimestampsToReturn.Server, 
nodeIds);
+                return this.client.readValuesAsync(0, 
TimestampsToReturn.Server, nodeIds);
             });
         }
 
@@ -421,7 +466,9 @@ public class SubscriptionManager {
 
             if (previousBrowseResult.getStatusCode().isGood() && 
continuationPoint.isNotNull()) {
 
-                return this.client.browseNext(false, continuationPoint)
+//                return this.client.browseNext(false, continuationPoint)
+                return this.client.browseNextAsync(false, 
List.of(continuationPoint))
+                        .thenApply(r -> r.getResults()[0])
 
                         .thenCompose(browseResult -> {
 
@@ -499,7 +546,7 @@ public class SubscriptionManager {
                 List<BrowseDescription> browseDescriptions,
                 int depth, int maxDepth, Pattern pattern, int 
maxNodesPerRequest) {
 
-            return this.client.browse(browseDescriptions)
+            return this.client.browseAsync(browseDescriptions)
 
                     .thenCompose(partials -> {
 
@@ -694,16 +741,30 @@ public class SubscriptionManager {
         cfg.setEndpoint(endpoint);
 
         // create client
+        final OpcUaClient client = OpcUaClient.create(
+                cfg.build(),
+                // have been in MiloclientConfiguration before
+                transportBuilder -> {
+                    if (configuration.getChannelLifetime() != null) {
+                        
transportBuilder.setChannelLifetime(Unsigned.uint(configuration.getChannelLifetime()));
+                    }
+                });
 
-        final OpcUaClient client = OpcUaClient.create(cfg.build());
-        client.connect().get();
+        client.connect();
 
         try {
-            final UaSubscription manager = client.getSubscriptionManager()
-                    
.createSubscription(this.configuration.getRequestedPublishingInterval()).get();
-            client.getSubscriptionManager().addSubscriptionListener(new 
SubscriptionListenerImpl());
-
-            return new Connected(client, manager);
+            // FIXME validate Subscription creation
+            OpcUaSubscription subscription = new OpcUaSubscription(client);
+            subscription.setSubscriptionListener(new 
SubscriptionListenerImpl());
+            subscription.create();
+
+            return new Connected(client, subscription);
+
+//            final OpcUaSubscription manager = client.getSubscriptionManager()
+//                    
.createSubscription(this.configuration.getRequestedPublishingInterval()).get();
+//            client.getSubscriptionManager().addSubscriptionListener(new 
SubscriptionListenerImpl());
+//
+//            return new Connected(client, manager);
         } catch (final Exception e) {
             // clean up
             client.disconnect();
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 f4013d5d2a73..864ff1773569 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
@@ -21,6 +21,9 @@ import java.io.File;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
 import java.security.KeyPair;
 import java.security.cert.X509Certificate;
 import java.util.Arrays;
@@ -42,36 +45,30 @@ import 
org.apache.camel.component.milo.server.internal.CamelNamespace;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.annotations.Component;
 import org.apache.camel.support.DefaultComponent;
+import org.eclipse.milo.opcua.sdk.server.EndpointConfig;
 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.OpcUaServerConfig;
+import org.eclipse.milo.opcua.sdk.server.OpcUaServerConfigBuilder;
 import org.eclipse.milo.opcua.sdk.server.identity.AnonymousIdentityValidator;
 import org.eclipse.milo.opcua.sdk.server.identity.IdentityValidator;
 import org.eclipse.milo.opcua.sdk.server.identity.UsernameIdentityValidator;
 import org.eclipse.milo.opcua.sdk.server.util.HostnameUtil;
+import org.eclipse.milo.opcua.stack.core.NodeIds;
 import org.eclipse.milo.opcua.stack.core.StatusCodes;
 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.DefaultTrustListManager;
-import org.eclipse.milo.opcua.stack.core.security.SecurityPolicy;
+import org.eclipse.milo.opcua.stack.core.security.*;
 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.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.eclipse.milo.opcua.stack.transport.server.tcp.OpcTcpServerTransport;
+import 
org.eclipse.milo.opcua.stack.transport.server.tcp.OpcTcpServerTransportConfig;
+import org.jspecify.annotations.Nullable;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import static 
org.eclipse.milo.opcua.sdk.server.api.config.OpcUaServerConfig.USER_TOKEN_POLICY_ANONYMOUS;
-import static 
org.eclipse.milo.opcua.sdk.server.api.config.OpcUaServerConfig.USER_TOKEN_POLICY_USERNAME;
-import static 
org.eclipse.milo.opcua.sdk.server.api.config.OpcUaServerConfig.USER_TOKEN_POLICY_X509;
-
 /**
  * OPC UA Server based component
  */
@@ -120,10 +117,17 @@ public class MiloServerComponent extends DefaultComponent 
{
     @Metadata(label = "security")
     private String defaultCertificateValidator;
     @Metadata(label = "security")
-    private ServerCertificateValidator certificateValidator;
+    private CertificateValidator certificateValidator;
     @Metadata(label = "security")
     private X509Certificate certificate;
 
+    // FIXME - extract CertificateQuarantine
+    @Metadata(label = "security")
+    private CertificateQuarantine certificateQuarantine;
+    // FIXME - migration to CertificateGroup
+    @Metadata(label = "security")
+    private CertificateGroup certificateGroup;
+
     public MiloServerComponent() {
         this.opcServerConfig = null;
     }
@@ -138,7 +142,18 @@ public class MiloServerComponent extends DefaultComponent {
 
     @Override
     protected void doStart() throws Exception {
-        this.server = new OpcUaServer(buildServerConfig());
+        // 
https://github.com/eclipse-milo/milo/blob/1.0/milo-examples/server-examples/src/main/java/org/eclipse/milo/examples/server/ExampleServer.java
+        OpcUaServerConfig serverConfig = buildServerConfig();
+        this.server = new OpcUaServer(
+                serverConfig,
+                transportProfile -> {
+                    assert transportProfile == 
TransportProfile.TCP_UASC_UABINARY;
+
+                    OpcTcpServerTransportConfig transportConfig =
+                            OpcTcpServerTransportConfig.newBuilder().build();
+
+                    return new OpcTcpServerTransport(transportConfig);
+                });
 
         this.namespace = new CamelNamespace(this.namespaceUri, this.server);
         this.namespace.startup();
@@ -153,6 +168,9 @@ public class MiloServerComponent extends DefaultComponent {
      * @return the new server configuration, never returns {@code null}
      */
     private OpcUaServerConfig buildServerConfig() {
+
+//        this.certificateGroup = createCertificateGroup();
+
         OpcUaServerConfigBuilder serverConfig
                 = this.opcServerConfig != null ? this.opcServerConfig : 
createDefaultConfiguration();
 
@@ -162,7 +180,7 @@ public class MiloServerComponent extends DefaultComponent {
         if (!userMap.isEmpty() || enableAnonymousAuthentication != null) {
             // set identity validator
             final boolean allowAnonymous = 
Boolean.TRUE.equals(this.enableAnonymousAuthentication);
-            final IdentityValidator identityValidator = new 
UsernameIdentityValidator(allowAnonymous, challenge -> {
+            final IdentityValidator identityValidator = new 
UsernameIdentityValidator(challenge -> {
                 final String pwd = userMap.get(challenge.getUsername());
                 if (pwd == null) {
                     return false;
@@ -179,9 +197,9 @@ public class MiloServerComponent extends DefaultComponent {
             if (!userMap.isEmpty()) {
                 tokenPolicies.add(getUsernamePolicy());
             }
-            
serverConfig.setEndpoints(createEndpointConfigurations(tokenPolicies));
+            serverConfig.setEndpoints(createEndpointConfigs(tokenPolicies));
         } else {
-            serverConfig.setEndpoints(createEndpointConfigurations(null, 
securityPolicies));
+            serverConfig.setEndpoints(createEndpointConfigs(null, 
securityPolicies));
         }
 
         if (certificateValidator != null) {
@@ -196,7 +214,10 @@ public class MiloServerComponent extends DefaultComponent {
                     }
                 });
             }
-            serverConfig.setCertificateValidator(certificateValidator);
+//            serverConfig.setCertificateValidator(certificateValidator);
+//            // FIXME - moved to certificateManager
+            serverConfig.setCertificateManager(
+                    new DefaultCertificateManager(this.certificateQuarantine, 
this.certificateGroup));
         }
 
         // build final configuration
@@ -206,13 +227,15 @@ public class MiloServerComponent extends DefaultComponent 
{
     private OpcUaServerConfigBuilder createDefaultConfiguration() {
         final OpcUaServerConfigBuilder cfg = OpcUaServerConfig.builder();
 
-        cfg.setCertificateManager(new DefaultCertificateManager());
-        cfg.setCertificateValidator(DenyAllCertificateValidator.INSTANCE);
-        cfg.setEndpoints(createEndpointConfigurations(null));
+//        cfg.setCertificateManager(new DefaultCertificateManager()); // TODO 
there is already der CertificateManager intialization below
+//        cfg.setCertificateValidator(DenyAllCertificateValidator.INSTANCE); 
// TODO moved to createCertificateGroup
+        cfg.setEndpoints(createEndpointConfigs(null));
         cfg.setApplicationName(LocalizedText.english(applicationName == null ? 
"Apache Camel Milo Server" : applicationName));
         cfg.setApplicationUri("urn:org:apache:camel:milo:server");
         cfg.setProductUri("urn:org:apache:camel:milo");
         cfg.setCertificateManager(certificateManager);
+
+
         if (productUri != null) {
             cfg.setProductUri(productUri);
         }
@@ -230,13 +253,13 @@ public class MiloServerComponent extends DefaultComponent 
{
         return cfg;
     }
 
-    private Set<EndpointConfiguration> 
createEndpointConfigurations(List<UserTokenPolicy> userTokenPolicies) {
-        return createEndpointConfigurations(userTokenPolicies, 
securityPolicies);
+    private Set<EndpointConfig> createEndpointConfigs(List<UserTokenPolicy> 
userTokenPolicies) {
+        return createEndpointConfigs(userTokenPolicies, securityPolicies);
     }
 
-    private Set<EndpointConfiguration> createEndpointConfigurations(
+    private Set<EndpointConfig> createEndpointConfigs(
             List<UserTokenPolicy> userTokenPolicies, Set<SecurityPolicy> 
securityPolicies) {
-        Set<EndpointConfiguration> endpointConfigurations = new 
LinkedHashSet<>();
+        Set<EndpointConfig> endpointConfigs = new LinkedHashSet<>();
 
         //if address is not defined, return empty set
         if (bindAddresses == null) {
@@ -255,11 +278,14 @@ public class MiloServerComponent extends DefaultComponent 
{
                     = userTokenPolicies != null ? 
userTokenPolicies.toArray(new UserTokenPolicy[userTokenPolicies.size()])
                             : anonymous
                                     ? new UserTokenPolicy[] {
-                                            USER_TOKEN_POLICY_ANONYMOUS, 
USER_TOKEN_POLICY_USERNAME, USER_TOKEN_POLICY_X509 }
-                            : new UserTokenPolicy[] { 
USER_TOKEN_POLICY_USERNAME, USER_TOKEN_POLICY_X509 };
+                                            
OpcUaServerConfig.USER_TOKEN_POLICY_ANONYMOUS,
+                                            
OpcUaServerConfig.USER_TOKEN_POLICY_USERNAME,
+                                            
OpcUaServerConfig.USER_TOKEN_POLICY_X509
+            }
+                            : new UserTokenPolicy[] { 
OpcUaServerConfig.USER_TOKEN_POLICY_USERNAME, 
OpcUaServerConfig.USER_TOKEN_POLICY_X509 };
 
             for (String hostname : hostnames) {
-                EndpointConfiguration.Builder builder = 
EndpointConfiguration.newBuilder()
+                EndpointConfig.Builder builder = EndpointConfig.newBuilder()
                         .setBindAddress(bindAddress)
                         .setHostname(hostname)
                         .setCertificate(certificate)
@@ -267,22 +293,22 @@ public class MiloServerComponent extends DefaultComponent 
{
                         .addTokenPolicies(tokenPolicies);
 
                 if (securityPolicies == null || 
securityPolicies.contains(SecurityPolicy.None)) {
-                    EndpointConfiguration.Builder noSecurityBuilder = 
builder.copy()
+                    EndpointConfig.Builder noSecurityBuilder = builder.copy()
                             .setSecurityPolicy(SecurityPolicy.None)
                             .setSecurityMode(MessageSecurityMode.None);
 
-                    
endpointConfigurations.add(buildTcpEndpoint(noSecurityBuilder));
-                    
endpointConfigurations.add(buildHttpsEndpoint(noSecurityBuilder));
+                    endpointConfigs.add(buildTcpEndpoint(noSecurityBuilder));
+                    endpointConfigs.add(buildHttpsEndpoint(noSecurityBuilder));
                 } else if 
(securityPolicies.contains(SecurityPolicy.Basic256Sha256)) {
 
                     // TCP Basic256Sha256 / SignAndEncrypt
-                    endpointConfigurations.add(buildTcpEndpoint(
+                    endpointConfigs.add(buildTcpEndpoint(
                             builder.copy()
                                     
.setSecurityPolicy(SecurityPolicy.Basic256Sha256)
                                     
.setSecurityMode(MessageSecurityMode.SignAndEncrypt)));
                 } else if 
(securityPolicies.contains(SecurityPolicy.Basic256Sha256)) {
                     // HTTPS Basic256Sha256 / Sign (SignAndEncrypt not allowed 
for HTTPS)
-                    endpointConfigurations.add(buildHttpsEndpoint(
+                    endpointConfigs.add(buildHttpsEndpoint(
                             builder.copy()
                                     
.setSecurityPolicy(SecurityPolicy.Basic256Sha256)
                                     
.setSecurityMode(MessageSecurityMode.Sign)));
@@ -298,46 +324,41 @@ public class MiloServerComponent extends DefaultComponent 
{
                  * different address for this Endpoint it shall create the 
address by appending the path "/discovery" to
                  * its base address.
                  */
-                EndpointConfiguration.Builder discoveryBuilder = builder.copy()
+                EndpointConfig.Builder discoveryBuilder = builder.copy()
                         .setPath("/discovery")
                         .setSecurityPolicy(SecurityPolicy.None)
                         .setSecurityMode(MessageSecurityMode.None);
 
-                endpointConfigurations.add(buildTcpEndpoint(discoveryBuilder));
-                
endpointConfigurations.add(buildHttpsEndpoint(discoveryBuilder));
+                endpointConfigs.add(buildTcpEndpoint(discoveryBuilder));
+                endpointConfigs.add(buildHttpsEndpoint(discoveryBuilder));
             }
         }
 
-        return endpointConfigurations;
+        return endpointConfigs;
     }
 
-    private EndpointConfiguration 
buildTcpEndpoint(EndpointConfiguration.Builder base) {
+    private EndpointConfig buildTcpEndpoint(EndpointConfig.Builder base) {
         return base.copy()
                 .setTransportProfile(TransportProfile.TCP_UASC_UABINARY)
                 .setBindPort(this.port)
                 .build();
     }
 
-    private EndpointConfiguration 
buildHttpsEndpoint(EndpointConfiguration.Builder base) {
+    private EndpointConfig buildHttpsEndpoint(EndpointConfig.Builder base) {
         return base.copy()
                 .setTransportProfile(TransportProfile.HTTPS_UABINARY)
                 .setBindPort(this.port)
                 .build();
     }
 
-    private static final class DenyAllCertificateValidator implements 
ServerCertificateValidator {
-        public static final ServerCertificateValidator INSTANCE = new 
DenyAllCertificateValidator();
+    private static final class DenyAllCertificateValidator implements 
CertificateValidator {
+        public static final CertificateValidator INSTANCE = new 
DenyAllCertificateValidator();
 
         private DenyAllCertificateValidator() {
         }
 
         @Override
-        public void validateCertificateChain(List<X509Certificate> list, 
String s) throws UaException {
-            throw new UaException(StatusCodes.Bad_CertificateUseNotAllowed);
-        }
-
-        @Override
-        public void validateCertificateChain(List<X509Certificate> list) 
throws UaException {
+        public void validateCertificateChain(List<X509Certificate> 
certificateChain, @Nullable String applicationUri, @Nullable String[] 
validHostnames) throws UaException {
             throw new UaException(StatusCodes.Bad_CertificateUseNotAllowed);
         }
     }
@@ -423,7 +444,17 @@ public class MiloServerComponent extends DefaultComponent {
      */
     public void loadServerCertificate(final KeyPair keyPair, final 
X509Certificate certificate) {
         this.certificate = certificate;
-        setCertificateManager(new DefaultCertificateManager(keyPair, 
certificate));
+        // TODO evaluate migration to CertificateGroup
+//        setCertificateManager(new DefaultCertificateManager(keyPair, 
certificate));
+        try {
+            this.certificateGroup.updateCertificate(
+                    
NodeIds.ServerConfiguration_CertificateGroups_DefaultApplicationGroup,
+                    keyPair,
+                    new X509Certificate[]{certificate});
+        } catch (Exception e) {
+            throw new RuntimeCamelException(e);
+        }
+
     }
 
     /**
@@ -576,13 +607,13 @@ public class MiloServerComponent extends DefaultComponent 
{
      * Server certificate manager
      */
     public void setCertificateManager(final CertificateManager 
certificateManager) {
-        this.certificateManager = certificateManager != null ? 
certificateManager : new DefaultCertificateManager();
+        this.certificateManager = certificateManager != null ? 
certificateManager : new DefaultCertificateManager(this.certificateQuarantine);
     }
 
     /**
      * Validator for client certificates
      */
-    public void setCertificateValidator(final ServerCertificateValidator 
certificateValidator) {
+    public void setCertificateValidator(final CertificateValidator 
certificateValidator) {
         this.certificateValidator = certificateValidator;
     }
 
@@ -592,13 +623,41 @@ public class MiloServerComponent extends DefaultComponent 
{
     public void setDefaultCertificateValidator(final String 
defaultCertificateValidator) {
         this.defaultCertificateValidator = defaultCertificateValidator;
         try {
-            DefaultTrustListManager trustListManager = new 
DefaultTrustListManager(new File(defaultCertificateValidator));
-            this.certificateValidator = new 
DefaultServerCertificateValidator(trustListManager);
-        } catch (IOException e) {
+            final Path certificateConfigurationPath = new 
File(defaultCertificateValidator).toPath();
+            TrustListManager trustListManager = 
FileBasedTrustListManager.createAndInitialize(certificateConfigurationPath);
+
+            this.certificateQuarantine = 
this.createCertificateQuarantine(certificateConfigurationPath);
+
+            this.certificateValidator = new 
DefaultServerCertificateValidator(trustListManager, certificateQuarantine);
+
+            this.certificateGroup = 
DefaultApplicationGroup.createAndInitialize(
+                    trustListManager,
+                    new MemoryCertificateStore(), // alternative is 
KeyStoreCertificateStore
+                    new RsaSha256CertificateFactory() {
+                        @Override
+                        protected X509Certificate[] 
createRsaSha256CertificateChain(KeyPair keyPair) {
+                            return new X509Certificate[] {certificate};
+                        }
+                    },
+                    certificateValidator);
+
+        } catch (Exception e) {
             throw new RuntimeCamelException(e);
         }
     }
 
+    private CertificateQuarantine createCertificateQuarantine(Path 
certificateConfigurationPath)
+            throws IOException {
+        var certificateQuarantineDir = 
certificateConfigurationPath.resolve("rejected").resolve("certs");
+        var certificateQuarantine = 
FileBasedCertificateQuarantine.create(certificateQuarantineDir);
+        if (!Files.exists(certificateConfigurationPath)) {
+            Files.createDirectories(certificateConfigurationPath);
+        }
+
+        return certificateQuarantine;
+    }
+
+
     public String getDefaultCertificateValidator() {
         return defaultCertificateValidator;
     }
diff --git 
a/components/camel-milo/src/main/java/org/apache/camel/component/milo/server/internal/CallMethod.java
 
b/components/camel-milo/src/main/java/org/apache/camel/component/milo/server/internal/CallMethod.java
index 1780439c199b..9eb812874c18 100644
--- 
a/components/camel-milo/src/main/java/org/apache/camel/component/milo/server/internal/CallMethod.java
+++ 
b/components/camel-milo/src/main/java/org/apache/camel/component/milo/server/internal/CallMethod.java
@@ -18,7 +18,7 @@
 package org.apache.camel.component.milo.server.internal;
 
 import org.eclipse.milo.opcua.sdk.core.ValueRanks;
-import 
org.eclipse.milo.opcua.sdk.server.api.methods.AbstractMethodInvocationHandler;
+import 
org.eclipse.milo.opcua.sdk.server.methods.AbstractMethodInvocationHandler;
 import org.eclipse.milo.opcua.sdk.server.nodes.UaMethodNode;
 import org.eclipse.milo.opcua.stack.core.Identifiers;
 import org.eclipse.milo.opcua.stack.core.types.builtin.LocalizedText;
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 a398a856a5a3..775b8ad24d60 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
@@ -22,10 +22,10 @@ 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.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.ManagedNamespaceWithLifecycle;
+import org.eclipse.milo.opcua.sdk.server.dtd.BinaryDataTypeDictionaryManager;
+import org.eclipse.milo.opcua.sdk.server.items.DataItem;
+import org.eclipse.milo.opcua.sdk.server.items.MonitoredItem;
 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;
@@ -45,7 +45,7 @@ public class CamelNamespace extends 
ManagedNamespaceWithLifecycle {
 
     private final Map<String, CamelServerItem> itemMap = new HashMap<>();
 
-    private final DataTypeDictionaryManager dictionaryManager;
+    private final BinaryDataTypeDictionaryManager dictionaryManager;
 
     private final Logger log = LoggerFactory.getLogger(CamelNamespace.class);
 
@@ -53,7 +53,7 @@ public class CamelNamespace extends 
ManagedNamespaceWithLifecycle {
         super(server, namespaceUri);
 
         this.subscriptionModel = new SubscriptionModel(server, this);
-        this.dictionaryManager = new 
DataTypeDictionaryManager(getNodeContext(), namespaceUri);
+        this.dictionaryManager = new 
BinaryDataTypeDictionaryManager(getNodeContext(), namespaceUri);
 
         getLifecycleManager().addLifecycle(dictionaryManager);
         getLifecycleManager().addLifecycle(subscriptionModel);
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 1b9799d7875f..61375e32ef96 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
@@ -39,6 +39,7 @@ import 
org.eclipse.milo.opcua.stack.core.types.builtin.QualifiedName;
 import org.eclipse.milo.opcua.stack.core.types.builtin.StatusCode;
 import org.eclipse.milo.opcua.stack.core.types.builtin.Variant;
 import org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UShort;
+import org.jspecify.annotations.Nullable;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -74,7 +75,7 @@ public class CamelServerItem {
                 .addAttributeFilter(new AttributeFilter() {
 
                     @Override
-                    public Object 
getAttribute(AttributeFilterContext.GetAttributeContext ctx, AttributeId 
attributeId) {
+                    public @Nullable Object 
getAttribute(AttributeFilterContext ctx, AttributeId attributeId) {
                         if (filter.test(attributeId) && 
ctx.getSession().isPresent()) {
                             return getDataValue();
                         }
@@ -82,8 +83,7 @@ public class CamelServerItem {
                     }
 
                     @Override
-                    public void setAttribute(
-                            AttributeFilterContext.SetAttributeContext ctx, 
AttributeId attributeId, Object value) {
+                    public void setAttribute(AttributeFilterContext ctx, 
AttributeId attributeId, @Nullable Object value) {
                         if (filter.test(attributeId) && 
ctx.getSession().isPresent()) {
                             setDataValue((DataValue) value);
                         }
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 208cf732e150..8948fff2327f 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.KeyPair;
 import java.security.cert.X509Certificate;
 import java.util.Arrays;
 import java.util.EnumSet;
@@ -29,19 +30,18 @@ import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.milo.AbstractMiloServerTest;
 import org.apache.camel.component.milo.NodeIds;
+import org.eclipse.milo.opcua.sdk.server.EndpointConfig;
 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.OpcUaServerConfig;
+import org.eclipse.milo.opcua.sdk.server.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.SecurityPolicy;
+import org.eclipse.milo.opcua.stack.core.security.*;
 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.eclipse.milo.opcua.stack.transport.server.tcp.OpcTcpServerTransport;
+import 
org.eclipse.milo.opcua.stack.transport.server.tcp.OpcTcpServerTransportConfig;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.TestInfo;
@@ -49,7 +49,6 @@ 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;
 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
@@ -102,46 +101,73 @@ public class CallClientTest extends 
AbstractMiloServerTest {
     public void start() throws Exception {
         final OpcUaServerConfigBuilder cfg = OpcUaServerConfig.builder();
 
-        cfg.setCertificateManager(new DefaultCertificateManager());
-        
cfg.setEndpoints(createEndpointConfigurations(Arrays.asList(OpcUaServerConfig.USER_TOKEN_POLICY_ANONYMOUS),
+//        cfg.setCertificateManager(new DefaultCertificateManager()); // TODO 
setCertificateManager is called afterwards
+        
cfg.setEndpoints(createEndpointConfigs(Arrays.asList(OpcUaServerConfig.USER_TOKEN_POLICY_ANONYMOUS),
                 EnumSet.of(SecurityPolicy.None)));
         cfg.setApplicationName(LocalizedText.english("Apache Camel Milo 
Server"));
         cfg.setApplicationUri("urn:mock:namespace");
         cfg.setProductUri("urn:org:apache:camel:milo");
-        cfg.setCertificateManager(new DefaultCertificateManager());
-        cfg.setCertificateValidator(new InsecureCertificateValidator());
-
-        this.server = new OpcUaServer(cfg.build());
+        // FIXME migrate to new certifcate
+//        cfg.setCertificateManager(new DefaultCertificateManager());
+////        cfg.setCertificateValidator(new InsecureCertificateValidator());
+//        cfg.setCertificateValidator(new 
CertificateValidator.InsecureCertificateValidator());
+
+        var certificateQuarantine = new MemoryCertificateQuarantine();
+        var trustListManager = new MemoryTrustListManager();
+        var certificateStore = new MemoryCertificateStore();
+        var certificateFactory = new TestCertificateFactory();
+        var certificateGroup = new DefaultApplicationGroup(
+                trustListManager,
+                certificateStore,
+                certificateFactory,
+                new CertificateValidator.InsecureCertificateValidator()
+        );
+        cfg.setCertificateManager(
+                new DefaultCertificateManager(certificateQuarantine, 
certificateGroup));
+
+        // 
https://github.com/eclipse-milo/milo/blob/1.0/milo-examples/server-examples/src/main/java/org/eclipse/milo/examples/server/ExampleServer.java
+//        this.server = new OpcUaServer(cfg.build());
+        OpcUaServerConfig serverConfig = cfg.build();
+        this.server = new OpcUaServer(
+                serverConfig,
+                transportProfile -> {
+                    assert transportProfile == 
TransportProfile.TCP_UASC_UABINARY;
+
+                    OpcTcpServerTransportConfig transportConfig =
+                            OpcTcpServerTransportConfig.newBuilder().build();
+
+                    return new OpcTcpServerTransport(transportConfig);
+                });
 
         this.namespace = new MockCamelNamespace(this.server, node -> 
callMethod = new MockCallMethod(node));
         this.namespace.startup();
         this.server.startup().get();
     }
 
-    private Set<EndpointConfiguration> createEndpointConfigurations(
+    private Set<EndpointConfig> createEndpointConfigs(
             List<UserTokenPolicy> userTokenPolicies, Set<SecurityPolicy> 
securityPolicies) {
-        Set<EndpointConfiguration> endpointConfigurations = new 
LinkedHashSet<>();
+        Set<EndpointConfig> endpointConfigs = new LinkedHashSet<>();
 
         String bindAddress = "0.0.0.0";
         Set<String> hostnames = new LinkedHashSet<>();
         hostnames.add(HostnameUtil.getHostname());
         hostnames.addAll(HostnameUtil.getHostnames(bindAddress));
 
-        UserTokenPolicy[] tokenPolicies = new UserTokenPolicy[] { 
USER_TOKEN_POLICY_ANONYMOUS };
+        UserTokenPolicy[] tokenPolicies = new UserTokenPolicy[] { 
OpcUaServerConfig.USER_TOKEN_POLICY_ANONYMOUS };
 
         for (String hostname : hostnames) {
-            EndpointConfiguration.Builder builder = 
EndpointConfiguration.newBuilder()
+            EndpointConfig.Builder builder = EndpointConfig.newBuilder()
                     .setBindAddress(bindAddress)
                     .setHostname(hostname)
                     .setCertificate(() -> null)
                     .addTokenPolicies(tokenPolicies);
 
             if (securityPolicies == null || 
securityPolicies.contains(SecurityPolicy.None)) {
-                EndpointConfiguration.Builder noSecurityBuilder = 
builder.copy()
+                EndpointConfig.Builder noSecurityBuilder = builder.copy()
                         .setSecurityPolicy(SecurityPolicy.None)
                         .setSecurityMode(MessageSecurityMode.None);
 
-                
endpointConfigurations.add(buildTcpEndpoint(noSecurityBuilder));
+                endpointConfigs.add(buildTcpEndpoint(noSecurityBuilder));
             }
             /*
              * It's good practice to provide a discovery-specific endpoint 
with no security.
@@ -154,18 +180,18 @@ public class CallClientTest extends 
AbstractMiloServerTest {
              * its base address.
              */
 
-            EndpointConfiguration.Builder discoveryBuilder = builder.copy()
+            EndpointConfig.Builder discoveryBuilder = builder.copy()
                     .setPath("/discovery")
                     .setSecurityPolicy(SecurityPolicy.None)
                     .setSecurityMode(MessageSecurityMode.None);
 
-            endpointConfigurations.add(buildTcpEndpoint(discoveryBuilder));
+            endpointConfigs.add(buildTcpEndpoint(discoveryBuilder));
         }
 
-        return endpointConfigurations;
+        return endpointConfigs;
     }
 
-    private EndpointConfiguration 
buildTcpEndpoint(EndpointConfiguration.Builder base) {
+    private EndpointConfig buildTcpEndpoint(EndpointConfig.Builder base) {
         return base.copy()
                 .setTransportProfile(TransportProfile.TCP_UASC_UABINARY)
                 .setBindPort(getServerPort())
@@ -188,20 +214,4 @@ 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/MockCallMethod.java
 
b/components/camel-milo/src/test/java/org/apache/camel/component/milo/call/MockCallMethod.java
index 9806e6780685..3a2092aaef20 100644
--- 
a/components/camel-milo/src/test/java/org/apache/camel/component/milo/call/MockCallMethod.java
+++ 
b/components/camel-milo/src/test/java/org/apache/camel/component/milo/call/MockCallMethod.java
@@ -21,7 +21,7 @@ import java.util.LinkedList;
 import java.util.List;
 
 import org.eclipse.milo.opcua.sdk.core.ValueRanks;
-import 
org.eclipse.milo.opcua.sdk.server.api.methods.AbstractMethodInvocationHandler;
+import 
org.eclipse.milo.opcua.sdk.server.methods.AbstractMethodInvocationHandler;
 import org.eclipse.milo.opcua.sdk.server.nodes.UaMethodNode;
 import org.eclipse.milo.opcua.stack.core.Identifiers;
 import org.eclipse.milo.opcua.stack.core.types.builtin.LocalizedText;
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 2893153ba2e8..1aec6ceb4439 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
@@ -25,11 +25,11 @@ 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.ManagedNamespaceWithLifecycle;
 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.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.items.DataItem;
+import org.eclipse.milo.opcua.sdk.server.items.MonitoredItem;
+import 
org.eclipse.milo.opcua.sdk.server.methods.AbstractMethodInvocationHandler;
 import org.eclipse.milo.opcua.sdk.server.nodes.UaFolderNode;
 import org.eclipse.milo.opcua.sdk.server.nodes.UaMethodNode;
 import org.eclipse.milo.opcua.sdk.server.util.SubscriptionModel;
diff --git 
a/components/camel-milo/src/test/java/org/apache/camel/component/milo/call/TestCertificateFactory.java
 
b/components/camel-milo/src/test/java/org/apache/camel/component/milo/call/TestCertificateFactory.java
new file mode 100644
index 000000000000..459ae4101a24
--- /dev/null
+++ 
b/components/camel-milo/src/test/java/org/apache/camel/component/milo/call/TestCertificateFactory.java
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.milo.call;
+
+import org.eclipse.milo.opcua.stack.core.NodeIds;
+import org.eclipse.milo.opcua.stack.core.security.RsaSha256CertificateFactory;
+import org.eclipse.milo.opcua.stack.core.types.builtin.NodeId;
+import org.eclipse.milo.opcua.stack.core.util.SelfSignedCertificateBuilder;
+import org.eclipse.milo.opcua.stack.core.util.SelfSignedCertificateGenerator;
+
+import java.security.KeyPair;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.X509Certificate;
+
+/**
+ * copied from milo::TestCertificateFactory
+ */
+public class TestCertificateFactory extends RsaSha256CertificateFactory {
+
+  @Override
+  public KeyPair createKeyPair(NodeId nodeId) {
+    assert nodeId.equals(NodeIds.RsaSha256ApplicationCertificateType);
+
+    return createRsaSha256KeyPair();
+  }
+
+  @Override
+  public X509Certificate[] createCertificateChain(NodeId nodeId, KeyPair 
keyPair) {
+    assert nodeId.equals(NodeIds.RsaSha256ApplicationCertificateType);
+
+    return createRsaSha256CertificateChain(keyPair);
+  }
+
+  @Override
+  public KeyPair createRsaSha256KeyPair() {
+    try {
+      return SelfSignedCertificateGenerator.generateRsaKeyPair(2048);
+    } catch (NoSuchAlgorithmException e) {
+      throw new RuntimeException(e);
+    }
+  }
+
+  @Override
+  public X509Certificate[] createRsaSha256CertificateChain(KeyPair keyPair) {
+    String applicationUri = "urn:eclipse:milo:test";
+
+    SelfSignedCertificateBuilder builder =
+        new SelfSignedCertificateBuilder(keyPair)
+            .setCommonName("Eclipse Milo OPC UA Test Server")
+            .setOrganization("digitalpetri")
+            .setOrganizationalUnit("dev")
+            .setLocalityName("Folsom")
+            .setStateName("CA")
+            .setCountryCode("US")
+            .setApplicationUri(applicationUri)
+            .addIpAddress("127.0.0.1")
+            .addDnsName("localhost");
+
+    try {
+      return new X509Certificate[] {builder.build()};
+    } catch (Exception e) {
+      throw new RuntimeException(e);
+    }
+  }
+}
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 1869d6394292..d0bb36778292 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
@@ -18,8 +18,10 @@ package org.apache.camel.component.milo.client;
 
 import java.io.Serializable;
 
+import com.google.common.net.UrlEscapers;
 import org.apache.camel.ResolveEndpointFailedException;
 import org.apache.camel.component.milo.AbstractMiloServerTest;
+import org.apache.camel.component.milo.server.MiloServerComponent;
 import org.eclipse.milo.opcua.stack.core.types.builtin.ExpandedNodeId;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
@@ -27,8 +29,6 @@ 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;
 import static 
org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.Unsigned.uint;
 import static 
org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.Unsigned.ushort;
 import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -52,8 +52,8 @@ public class NodeIdTest extends AbstractMiloServerTest {
 
     @Test
     public void testFull1() {
-        final String s = String.format("nsu=%s;s=%s", DEFAULT_NAMESPACE_URI, 
"item-1");
-        
testUri("milo-client:tcp://foo:bar@localhost:@@port@@?samplingInterval=1000&node=RAW("
 + s + ")", DEFAULT_NAMESPACE_URI,
+        final String s = String.format("nsu=%s;s=%s", 
MiloServerComponent.DEFAULT_NAMESPACE_URI, "item-1");
+        
testUri("milo-client:tcp://foo:bar@localhost:@@port@@?samplingInterval=1000&node=RAW("
 + s + ")", MiloServerComponent.DEFAULT_NAMESPACE_URI,
                 "item-1");
     }
 
@@ -73,7 +73,7 @@ public class NodeIdTest extends AbstractMiloServerTest {
     public void testFull1NonRaw() {
         final String s = String.format("ns=%s;i=%s", 1, 2);
         
testUri("milo-client:tcp://foo:bar@localhost:@@port@@?samplingInterval=1000&node="
-                + urlFormParameterEscaper().escape(s), ushort(1), uint(2));
+                + UrlEscapers.urlFormParameterEscaper().escape(s), ushort(1), 
uint(2));
     }
 
     @Test
@@ -86,7 +86,7 @@ public class NodeIdTest extends AbstractMiloServerTest {
     public void testMixed() {
         // This must fail since "node" is incomplete
         assertThrows(ResolveEndpointFailedException.class,
-                () -> 
testUri("milo-client:tcp://foo:bar@localhost:@@port@@?node=foo&namespaceUri=" + 
DEFAULT_NAMESPACE_URI,
+                () -> 
testUri("milo-client:tcp://foo:bar@localhost:@@port@@?node=foo&namespaceUri=" + 
MiloServerComponent.DEFAULT_NAMESPACE_URI,
                         null, null));
     }
 

Reply via email to