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

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


The following commit(s) were added to refs/heads/main by this push:
     new f6cbda10eaa CAMEL-18325: camel-hyperledger-aries - Add support for 
/credentials e… (#8078)
f6cbda10eaa is described below

commit f6cbda10eaa191a4660e9df57c3f5140ad078599
Author: Thomas Diesler <[email protected]>
AuthorDate: Sat Jul 30 07:48:18 2022 +0200

    CAMEL-18325: camel-hyperledger-aries - Add support for /credentials e… 
(#8078)
    
    * CAMEL-18325: camel-hyperledger-aries - Add support for /credentials 
endpoint
    
    * Fix checkstyle for camel-aws-cloudtrail
---
 .../aws/cloudtrail/CloudtrailConsumer.java         | 14 +++--
 .../aries/V1CredentialExchangeConverterLoader.java | 60 +++++++++++++++++++++
 .../services/org/apache/camel/TypeConverterLoader  |  1 +
 .../camel/component/aries/hyperledger-aries.json   |  2 +-
 .../component/aries/HyperledgerAriesComponent.java | 62 +++++++++++++++-------
 .../aries/HyperledgerAriesConfiguration.java       |  2 +-
 .../component/aries/HyperledgerAriesEndpoint.java  |  8 +--
 .../component/aries/HyperledgerAriesProducer.java  | 16 +++++-
 .../aries/handler/AbstractServiceHandler.java      |  4 +-
 .../aries/handler/ConnectionsServiceHandler.java   | 43 +++++++++++----
 .../CredentialDefinitionsServiceHandler.java       |  2 +
 ...Handler.java => CredentialsServiceHandler.java} | 16 +++---
 ...r.java => IssueCredentialV1ServiceHandler.java} | 19 +++++--
 .../aries/handler/MultitenancyServiceHandler.java  |  3 +-
 .../aries/handler/PresentProofServiceHandler.java  |  6 +++
 .../aries/handler/RevocationServiceHandler.java    |  3 ++
 .../aries/handler/SchemasServiceHandler.java       |  2 +
 .../aries/handler/WalletServiceHandler.java        |  2 +
 .../aries/V1CredentialExchangeConverter.java       | 54 +++++++++++++++++++
 19 files changed, 267 insertions(+), 52 deletions(-)

diff --git 
a/components/camel-aws/camel-aws-cloudtrail/src/main/java/org/apache/camel/component/aws/cloudtrail/CloudtrailConsumer.java
 
b/components/camel-aws/camel-aws-cloudtrail/src/main/java/org/apache/camel/component/aws/cloudtrail/CloudtrailConsumer.java
index e8b1fe39d5f..282d382922f 100644
--- 
a/components/camel-aws/camel-aws-cloudtrail/src/main/java/org/apache/camel/component/aws/cloudtrail/CloudtrailConsumer.java
+++ 
b/components/camel-aws/camel-aws-cloudtrail/src/main/java/org/apache/camel/component/aws/cloudtrail/CloudtrailConsumer.java
@@ -18,7 +18,10 @@ package org.apache.camel.component.aws.cloudtrail;
 
 import java.nio.charset.StandardCharsets;
 import java.time.Instant;
-import java.util.*;
+import java.util.ArrayDeque;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Queue;
 
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.Exchange;
@@ -29,12 +32,17 @@ import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import software.amazon.awssdk.services.cloudtrail.CloudTrailClient;
-import software.amazon.awssdk.services.cloudtrail.model.*;
+import software.amazon.awssdk.services.cloudtrail.model.Event;
+import software.amazon.awssdk.services.cloudtrail.model.LookupAttribute;
+import software.amazon.awssdk.services.cloudtrail.model.LookupAttributeKey;
+import software.amazon.awssdk.services.cloudtrail.model.LookupEventsRequest;
+import software.amazon.awssdk.services.cloudtrail.model.LookupEventsResponse;
 
 public class CloudtrailConsumer extends ScheduledBatchPollingConsumer {
 
     private static final Logger LOG = 
LoggerFactory.getLogger(CloudtrailConsumer.class);
-    private static Instant lastTime = null;
+
+    private static Instant lastTime;
 
     public CloudtrailConsumer(CloudtrailEndpoint endpoint, Processor 
processor) {
         super(endpoint, processor);
diff --git 
a/components/camel-hyperledger-aries/src/generated/java/org/apache/camel/converter/aries/V1CredentialExchangeConverterLoader.java
 
b/components/camel-hyperledger-aries/src/generated/java/org/apache/camel/converter/aries/V1CredentialExchangeConverterLoader.java
new file mode 100644
index 00000000000..152787a01c6
--- /dev/null
+++ 
b/components/camel-hyperledger-aries/src/generated/java/org/apache/camel/converter/aries/V1CredentialExchangeConverterLoader.java
@@ -0,0 +1,60 @@
+/* Generated by camel build tools - do NOT edit this file! */
+package org.apache.camel.converter.aries;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.CamelContextAware;
+import org.apache.camel.DeferredContextBinding;
+import org.apache.camel.Exchange;
+import org.apache.camel.TypeConversionException;
+import org.apache.camel.TypeConverterLoaderException;
+import org.apache.camel.spi.TypeConverterLoader;
+import org.apache.camel.spi.TypeConverterRegistry;
+import org.apache.camel.support.SimpleTypeConverter;
+import org.apache.camel.support.TypeConverterSupport;
+import org.apache.camel.util.DoubleMap;
+
+/**
+ * Generated by camel build tools - do NOT edit this file!
+ */
+@SuppressWarnings("unchecked")
+@DeferredContextBinding
+public final class V1CredentialExchangeConverterLoader implements 
TypeConverterLoader, CamelContextAware {
+
+    private CamelContext camelContext;
+
+    public V1CredentialExchangeConverterLoader() {
+    }
+
+    @Override
+    public void setCamelContext(CamelContext camelContext) {
+        this.camelContext = camelContext;
+    }
+
+    @Override
+    public CamelContext getCamelContext() {
+        return camelContext;
+    }
+
+    @Override
+    public void load(TypeConverterRegistry registry) throws 
TypeConverterLoaderException {
+        registerConverters(registry);
+    }
+
+    private void registerConverters(TypeConverterRegistry registry) {
+        addTypeConverter(registry, com.google.gson.JsonObject.class, 
org.hyperledger.aries.api.issue_credential_v1.V1CredentialExchange.class, false,
+            (type, exchange, value) -> 
org.apache.camel.converter.aries.V1CredentialExchangeConverter.toJsonObject((org.hyperledger.aries.api.issue_credential_v1.V1CredentialExchange)
 value));
+        addTypeConverter(registry, java.util.Map.class, 
org.hyperledger.aries.api.issue_credential_v1.V1CredentialExchange.class, false,
+            (type, exchange, value) -> 
org.apache.camel.converter.aries.V1CredentialExchangeConverter.toMap((org.hyperledger.aries.api.issue_credential_v1.V1CredentialExchange)
 value));
+        addTypeConverter(registry, 
org.hyperledger.aries.api.issue_credential_v1.V1CredentialExchange.class, 
com.google.gson.JsonObject.class, false,
+            (type, exchange, value) -> 
org.apache.camel.converter.aries.V1CredentialExchangeConverter.toAries((com.google.gson.JsonObject)
 value));
+        addTypeConverter(registry, 
org.hyperledger.aries.api.issue_credential_v1.V1CredentialExchange.class, 
java.lang.String.class, false,
+            (type, exchange, value) -> 
org.apache.camel.converter.aries.V1CredentialExchangeConverter.toAries((java.lang.String)
 value));
+        addTypeConverter(registry, 
org.hyperledger.aries.api.issue_credential_v1.V1CredentialExchange.class, 
java.util.Map.class, false,
+            (type, exchange, value) -> 
org.apache.camel.converter.aries.V1CredentialExchangeConverter.toAries((java.util.Map)
 value));
+    }
+
+    private static void addTypeConverter(TypeConverterRegistry registry, 
Class<?> toType, Class<?> fromType, boolean allowNull, 
SimpleTypeConverter.ConversionMethod method) { 
+        registry.addTypeConverter(toType, fromType, new 
SimpleTypeConverter(allowNull, method));
+    }
+
+}
diff --git 
a/components/camel-hyperledger-aries/src/generated/resources/META-INF/services/org/apache/camel/TypeConverterLoader
 
b/components/camel-hyperledger-aries/src/generated/resources/META-INF/services/org/apache/camel/TypeConverterLoader
index ca2f6674b61..bfbe4d1afcb 100644
--- 
a/components/camel-hyperledger-aries/src/generated/resources/META-INF/services/org/apache/camel/TypeConverterLoader
+++ 
b/components/camel-hyperledger-aries/src/generated/resources/META-INF/services/org/apache/camel/TypeConverterLoader
@@ -13,6 +13,7 @@ 
org.apache.camel.converter.aries.RevRegCreateRequestConverterLoader
 org.apache.camel.converter.aries.RevokeRequestConverterLoader
 org.apache.camel.converter.aries.SchemaSendRequestConverterLoader
 org.apache.camel.converter.aries.SchemasCreatedFilterConverterLoader
+org.apache.camel.converter.aries.V1CredentialExchangeConverterLoader
 org.apache.camel.converter.aries.V1CredentialFreeOfferRequestConverterLoader
 org.apache.camel.converter.aries.V1CredentialIssueRequestConverterLoader
 org.apache.camel.converter.aries.V1CredentialStoreRequestConverterLoader
diff --git 
a/components/camel-hyperledger-aries/src/generated/resources/org/apache/camel/component/aries/hyperledger-aries.json
 
b/components/camel-hyperledger-aries/src/generated/resources/org/apache/camel/component/aries/hyperledger-aries.json
index d530f00cc8f..d90a09c2e18 100644
--- 
a/components/camel-hyperledger-aries/src/generated/resources/org/apache/camel/component/aries/hyperledger-aries.json
+++ 
b/components/camel-hyperledger-aries/src/generated/resources/org/apache/camel/component/aries/hyperledger-aries.json
@@ -31,7 +31,7 @@
     "autoSchema": { "kind": "parameter", "displayName": "Auto Schema", 
"group": "producer", "label": "", "required": false, "type": "boolean", 
"javaType": "boolean", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "defaultValue": false, "configurationClass": 
"org.apache.camel.component.aries.HyperledgerAriesConfiguration", 
"configurationField": "configuration", "description": "Allow on-demand schema 
creation" },
     "schemaName": { "kind": "parameter", "displayName": "Schema Name", 
"group": "producer", "label": "", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.aries.HyperledgerAriesConfiguration", 
"configurationField": "configuration", "description": "A schema name" },
     "schemaVersion": { "kind": "parameter", "displayName": "Schema Version", 
"group": "producer", "label": "", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", 
"autowired": false, "secret": false, "configurationClass": 
"org.apache.camel.component.aries.HyperledgerAriesConfiguration", 
"configurationField": "configuration", "description": "A schema version" },
-    "service": { "kind": "parameter", "displayName": "Service", "group": 
"producer", "label": "", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.aries.HyperledgerAriesConfiguration", 
"configurationField": "configuration", "description": "An ACA-Py API path" },
+    "service": { "kind": "parameter", "displayName": "Service", "group": 
"producer", "label": "", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": 
false, "secret": false, "configurationClass": 
"org.apache.camel.component.aries.HyperledgerAriesConfiguration", 
"configurationField": "configuration", "description": "An API path (e.g. 
\/issue-credential\/records)" },
     "lazyStartProducer": { "kind": "parameter", "displayName": "Lazy Start 
Producer", "group": "producer (advanced)", "label": "producer,advanced", 
"required": false, "type": "boolean", "javaType": "boolean", "deprecated": 
false, "autowired": false, "secret": false, "defaultValue": false, 
"description": "Whether the producer should be started lazy (on the first 
message). By starting lazy you can use this to allow CamelContext and routes to 
startup in situations where a producer may other [...]
   }
 }
diff --git 
a/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/HyperledgerAriesComponent.java
 
b/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/HyperledgerAriesComponent.java
index 969a463d3eb..a50d1b73b6d 100644
--- 
a/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/HyperledgerAriesComponent.java
+++ 
b/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/HyperledgerAriesComponent.java
@@ -24,6 +24,7 @@ import io.nessus.aries.AgentConfiguration;
 import io.nessus.aries.AriesClientFactory;
 import io.nessus.aries.util.AssertArg;
 import io.nessus.aries.util.AssertState;
+import io.nessus.aries.wallet.DefaultEventHandler;
 import io.nessus.aries.wallet.NessusWallet;
 import io.nessus.aries.wallet.WalletRegistry;
 import org.apache.camel.Endpoint;
@@ -33,16 +34,24 @@ import org.apache.camel.support.DefaultComponent;
 import org.hyperledger.aries.AriesClient;
 import org.hyperledger.aries.AriesWebSocketClient;
 import org.hyperledger.aries.api.multitenancy.WalletRecord;
+import org.hyperledger.aries.api.multitenancy.WalletRecord.WalletSettings;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 @Component("hyperledger-aries")
 public class HyperledgerAriesComponent extends DefaultComponent {
 
+    private static final Logger LOG = 
LoggerFactory.getLogger(HyperledgerAriesComponent.class);
+
     private final WalletRegistry walletRegistry = new WalletRegistry();
     private AgentConfiguration agentConfig;
 
     @Metadata(description = "Remove wallets from the Agent on shutdown")
     private boolean removeWalletsOnShutdown;
 
+    private AriesClient adminClient;
+    private AriesWebSocketClient adminWebSocketClient;
+
     @Override
     protected Endpoint createEndpoint(String uri, String remaining, 
Map<String, Object> parameters) throws Exception {
         HyperledgerAriesConfiguration configuration = new 
HyperledgerAriesConfiguration();
@@ -64,6 +73,9 @@ public class HyperledgerAriesComponent extends 
DefaultComponent {
 
     @Override
     protected void doShutdown() throws Exception {
+        if (adminWebSocketClient != null) {
+            adminWebSocketClient.close();
+        }
         if (removeWalletsOnShutdown) {
             for (NessusWallet wallet : walletRegistry.getWallets()) {
                 wallet.closeAndRemove();
@@ -95,33 +107,42 @@ public class HyperledgerAriesComponent extends 
DefaultComponent {
     }
 
     public NessusWallet getWallet(String walletName) {
-        return walletRegistry.getWalletByName(walletName);
-    }
-
-    public NessusWallet getWallet(String walletName, long timeout) {
-        timeout = System.currentTimeMillis() + timeout;
-        NessusWallet walletRecord = walletRegistry.getWalletByName(walletName);
-        while (walletRecord == null && System.currentTimeMillis() < timeout) {
-            NessusWallet.sleepWell(200);
-            walletRecord = walletRegistry.getWalletByName(walletName);
-        }
-        return walletRecord;
+        NessusWallet wallet = walletRegistry.getWalletByName(walletName);
+        return wallet;
     }
 
     public NessusWallet assertWallet(String walletName) {
-        NessusWallet wallet = walletRegistry.getWalletByName(walletName);
+        NessusWallet wallet = getWallet(walletName);
         AssertState.notNull(wallet, "Cannot obtain wallet for: " + walletName);
         return wallet;
     }
 
-    public AriesWebSocketClient getWebSocketClient(String walletName) {
-        NessusWallet wallet = assertWallet(walletName);
-        return wallet.getWebSocketClient();
+    public AriesClient adminClient() {
+        if (adminClient == null) {
+            AgentConfiguration agentConfig = getAgentConfiguration();
+            adminClient = AriesClientFactory.adminClient(agentConfig);
+        }
+        return adminClient;
     }
 
-    public AriesClient createAdminClient() {
-        AgentConfiguration agentConfig = getAgentConfiguration();
-        return AriesClientFactory.adminClient(agentConfig);
+    public AriesWebSocketClient adminWebSocketClient() {
+        if (adminWebSocketClient == null) {
+            WalletSettings settings = new WalletSettings();
+            settings.setWalletName("admin");
+            WalletRecord adminRecord = NessusWallet.builder()
+                    .walletId("00000000")
+                    .settings(settings)
+                    .build();
+            NessusWallet adminWallet = NessusWallet.build(adminRecord);
+            String webSocketUrl = agentConfig.getWebSocketUrl();
+            LOG.info("WebSocket connecting to {} ...", webSocketUrl);
+            adminWebSocketClient = AriesWebSocketClient.builder()
+                    .url(webSocketUrl)
+                    .handler(new DefaultEventHandler(adminWallet, 
walletRegistry))
+                    .apiKey(agentConfig.getApiKey())
+                    .build();
+        }
+        return adminWebSocketClient;
     }
 
     public AriesClient createClient(WalletRecord walletRecord) throws 
IOException {
@@ -129,4 +150,9 @@ public class HyperledgerAriesComponent extends 
DefaultComponent {
         AgentConfiguration agentConfig = getAgentConfiguration();
         return AriesClientFactory.createClient(walletRecord, agentConfig);
     }
+
+    public AriesWebSocketClient getWebSocketClient(String walletName) {
+        NessusWallet wallet = assertWallet(walletName);
+        return wallet.getWebSocketClient();
+    }
 }
diff --git 
a/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/HyperledgerAriesConfiguration.java
 
b/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/HyperledgerAriesConfiguration.java
index c0e3d76466f..f8bd3b23a4c 100644
--- 
a/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/HyperledgerAriesConfiguration.java
+++ 
b/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/HyperledgerAriesConfiguration.java
@@ -27,7 +27,7 @@ public class HyperledgerAriesConfiguration {
     @UriPath(description = "The wallet to connect to")
     @Metadata(required = true)
     private String walletName;
-    @UriParam(description = "An ACA-Py API path")
+    @UriParam(description = "An API path (e.g. /issue-credential/records)")
     @Metadata(required = false)
     private String service;
     @UriParam(description = "A schema name")
diff --git 
a/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/HyperledgerAriesEndpoint.java
 
b/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/HyperledgerAriesEndpoint.java
index 9a6bed4f237..ca70a69303c 100644
--- 
a/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/HyperledgerAriesEndpoint.java
+++ 
b/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/HyperledgerAriesEndpoint.java
@@ -69,12 +69,12 @@ public class HyperledgerAriesEndpoint extends 
DefaultEndpoint {
     }
 
     public AriesClient createClient() throws IOException {
+        NessusWallet wallet = getWallet();
         String walletName = getWalletName();
-        NessusWallet walletRecord = getComponent().getWallet(walletName);
-        if ("admin".equals(walletName) && walletRecord == null) {
-            return getComponent().createAdminClient();
+        if (wallet == null && "admin".equals(walletName)) {
+            return getComponent().adminClient();
         } else {
-            return getComponent().createClient(walletRecord);
+            return getComponent().createClient(wallet);
         }
     }
 }
diff --git 
a/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/HyperledgerAriesProducer.java
 
b/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/HyperledgerAriesProducer.java
index f816ebdb514..fde9b513ef5 100644
--- 
a/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/HyperledgerAriesProducer.java
+++ 
b/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/HyperledgerAriesProducer.java
@@ -21,7 +21,8 @@ import org.apache.camel.Exchange;
 import org.apache.camel.component.aries.handler.AbstractServiceHandler;
 import org.apache.camel.component.aries.handler.ConnectionsServiceHandler;
 import 
org.apache.camel.component.aries.handler.CredentialDefinitionsServiceHandler;
-import org.apache.camel.component.aries.handler.IssueCredentialServiceHandler;
+import org.apache.camel.component.aries.handler.CredentialsServiceHandler;
+import 
org.apache.camel.component.aries.handler.IssueCredentialV1ServiceHandler;
 import org.apache.camel.component.aries.handler.MultitenancyServiceHandler;
 import org.apache.camel.component.aries.handler.PresentProofServiceHandler;
 import org.apache.camel.component.aries.handler.RevocationServiceHandler;
@@ -50,20 +51,31 @@ public class HyperledgerAriesProducer extends 
DefaultProducer {
         String service = getService(exchange);
         if (service.startsWith("/connections")) {
             serviceHandler = new ConnectionsServiceHandler(getEndpoint());
+
         } else if (service.startsWith("/credential-definitions")) {
             serviceHandler = new 
CredentialDefinitionsServiceHandler(getEndpoint());
+
+        } else if (service.startsWith("/credentials")) {
+            serviceHandler = new CredentialsServiceHandler(getEndpoint());
+
         } else if (service.startsWith("/issue-credential")) {
-            serviceHandler = new IssueCredentialServiceHandler(getEndpoint());
+            serviceHandler = new 
IssueCredentialV1ServiceHandler(getEndpoint());
+
         } else if (service.startsWith("/multitenancy")) {
             serviceHandler = new MultitenancyServiceHandler(getEndpoint());
+
         } else if (service.startsWith("/present-proof")) {
             serviceHandler = new PresentProofServiceHandler(getEndpoint());
+
         } else if (service.startsWith("/revocation")) {
             serviceHandler = new RevocationServiceHandler(getEndpoint());
+
         } else if (service.startsWith("/schemas")) {
             serviceHandler = new SchemasServiceHandler(getEndpoint());
+
         } else if (service.startsWith("/wallet")) {
             serviceHandler = new WalletServiceHandler(getEndpoint());
+
         } else {
             throw new UnsupportedServiceException(service);
         }
diff --git 
a/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/handler/AbstractServiceHandler.java
 
b/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/handler/AbstractServiceHandler.java
index 58c231c2a88..8e16888a3b6 100644
--- 
a/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/handler/AbstractServiceHandler.java
+++ 
b/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/handler/AbstractServiceHandler.java
@@ -112,8 +112,8 @@ public abstract class AbstractServiceHandler implements 
ServiceHandler {
         return endpoint.getComponent();
     }
 
-    public AriesClient baseClient() {
-        return getComponent().createAdminClient();
+    public AriesClient adminClient() {
+        return getComponent().adminClient();
     }
 
     public AriesClient createClient() throws IOException {
diff --git 
a/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/handler/ConnectionsServiceHandler.java
 
b/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/handler/ConnectionsServiceHandler.java
index 9a440d2db2e..418c3e9b854 100644
--- 
a/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/handler/ConnectionsServiceHandler.java
+++ 
b/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/handler/ConnectionsServiceHandler.java
@@ -16,16 +16,22 @@
  */
 package org.apache.camel.component.aries.handler;
 
+import java.util.List;
+
+import io.nessus.aries.util.AssertState;
 import org.apache.camel.Exchange;
 import org.apache.camel.component.aries.HyperledgerAriesEndpoint;
 import org.apache.camel.component.aries.UnsupportedServiceException;
 import org.hyperledger.acy_py.generated.model.ConnectionInvitation;
 import org.hyperledger.aries.api.connection.ConnectionAcceptInvitationFilter;
+import org.hyperledger.aries.api.connection.ConnectionFilter;
 import org.hyperledger.aries.api.connection.ConnectionReceiveInvitationFilter;
 import org.hyperledger.aries.api.connection.ConnectionRecord;
 import org.hyperledger.aries.api.connection.CreateInvitationRequest;
 import org.hyperledger.aries.api.connection.CreateInvitationResponse;
 import org.hyperledger.aries.api.connection.ReceiveInvitationRequest;
+import org.hyperledger.aries.api.trustping.PingRequest;
+import org.hyperledger.aries.api.trustping.PingResponse;
 
 public class ConnectionsServiceHandler extends AbstractServiceHandler {
 
@@ -36,7 +42,12 @@ public class ConnectionsServiceHandler extends 
AbstractServiceHandler {
     @Override
     public void process(Exchange exchange, String service) throws Exception {
 
-        if (service.equals("/connections/create-invitation")) {
+        if (service.equals("/connections")) {
+            ConnectionFilter filter = maybeHeader(exchange, 
ConnectionFilter.class);
+            List<ConnectionRecord> resObj = 
createClient().connections(filter).get();
+            exchange.getIn().setBody(resObj);
+
+        } else if (service.equals("/connections/create-invitation")) {
             CreateInvitationRequest reqObj = maybeBody(exchange, 
CreateInvitationRequest.class);
             if (reqObj == null) {
                 reqObj = CreateInvitationRequest.builder().build();
@@ -57,16 +68,28 @@ public class ConnectionsServiceHandler extends 
AbstractServiceHandler {
             ConnectionRecord resObj = 
createClient().connectionsReceiveInvitation(reqObj, filter).get();
             exchange.getIn().setBody(resObj);
 
-        } else if (service.equals("/connections/accept-invitation")) {
-            String connectionId = assertBody(exchange, String.class);
-            ConnectionAcceptInvitationFilter acceptFilter = 
maybeHeader(exchange, ConnectionAcceptInvitationFilter.class);
-            ConnectionRecord resObj = 
createClient().connectionsAcceptInvitation(connectionId, acceptFilter).get();
-            exchange.getIn().setBody(resObj);
+        } else if (service.startsWith("/connections/")) {
 
-        } else if (service.equals("/connections/get-single")) {
-            String connectionId = assertBody(exchange, String.class);
-            ConnectionRecord resObj = 
createClient().connectionsGetById(connectionId).get();
-            exchange.getIn().setBody(resObj);
+            String connectionId = getServicePathToken(service, 1);
+            AssertState.notNull(connectionId, "Null connectionId");
+
+            if (service.endsWith("/accept-invitation")) {
+                ConnectionAcceptInvitationFilter acceptFilter = 
maybeHeader(exchange, ConnectionAcceptInvitationFilter.class);
+                ConnectionRecord resObj = 
createClient().connectionsAcceptInvitation(connectionId, acceptFilter).get();
+                exchange.getIn().setBody(resObj);
+
+            } else if (service.endsWith("/send-ping")) {
+                PingRequest pingRequest = assertBody(exchange, 
PingRequest.class);
+                PingResponse resObj = 
createClient().connectionsSendPing(connectionId, pingRequest).get();
+                exchange.getIn().setBody(resObj);
+
+            } else if (service.endsWith(connectionId)) {
+                ConnectionRecord resObj = 
createClient().connectionsGetById(connectionId).orElse(null);
+                exchange.getIn().setBody(resObj);
+
+            } else {
+                throw new UnsupportedServiceException(service);
+            }
 
         } else {
             throw new UnsupportedServiceException(service);
diff --git 
a/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/handler/CredentialDefinitionsServiceHandler.java
 
b/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/handler/CredentialDefinitionsServiceHandler.java
index c148a9c28b2..0aeee9d7ab4 100644
--- 
a/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/handler/CredentialDefinitionsServiceHandler.java
+++ 
b/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/handler/CredentialDefinitionsServiceHandler.java
@@ -45,6 +45,7 @@ public class CredentialDefinitionsServiceHandler extends 
AbstractServiceHandler
     @SuppressWarnings("unchecked")
     @Override
     public void process(Exchange exchange, String service) throws Exception {
+
         if (service.equals("/credential-definitions/created")) {
             CredentialDefinitionFilter filter = maybeBody(exchange, 
CredentialDefinitionFilter.class);
             if (filter == null) {
@@ -63,6 +64,7 @@ public class CredentialDefinitionsServiceHandler extends 
AbstractServiceHandler
             }
             CredentialDefinitionsCreated resObj = 
createClient().credentialDefinitionsCreated(filter).get();
             exchange.getIn().setBody(resObj);
+
         } else if (service.equals("/credential-definitions")) {
             CredentialDefinitionRequest credDefReq = maybeBody(exchange, 
CredentialDefinitionRequest.class);
             if (credDefReq == null) {
diff --git 
a/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/handler/WalletServiceHandler.java
 
b/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/handler/CredentialsServiceHandler.java
similarity index 75%
copy from 
components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/handler/WalletServiceHandler.java
copy to 
components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/handler/CredentialsServiceHandler.java
index c6198cecbab..cf33f1a8afa 100644
--- 
a/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/handler/WalletServiceHandler.java
+++ 
b/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/handler/CredentialsServiceHandler.java
@@ -16,22 +16,26 @@
  */
 package org.apache.camel.component.aries.handler;
 
+import java.util.List;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.component.aries.HyperledgerAriesEndpoint;
 import org.apache.camel.component.aries.UnsupportedServiceException;
-import org.hyperledger.acy_py.generated.model.DID;
+import org.hyperledger.aries.api.credentials.Credential;
 
-public class WalletServiceHandler extends AbstractServiceHandler {
+public class CredentialsServiceHandler extends AbstractServiceHandler {
 
-    public WalletServiceHandler(HyperledgerAriesEndpoint endpoint) {
+    public CredentialsServiceHandler(HyperledgerAriesEndpoint endpoint) {
         super(endpoint);
     }
 
     @Override
     public void process(Exchange exchange, String service) throws Exception {
-        if (service.equals("/wallet/did/public")) {
-            DID resObj = createClient().walletDidPublic().orElse(null);
-            exchange.getIn().setBody(resObj);
+
+        if (service.equals("/credentials")) {
+            List<Credential> credentials = adminClient().credentials().get();
+            exchange.getIn().setBody(credentials);
+
         } else {
             throw new UnsupportedServiceException(service);
         }
diff --git 
a/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/handler/IssueCredentialServiceHandler.java
 
b/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/handler/IssueCredentialV1ServiceHandler.java
similarity index 90%
rename from 
components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/handler/IssueCredentialServiceHandler.java
rename to 
components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/handler/IssueCredentialV1ServiceHandler.java
index 6d8e99b837c..56cbbfac88e 100644
--- 
a/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/handler/IssueCredentialServiceHandler.java
+++ 
b/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/handler/IssueCredentialV1ServiceHandler.java
@@ -18,6 +18,7 @@ package org.apache.camel.component.aries.handler;
 
 import java.util.List;
 
+import io.nessus.aries.util.AssertState;
 import org.apache.camel.Exchange;
 import org.apache.camel.component.aries.HyperledgerAriesEndpoint;
 import org.apache.camel.component.aries.UnsupportedServiceException;
@@ -28,39 +29,49 @@ import 
org.hyperledger.aries.api.issue_credential_v1.V1CredentialIssueRequest;
 import org.hyperledger.aries.api.issue_credential_v1.V1CredentialOfferRequest;
 import org.hyperledger.aries.api.issue_credential_v1.V1CredentialStoreRequest;
 
-public class IssueCredentialServiceHandler extends AbstractServiceHandler {
+public class IssueCredentialV1ServiceHandler extends AbstractServiceHandler {
 
-    public IssueCredentialServiceHandler(HyperledgerAriesEndpoint endpoint) {
+    public IssueCredentialV1ServiceHandler(HyperledgerAriesEndpoint endpoint) {
         super(endpoint);
     }
 
     @Override
     public void process(Exchange exchange, String service) throws Exception {
+
         if (service.equals("/issue-credential/create-offer")) {
             V1CredentialFreeOfferRequest reqObj = assertBody(exchange, 
V1CredentialFreeOfferRequest.class);
             V1CredentialExchange resObj = 
createClient().issueCredentialCreateOffer(reqObj).get();
             exchange.getIn().setBody(resObj);
+
         } else if (service.equals("/issue-credential/send-offer")) {
             V1CredentialOfferRequest reqObj = assertBody(exchange, 
V1CredentialOfferRequest.class);
             V1CredentialExchange resObj = 
createClient().issueCredentialSendOffer(reqObj).get();
             exchange.getIn().setBody(resObj);
+
         } else if (service.equals("/issue-credential/records")) {
             IssueCredentialRecordsFilter reqObj = assertBody(exchange, 
IssueCredentialRecordsFilter.class);
             List<V1CredentialExchange> resObj = 
createClient().issueCredentialRecords(reqObj).get();
             exchange.getIn().setBody(resObj);
-        } else if (service.startsWith("/issue-credential/records")) {
+
+        } else if (service.startsWith("/issue-credential/records/")) {
+
             String credentialExchangeId = getServicePathToken(service, 2);
+            AssertState.notNull(credentialExchangeId, "Null 
credentialExchangeId");
+
             if (service.endsWith("/send-request")) {
                 V1CredentialExchange resObj = 
createClient().issueCredentialRecordsSendRequest(credentialExchangeId).get();
                 exchange.getIn().setBody(resObj);
+
             } else if (service.endsWith("/issue")) {
-                V1CredentialIssueRequest reqObj = maybeBody(exchange, 
V1CredentialIssueRequest.class);
+                V1CredentialIssueRequest reqObj = maybeHeader(exchange, 
V1CredentialIssueRequest.class);
                 V1CredentialExchange resObj = 
createClient().issueCredentialRecordsIssue(credentialExchangeId, reqObj).get();
                 exchange.getIn().setBody(resObj);
+
             } else if (service.endsWith("/store")) {
                 V1CredentialStoreRequest reqObj = maybeBody(exchange, 
V1CredentialStoreRequest.class);
                 V1CredentialExchange resObj = 
createClient().issueCredentialRecordsStore(credentialExchangeId, reqObj).get();
                 exchange.getIn().setBody(resObj);
+
             } else {
                 throw new UnsupportedServiceException(service);
             }
diff --git 
a/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/handler/MultitenancyServiceHandler.java
 
b/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/handler/MultitenancyServiceHandler.java
index d555760cdec..a2406b6dc21 100644
--- 
a/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/handler/MultitenancyServiceHandler.java
+++ 
b/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/handler/MultitenancyServiceHandler.java
@@ -45,6 +45,7 @@ public class MultitenancyServiceHandler extends 
AbstractServiceHandler {
 
     @Override
     public void process(Exchange exchange, String service) throws Exception {
+
         if (service.equals("/multitenancy/wallet")) {
             CreateWalletRequest walletRequest = assertBody(exchange, 
CreateWalletRequest.class);
             String walletName = walletRequest.getWalletName();
@@ -54,7 +55,7 @@ public class MultitenancyServiceHandler extends 
AbstractServiceHandler {
             String trusteeName = maybeHeader(exchange, 
HEADER_MULTITENANCY_TRUSTEE_WALLET, String.class);
 
             WalletRegistry walletRegistry = getComponent().getWalletRegistry();
-            WalletRecord walletResponse = 
baseClient().multitenancyWalletCreate(walletRequest).get();
+            WalletRecord walletResponse = 
adminClient().multitenancyWalletCreate(walletRequest).get();
             NessusWallet walletRecord = 
NessusWallet.build(walletResponse).withWalletRegistry(walletRegistry);
             getComponent().addWallet(walletRecord);
 
diff --git 
a/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/handler/PresentProofServiceHandler.java
 
b/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/handler/PresentProofServiceHandler.java
index c5d14333653..1a4a3115f16 100644
--- 
a/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/handler/PresentProofServiceHandler.java
+++ 
b/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/handler/PresentProofServiceHandler.java
@@ -35,26 +35,32 @@ public class PresentProofServiceHandler extends 
AbstractServiceHandler {
 
     @Override
     public void process(Exchange exchange, String service) throws Exception {
+
         if (service.equals("/present-proof/send-request")) {
             PresentProofRequest reqObj = assertBody(exchange, 
PresentProofRequest.class);
             PresentationExchangeRecord resObj = 
createClient().presentProofSendRequest(reqObj).get();
             exchange.getIn().setBody(resObj);
+
         } else if (service.startsWith("/present-proof/records/")) {
+
             String presentationExchangeId = getServicePathToken(service, 2);
             if (service.endsWith("/credentials")) {
                 PresentationRequestCredentialsFilter reqObj = 
assertBody(exchange, PresentationRequestCredentialsFilter.class);
                 List<PresentationRequestCredentials> resObj
                         = 
createClient().presentProofRecordsCredentials(presentationExchangeId, 
reqObj).get();
                 exchange.getIn().setBody(resObj);
+
             } else if (service.endsWith("/send-presentation")) {
                 PresentationRequest reqObj = assertBody(exchange, 
PresentationRequest.class);
                 PresentationExchangeRecord resObj
                         = 
createClient().presentProofRecordsSendPresentation(presentationExchangeId, 
reqObj).get();
                 exchange.getIn().setBody(resObj);
+
             } else if (service.endsWith("/verify-presentation")) {
                 PresentationExchangeRecord resObj
                         = 
createClient().presentProofRecordsVerifyPresentation(presentationExchangeId).get();
                 exchange.getIn().setBody(resObj);
+
             } else {
                 throw new UnsupportedServiceException(service);
             }
diff --git 
a/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/handler/RevocationServiceHandler.java
 
b/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/handler/RevocationServiceHandler.java
index c08ad1989af..c0261e6ce03 100644
--- 
a/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/handler/RevocationServiceHandler.java
+++ 
b/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/handler/RevocationServiceHandler.java
@@ -32,14 +32,17 @@ public class RevocationServiceHandler extends 
AbstractServiceHandler {
 
     @Override
     public void process(Exchange exchange, String service) throws Exception {
+
         if (service.equals("/revocation/create-registry")) {
             RevRegCreateRequest reqObj = assertBody(exchange, 
RevRegCreateRequest.class);
             IssuerRevRegRecord resObj = 
createClient().revocationCreateRegistry(reqObj).get();
             exchange.getIn().setBody(resObj);
+
         } else if (service.equals("/revocation/revoke")) {
             RevokeRequest reqObj = assertBody(exchange, RevokeRequest.class);
             RevocationModuleResponse resObj = 
createClient().revocationRevoke(reqObj).get();
             exchange.getIn().setBody(resObj);
+
         } else {
             throw new UnsupportedServiceException(service);
         }
diff --git 
a/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/handler/SchemasServiceHandler.java
 
b/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/handler/SchemasServiceHandler.java
index 06998a5c9cb..fed91cce710 100644
--- 
a/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/handler/SchemasServiceHandler.java
+++ 
b/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/handler/SchemasServiceHandler.java
@@ -30,6 +30,7 @@ public class SchemasServiceHandler extends 
AbstractServiceHandler {
 
     @Override
     public void process(Exchange exchange, String service) throws Exception {
+
         if (service.equals("/schemas")) {
             SchemaSendRequest schemaReq = assertBody(exchange, 
SchemaSendRequest.class);
             if (schemaReq.getSchemaName() == null) {
@@ -40,6 +41,7 @@ public class SchemasServiceHandler extends 
AbstractServiceHandler {
             }
             SchemaSendResponse resObj = 
createClient().schemas(schemaReq).get();
             exchange.getIn().setBody(resObj);
+
         } else {
             throw new UnsupportedServiceException(service);
         }
diff --git 
a/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/handler/WalletServiceHandler.java
 
b/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/handler/WalletServiceHandler.java
index c6198cecbab..79f6c5d1937 100644
--- 
a/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/handler/WalletServiceHandler.java
+++ 
b/components/camel-hyperledger-aries/src/main/java/org/apache/camel/component/aries/handler/WalletServiceHandler.java
@@ -29,9 +29,11 @@ public class WalletServiceHandler extends 
AbstractServiceHandler {
 
     @Override
     public void process(Exchange exchange, String service) throws Exception {
+
         if (service.equals("/wallet/did/public")) {
             DID resObj = createClient().walletDidPublic().orElse(null);
             exchange.getIn().setBody(resObj);
+
         } else {
             throw new UnsupportedServiceException(service);
         }
diff --git 
a/components/camel-hyperledger-aries/src/main/java/org/apache/camel/converter/aries/V1CredentialExchangeConverter.java
 
b/components/camel-hyperledger-aries/src/main/java/org/apache/camel/converter/aries/V1CredentialExchangeConverter.java
new file mode 100644
index 00000000000..adc94256227
--- /dev/null
+++ 
b/components/camel-hyperledger-aries/src/main/java/org/apache/camel/converter/aries/V1CredentialExchangeConverter.java
@@ -0,0 +1,54 @@
+/*
+ * 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.converter.aries;
+
+import java.util.Map;
+
+import com.google.gson.JsonObject;
+import org.apache.camel.Converter;
+import org.hyperledger.aries.api.issue_credential_v1.V1CredentialExchange;
+
+@Converter(generateLoader = true)
+public final class V1CredentialExchangeConverter extends 
AbstractAriesConverter {
+
+    @Converter
+    public static V1CredentialExchange toAries(JsonObject jsonObj) {
+        return toAries(jsonObj, V1CredentialExchange.class);
+    }
+
+    @Converter
+    public static V1CredentialExchange toAries(String json) {
+        return toAries(json, V1CredentialExchange.class);
+    }
+
+    @Converter
+    public static V1CredentialExchange toAries(Map<String, Object> map) {
+        return toAries(map, V1CredentialExchange.class);
+    }
+
+    @Converter
+    public static JsonObject toJsonObject(V1CredentialExchange item) {
+        return (JsonObject) GSON.toJsonTree(item, V1CredentialExchange.class);
+    }
+
+    @Converter
+    @SuppressWarnings("unchecked")
+    public static Map<String, Object> toMap(V1CredentialExchange item) {
+        JsonObject json = toJsonObject(item);
+        return GSON.fromJson(json, Map.class);
+    }
+}

Reply via email to