You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2021/08/24 04:37:32 UTC

[camel] branch main updated: CAMEL-16876: Add Create and Update instance to DMS (#5979)

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 e934065  CAMEL-16876: Add Create and Update instance to DMS (#5979)
e934065 is described below

commit e9340659c7b0574a5134a045e88abb40e25e7ba7
Author: Hokutor <hw...@huawei.com>
AuthorDate: Tue Aug 24 00:35:50 2021 -0400

    CAMEL-16876: Add Create and Update instance to DMS (#5979)
---
 .../src/main/docs/hwcloud-dms-component.adoc       |  19 +-
 .../component/huaweicloud/dms/DMSEndpoint.java     | 194 ++++++++
 .../component/huaweicloud/dms/DMSProducer.java     | 259 ++++++++++
 .../camel/component/huaweicloud/dms/DmsClient.java |  12 +
 .../camel/component/huaweicloud/dms/DmsMeta.java   |  52 ++
 .../{DMSOperations.java => DMSConstants.java}      |  11 +-
 .../huaweicloud/dms/constants/DMSOperations.java   |   2 +
 .../huaweicloud/dms/constants/DMSProperties.java   |  16 +
 .../dms/models/ClientConfigurations.java           | 136 ++++++
 ...figurations.java => CreateInstanceRequest.java} |  45 +-
 .../dms/models/CreateInstanceRequestBody.java      | 529 +++++++++++++++++++++
 ...igurations.java => CreateInstanceResponse.java} |  40 +-
 ...figurations.java => UpdateInstanceRequest.java} |  51 +-
 .../dms/models/UpdateInstanceRequestBody.java      | 158 ++++++
 .../UpdateInstanceResponse.java}                   |  16 +-
 .../huaweicloud/dms/CreateInstanceJsonTest.java    | 106 +++++
 .../huaweicloud/dms/CreateInstanceKafkaTest1.java  | 100 ++++
 .../huaweicloud/dms/CreateInstanceKafkaTest2.java  | 104 ++++
 .../huaweicloud/dms/CreateInstancePojoTest.java    | 111 +++++
 .../huaweicloud/dms/CreateInstanceRmqTest1.java    |  97 ++++
 .../huaweicloud/dms/CreateInstanceRmqTest2.java    |  99 ++++
 .../huaweicloud/dms/TestConfiguration.java         |  21 +
 .../huaweicloud/dms/UpdateInstanceJsonTest.java    |  85 ++++
 .../huaweicloud/dms/UpdateInstancePojoTest.java    |  85 ++++
 ...MSOperationsTest.java => DMSConstantsTest.java} |   7 +-
 .../dms/constants/DMSOperationsTest.java           |   2 +
 .../dms/constants/DMSPropertiesTest.java           |  16 +
 27 files changed, 2288 insertions(+), 85 deletions(-)

diff --git a/components/camel-huawei/camel-huaweicloud-dms/src/main/docs/hwcloud-dms-component.adoc b/components/camel-huawei/camel-huaweicloud-dms/src/main/docs/hwcloud-dms-component.adoc
index 03b59ad..aaa64e0 100644
--- a/components/camel-huawei/camel-huaweicloud-dms/src/main/docs/hwcloud-dms-component.adoc
+++ b/components/camel-huawei/camel-huaweicloud-dms/src/main/docs/hwcloud-dms-component.adoc
@@ -107,18 +107,27 @@ with the following path and query parameters:
 |===
 
 
-=== Query Parameters (14 parameters):
+=== Query Parameters (29 parameters):
 
 
 [width="100%",cols="2,5,^1,2",options="header"]
 |===
 | Name | Description | Default | Type
+| *accessUser* (producer) | The username of a RabbitMQ instance. This option is mandatory when creating a RabbitMQ instance. |  | String
 | *authenticationKey* (producer) | *Required* Authentication key for the cloud user |  | String
+| *availableZones* (producer) | The ID of an available zone. This option is mandatory when creating an instance and it cannot be an empty array. |  | List
 | *endpoint* (producer) | DMS url. Carries higher precedence than region parameter based client initialization |  | String
 | *engine* (producer) | The message engine. Either kafka or rabbitmq. If the parameter is not specified, all instances will be queried. There are 2 enums and the value can be one of: kafka, rabbitmq |  | String
+| *engineVersion* (producer) | The version of the message engine. This option is mandatory when creating a Kafka instance. |  | String
 | *ignoreSslVerification* (producer) | Ignore SSL verification | false | boolean
 | *instanceId* (producer) | The id of the instance. This option is mandatory when deleting or querying an instance |  | String
+| *kafkaManagerPassword* (producer) | The password for logging in to the Kafka Manager. This option is mandatory when creating a Kafka instance. |  | String
+| *kafkaManagerUser* (producer) | The username for logging in to the Kafka Manager. This option is mandatory when creating a Kafka instance. |  | String
 | *lazyStartProducer* (producer) | 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 otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and [...]
+| *name* (producer) | The name of the instance for creating and updating an instance. This option is mandatory when creating an instance |  | String
+| *partitionNum* (producer) | The maximum number of partitions in a Kafka instance. This option is mandatory when creating a Kafka instance. |  | int
+| *password* (producer) | The password of a RabbitMQ instance. This option is mandatory when creating a RabbitMQ instance. |  | String
+| *productId* (producer) | The product ID. This option is mandatory when creating an instance. |  | String
 | *projectId* (producer) | *Required* Cloud project ID |  | String
 | *proxyHost* (producer) | Proxy server ip/hostname |  | String
 | *proxyPassword* (producer) | Proxy authentication password |  | String
@@ -126,7 +135,13 @@ with the following path and query parameters:
 | *proxyUser* (producer) | Proxy authentication user |  | String
 | *region* (producer) | *Required* DMS service region |  | String
 | *secretKey* (producer) | *Required* Secret key for the cloud user |  | String
+| *securityGroupId* (producer) | The security group which the instance belongs to. This option is mandatory when creating an instance. |  | String
 | *serviceKeys* (producer) | Configuration object for cloud service authentication |  | ServiceKeys
+| *specification* (producer) | The baseline bandwidth of a Kafka instance. This option is mandatory when creating a Kafka instance. |  | String
+| *storageSpace* (producer) | The message storage space. This option is mandatory when creating an instance. |  | int
+| *storageSpecCode* (producer) | The storage I/O specification. This option is mandatory when creating an instance. |  | String
+| *subnetId* (producer) | The subnet ID. This option is mandatory when creating an instance. |  | String
+| *vpcId* (producer) | The VPC ID. This option is mandatory when creating an instance. |  | String
 |===
 // endpoint options: END
 
@@ -151,9 +166,11 @@ If any of the above properties are set, they will override their corresponding q
 
 == List of Supported DMS Operations
 
+- createInstance
 - deleteInstance
 - listInstances
 - queryInstance
+- updateInstance
 
 == Using ServiceKey Configuration Bean
 
diff --git a/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/DMSEndpoint.java b/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/DMSEndpoint.java
index 7e8e7e9..40dc7d0 100644
--- a/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/DMSEndpoint.java
+++ b/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/DMSEndpoint.java
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.component.huaweicloud.dms;
 
+import java.util.List;
+
 import com.huaweicloud.sdk.core.auth.BasicCredentials;
 import com.huaweicloud.sdk.core.http.HttpConfig;
 import org.apache.camel.Category;
@@ -100,6 +102,78 @@ public class DMSEndpoint extends DefaultEndpoint {
     @Metadata(required = false)
     private String instanceId;
 
+    @UriParam(description = "The name of the instance for creating and updating an instance. This option is mandatory when creating an instance",
+              displayName = "Name")
+    @Metadata(required = false)
+    private String name;
+
+    @UriParam(description = "The version of the message engine. This option is mandatory when creating a Kafka instance.",
+              displayName = "Engine version")
+    @Metadata(required = false)
+    private String engineVersion;
+
+    @UriParam(description = "The baseline bandwidth of a Kafka instance. This option is mandatory when creating a Kafka instance.",
+              displayName = "Engine version")
+    @Metadata(required = false)
+    private String specification;
+
+    @UriParam(description = "The message storage space. This option is mandatory when creating an instance.",
+              displayName = "Storage space")
+    @Metadata(required = false)
+    private int storageSpace;
+
+    @UriParam(description = "The maximum number of partitions in a Kafka instance. This option is mandatory when creating a Kafka instance.",
+              displayName = "Partition Number")
+    @Metadata(required = false)
+    private int partitionNum;
+
+    @UriParam(description = "The username of a RabbitMQ instance. This option is mandatory when creating a RabbitMQ instance.",
+              displayName = "Access user")
+    @Metadata(required = false)
+    private String accessUser;
+
+    @UriParam(description = "The password of a RabbitMQ instance. This option is mandatory when creating a RabbitMQ instance.",
+              displayName = "Password")
+    @Metadata(required = false)
+    private String password;
+
+    @UriParam(description = "The VPC ID. This option is mandatory when creating an instance.", displayName = "VPC ID")
+    @Metadata(required = false)
+    private String vpcId;
+
+    @UriParam(description = "The security group which the instance belongs to. This option is mandatory when creating an instance.",
+              displayName = "Security group ID")
+    @Metadata(required = false)
+    private String securityGroupId;
+
+    @UriParam(description = "The subnet ID. This option is mandatory when creating an instance.", displayName = "Subnet ID")
+    @Metadata(required = false)
+    private String subnetId;
+
+    @UriParam(description = "The ID of an available zone. This option is mandatory when creating an instance and it cannot be an empty array.",
+              displayName = "Available zones")
+    @Metadata(required = false)
+    private List<String> availableZones;
+
+    @UriParam(description = "The product ID. This option is mandatory when creating an instance.", displayName = "Product ID")
+    @Metadata(required = false)
+    private String productId;
+
+    @UriParam(description = "The username for logging in to the Kafka Manager. This option is mandatory when creating a Kafka instance.",
+              displayName = "Kafka manager username")
+    @Metadata(required = false)
+    private String kafkaManagerUser;
+
+    @UriParam(description = "The password for logging in to the Kafka Manager. This option is mandatory when creating a Kafka instance.",
+              displayName = "Kafka manager password")
+    @Metadata(required = false)
+    private String kafkaManagerPassword;
+
+    @UriParam(description = "The storage I/O specification. This option is mandatory when creating an instance.",
+              displayName = "Storage specification code")
+    @Metadata(required = false)
+    private String storageSpecCode;
+
     private DmsClient dmsClient;
 
     public DMSEndpoint() {
@@ -230,6 +304,126 @@ public class DMSEndpoint extends DefaultEndpoint {
         this.instanceId = instanceId;
     }
 
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getEngineVersion() {
+        return engineVersion;
+    }
+
+    public void setEngineVersion(String engineVersion) {
+        this.engineVersion = engineVersion;
+    }
+
+    public String getSpecification() {
+        return specification;
+    }
+
+    public void setSpecification(String specification) {
+        this.specification = specification;
+    }
+
+    public int getStorageSpace() {
+        return storageSpace;
+    }
+
+    public void setStorageSpace(int storageSpace) {
+        this.storageSpace = storageSpace;
+    }
+
+    public int getPartitionNum() {
+        return partitionNum;
+    }
+
+    public void setPartitionNum(int partitionNum) {
+        this.partitionNum = partitionNum;
+    }
+
+    public String getAccessUser() {
+        return accessUser;
+    }
+
+    public void setAccessUser(String accessUser) {
+        this.accessUser = accessUser;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    public String getVpcId() {
+        return vpcId;
+    }
+
+    public void setVpcId(String vpcId) {
+        this.vpcId = vpcId;
+    }
+
+    public String getSecurityGroupId() {
+        return securityGroupId;
+    }
+
+    public void setSecurityGroupId(String securityGroupId) {
+        this.securityGroupId = securityGroupId;
+    }
+
+    public String getSubnetId() {
+        return subnetId;
+    }
+
+    public void setSubnetId(String subnetId) {
+        this.subnetId = subnetId;
+    }
+
+    public List<String> getAvailableZones() {
+        return availableZones;
+    }
+
+    public void setAvailableZones(List<String> availableZones) {
+        this.availableZones = availableZones;
+    }
+
+    public String getProductId() {
+        return productId;
+    }
+
+    public void setProductId(String productId) {
+        this.productId = productId;
+    }
+
+    public String getKafkaManagerUser() {
+        return kafkaManagerUser;
+    }
+
+    public void setKafkaManagerUser(String kafkaManagerUser) {
+        this.kafkaManagerUser = kafkaManagerUser;
+    }
+
+    public String getKafkaManagerPassword() {
+        return kafkaManagerPassword;
+    }
+
+    public void setKafkaManagerPassword(String kafkaManagerPassword) {
+        this.kafkaManagerPassword = kafkaManagerPassword;
+    }
+
+    public String getStorageSpecCode() {
+        return storageSpecCode;
+    }
+
+    public void setStorageSpecCode(String storageSpecCode) {
+        this.storageSpecCode = storageSpecCode;
+    }
+
     public DmsClient getDmsClient() {
         return dmsClient;
     }
diff --git a/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/DMSProducer.java b/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/DMSProducer.java
index 6cbb0d0..bc06246 100644
--- a/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/DMSProducer.java
+++ b/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/DMSProducer.java
@@ -16,18 +16,27 @@
  */
 package org.apache.camel.component.huaweicloud.dms;
 
+import java.util.List;
+
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.apache.camel.Exchange;
+import org.apache.camel.component.huaweicloud.dms.constants.DMSConstants;
 import org.apache.camel.component.huaweicloud.dms.constants.DMSOperations;
 import org.apache.camel.component.huaweicloud.dms.constants.DMSProperties;
 import org.apache.camel.component.huaweicloud.dms.models.ClientConfigurations;
+import org.apache.camel.component.huaweicloud.dms.models.CreateInstanceRequest;
+import org.apache.camel.component.huaweicloud.dms.models.CreateInstanceRequestBody;
+import org.apache.camel.component.huaweicloud.dms.models.CreateInstanceResponse;
 import org.apache.camel.component.huaweicloud.dms.models.DeleteInstanceRequest;
 import org.apache.camel.component.huaweicloud.dms.models.DeleteInstanceResponse;
 import org.apache.camel.component.huaweicloud.dms.models.DmsInstance;
 import org.apache.camel.component.huaweicloud.dms.models.ListInstancesRequest;
 import org.apache.camel.component.huaweicloud.dms.models.ListInstancesResponse;
 import org.apache.camel.component.huaweicloud.dms.models.QueryInstanceRequest;
+import org.apache.camel.component.huaweicloud.dms.models.UpdateInstanceRequest;
+import org.apache.camel.component.huaweicloud.dms.models.UpdateInstanceRequestBody;
+import org.apache.camel.component.huaweicloud.dms.models.UpdateInstanceResponse;
 import org.apache.camel.support.DefaultProducer;
 import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
@@ -57,6 +66,9 @@ public class DMSProducer extends DefaultProducer {
         updateClientConfigs(exchange);
 
         switch (clientConfigurations.getOperation()) {
+            case DMSOperations.CREATE_INSTANCE:
+                createInstance(exchange);
+                break;
             case DMSOperations.DELETE_INSTANCE:
                 deleteInstance(exchange);
                 break;
@@ -66,6 +78,9 @@ public class DMSProducer extends DefaultProducer {
             case DMSOperations.QUERY_INSTANCE:
                 queryInstance(exchange);
                 break;
+            case DMSOperations.UPDATE_INSTANCE:
+                updateInstance(exchange);
+                break;
             default:
                 throw new UnsupportedOperationException(
                         String.format("%s is not a supported operation", clientConfigurations.getOperation()));
@@ -73,6 +88,114 @@ public class DMSProducer extends DefaultProducer {
     }
 
     /**
+     * Perform create instance operation
+     *
+     * @param exchange
+     */
+    private void createInstance(Exchange exchange) throws JsonProcessingException {
+        CreateInstanceRequestBody body = null;
+
+        // checking if user inputted exchange body containing instance information. Body must be a CreateInstanceRequestBody or a valid JSON String (Advanced users)
+        Object exchangeBody = exchange.getMessage().getBody();
+        if (exchangeBody instanceof CreateInstanceRequestBody) {
+            body = (CreateInstanceRequestBody) exchangeBody;
+        } else if (exchangeBody instanceof String) {
+            String strBody = (String) exchangeBody;
+            try {
+                body = mapper.readValue(strBody, CreateInstanceRequestBody.class);
+            } catch (JsonProcessingException e) {
+                LOG.warn(
+                        "String request body must be a valid JSON representation of a CreateInstanceRequestBody. Attempting to create an instance from endpoint parameters");
+            }
+        }
+
+        // if no CreateInstanceRequestBody was found in the exchange body, then create an instance from the endpoint parameters (basic users)
+        if (body == null) {
+            if (ObjectHelper.isEmpty(clientConfigurations.getName())) {
+                throw new IllegalArgumentException("Name is mandatory to create an instance");
+            }
+            if (ObjectHelper.isEmpty(clientConfigurations.getEngine())) {
+                throw new IllegalArgumentException("Engine is mandatory to create an instance");
+            }
+
+            if (clientConfigurations.getEngine().equals(DMSConstants.KAFKA)) {
+                // check for mandatory Kafka values
+                if (ObjectHelper.isEmpty(clientConfigurations.getEngineVersion())) {
+                    throw new IllegalArgumentException("Engine version is mandatory to create a Kafka instance");
+                }
+                if (ObjectHelper.isEmpty(clientConfigurations.getSpecification())) {
+                    throw new IllegalArgumentException("Specification is mandatory to create a Kafka instance");
+                }
+                if (ObjectHelper.isEmpty(clientConfigurations.getPartitionNum())) {
+                    throw new IllegalArgumentException("Partition number is mandatory to create a Kafka instance");
+                }
+                if (ObjectHelper.isEmpty(clientConfigurations.getKafkaManagerUser())) {
+                    throw new IllegalArgumentException("Kafka manager user is mandatory to create a Kafka instance");
+                }
+                if (ObjectHelper.isEmpty(clientConfigurations.getKafkaManagerPassword())) {
+                    throw new IllegalArgumentException("Kafka manager password is mandatory to create a Kafka instance");
+                }
+            } else if (clientConfigurations.getEngine().equals(DMSConstants.RABBITMQ)) {
+                // check for mandatory RabbitMQ values
+                if (ObjectHelper.isEmpty(clientConfigurations.getAccessUser())) {
+                    throw new IllegalArgumentException("Access user is mandatory to create a RabbitMQ instance");
+                }
+                if (ObjectHelper.isEmpty(clientConfigurations.getPassword())) {
+                    throw new IllegalArgumentException("Password is mandatory to create a RabbitMQ instance");
+                }
+            } else {
+                throw new IllegalArgumentException("Engine must be 'kafka' or 'rabbitmq'");
+            }
+
+            if (ObjectHelper.isEmpty(clientConfigurations.getStorageSpace())) {
+                throw new IllegalArgumentException("Storage space is mandatory to create an instance");
+            }
+            if (ObjectHelper.isEmpty(clientConfigurations.getVpcId())) {
+                throw new IllegalArgumentException("VPC ID is mandatory to create an instance");
+            }
+            if (ObjectHelper.isEmpty(clientConfigurations.getSecurityGroupId())) {
+                throw new IllegalArgumentException("Security group ID is mandatory to create an instance");
+            }
+            if (ObjectHelper.isEmpty(clientConfigurations.getSubnetId())) {
+                throw new IllegalArgumentException("Subnet ID is mandatory to create an instance");
+            }
+            if (ObjectHelper.isEmpty(clientConfigurations.getAvailableZones())) {
+                throw new IllegalArgumentException("Available zones is mandatory to create an instance");
+            }
+            if (ObjectHelper.isEmpty(clientConfigurations.getProductId())) {
+                throw new IllegalArgumentException("Product ID is mandatory to create an instance");
+            }
+            if (ObjectHelper.isEmpty(clientConfigurations.getStorageSpecCode())) {
+                throw new IllegalArgumentException("Storage spec code is mandatory to create an instance");
+            }
+
+            // create a new CreateInstanceRequestBody based on the given endpoint parameters
+            body = new CreateInstanceRequestBody()
+                    .withName(clientConfigurations.getName())
+                    .withEngine(clientConfigurations.getEngine())
+                    .withEngineVersion(clientConfigurations.getEngineVersion())
+                    .withSpecification(clientConfigurations.getSpecification())
+                    .withStorageSpace(clientConfigurations.getStorageSpace())
+                    .withPartitionNum(clientConfigurations.getPartitionNum())
+                    .withAccessUser(clientConfigurations.getAccessUser())
+                    .withPassword(clientConfigurations.getPassword())
+                    .withVpcId(clientConfigurations.getVpcId())
+                    .withSecurityGroupId(clientConfigurations.getSecurityGroupId())
+                    .withSubnetId(clientConfigurations.getSubnetId())
+                    .withAvailableZones(clientConfigurations.getAvailableZones())
+                    .withProductId(clientConfigurations.getProductId())
+                    .withKafkaManagerUser(clientConfigurations.getKafkaManagerUser())
+                    .withKafkaManagerPassword(clientConfigurations.getKafkaManagerPassword())
+                    .withStorageSpecCode(clientConfigurations.getStorageSpecCode());
+        }
+
+        CreateInstanceRequest request = new CreateInstanceRequest()
+                .withBody(body);
+        CreateInstanceResponse response = dmsClient.createInstance(request);
+        exchange.getMessage().setBody(mapper.writeValueAsString(response));
+    }
+
+    /**
      * Perform delete instance operation
      *
      * @param exchange
@@ -119,6 +242,37 @@ public class DMSProducer extends DefaultProducer {
     }
 
     /**
+     * Perform update instance operation
+     *
+     * @param exchange
+     */
+    private void updateInstance(Exchange exchange) throws JsonProcessingException {
+        // check for instance id, which is mandatory to update an instance
+        if (ObjectHelper.isEmpty(clientConfigurations.getInstanceId())) {
+            throw new IllegalArgumentException("Instance id is mandatory to update an instance");
+        }
+
+        UpdateInstanceRequestBody body;
+
+        Object exchangeBody = exchange.getIn().getBody();
+        if (exchangeBody instanceof UpdateInstanceRequestBody) {
+            body = (UpdateInstanceRequestBody) exchangeBody;
+        } else if (exchangeBody instanceof String) {
+            String strBody = (String) exchangeBody;
+            body = mapper.readValue(strBody, UpdateInstanceRequestBody.class);
+        } else {
+            throw new IllegalArgumentException(
+                    "Exchange body must include an UpdateInstanceRequestBody or a valid JSON String representation of it");
+        }
+
+        UpdateInstanceRequest request = new UpdateInstanceRequest()
+                .withInstanceId(clientConfigurations.getInstanceId())
+                .withBody(body);
+        UpdateInstanceResponse response = dmsClient.updateInstance(request);
+        exchange.setProperty(DMSProperties.INSTANCE_UPDATED, true);
+    }
+
+    /**
      * Update dynamic client configurations. Some endpoint parameters (operation, user ID, and group ID) can also be
      * passed via exchange properties, so they can be updated between each transaction. Since they can change, we must
      * clear the previous transaction and update these parameters with their new values
@@ -155,6 +309,96 @@ public class DMSProducer extends DefaultProducer {
                 ObjectHelper.isNotEmpty(exchange.getProperty(DMSProperties.INSTANCE_ID))
                         ? (String) exchange.getProperty(DMSProperties.INSTANCE_ID)
                         : endpoint.getInstanceId());
+
+        // checking for name
+        clientConfigurations.setName(
+                ObjectHelper.isNotEmpty(exchange.getProperty(DMSProperties.NAME))
+                        ? (String) exchange.getProperty(DMSProperties.NAME)
+                        : endpoint.getName());
+
+        // checking for engine version
+        clientConfigurations.setEngineVersion(
+                ObjectHelper.isNotEmpty(exchange.getProperty(DMSProperties.ENGINE_VERSION))
+                        ? (String) exchange.getProperty(DMSProperties.ENGINE_VERSION)
+                        : endpoint.getEngineVersion());
+
+        // checking for specification
+        clientConfigurations.setSpecification(
+                ObjectHelper.isNotEmpty(exchange.getProperty(DMSProperties.SPECIFICATION))
+                        ? (String) exchange.getProperty(DMSProperties.SPECIFICATION)
+                        : endpoint.getSpecification());
+
+        // checking for storage space
+        clientConfigurations.setStorageSpace(
+                ObjectHelper.isNotEmpty(exchange.getProperty(DMSProperties.STORAGE_SPACE))
+                        ? (Integer) exchange.getProperty(DMSProperties.STORAGE_SPACE)
+                        : endpoint.getStorageSpace());
+
+        // checking for partition number
+        clientConfigurations.setPartitionNum(
+                ObjectHelper.isNotEmpty(exchange.getProperty(DMSProperties.PARTITION_NUM))
+                        ? (Integer) exchange.getProperty(DMSProperties.PARTITION_NUM)
+                        : endpoint.getPartitionNum());
+
+        // checking for access user
+        clientConfigurations.setAccessUser(
+                ObjectHelper.isNotEmpty(exchange.getProperty(DMSProperties.ACCESS_USER))
+                        ? (String) exchange.getProperty(DMSProperties.ACCESS_USER)
+                        : endpoint.getAccessUser());
+
+        // checking for password
+        clientConfigurations.setPassword(
+                ObjectHelper.isNotEmpty(exchange.getProperty(DMSProperties.PASSWORD))
+                        ? (String) exchange.getProperty(DMSProperties.PASSWORD)
+                        : endpoint.getPassword());
+
+        // checking for vpc id
+        clientConfigurations.setVpcId(
+                ObjectHelper.isNotEmpty(exchange.getProperty(DMSProperties.VPC_ID))
+                        ? (String) exchange.getProperty(DMSProperties.VPC_ID)
+                        : endpoint.getVpcId());
+
+        // checking for security group id
+        clientConfigurations.setSecurityGroupId(
+                ObjectHelper.isNotEmpty(exchange.getProperty(DMSProperties.SECURITY_GROUP_ID))
+                        ? (String) exchange.getProperty(DMSProperties.SECURITY_GROUP_ID)
+                        : endpoint.getSecurityGroupId());
+
+        // checking for subnet id
+        clientConfigurations.setSubnetId(
+                ObjectHelper.isNotEmpty(exchange.getProperty(DMSProperties.SUBNET_ID))
+                        ? (String) exchange.getProperty(DMSProperties.SUBNET_ID)
+                        : endpoint.getSubnetId());
+
+        // checking for available zones
+        clientConfigurations.setAvailableZones(
+                ObjectHelper.isNotEmpty(exchange.getProperty(DMSProperties.AVAILABLE_ZONES))
+                        ? (List<String>) exchange.getProperty(DMSProperties.AVAILABLE_ZONES)
+                        : endpoint.getAvailableZones());
+
+        // checking for product id
+        clientConfigurations.setProductId(
+                ObjectHelper.isNotEmpty(exchange.getProperty(DMSProperties.PRODUCT_ID))
+                        ? (String) exchange.getProperty(DMSProperties.PRODUCT_ID)
+                        : endpoint.getProductId());
+
+        // checking for kafka manager username
+        clientConfigurations.setKafkaManagerUser(
+                ObjectHelper.isNotEmpty(exchange.getProperty(DMSProperties.KAFKA_MANAGER_USER))
+                        ? (String) exchange.getProperty(DMSProperties.KAFKA_MANAGER_USER)
+                        : endpoint.getKafkaManagerUser());
+
+        // checking for kafka manager password
+        clientConfigurations.setKafkaManagerPassword(
+                ObjectHelper.isNotEmpty(exchange.getProperty(DMSProperties.KAFKA_MANAGER_PASSWORD))
+                        ? (String) exchange.getProperty(DMSProperties.KAFKA_MANAGER_PASSWORD)
+                        : endpoint.getKafkaManagerPassword());
+
+        // checking for storage spec code
+        clientConfigurations.setStorageSpecCode(
+                ObjectHelper.isNotEmpty(exchange.getProperty(DMSProperties.STORAGE_SPEC_CODE))
+                        ? (String) exchange.getProperty(DMSProperties.STORAGE_SPEC_CODE)
+                        : endpoint.getStorageSpecCode());
     }
 
     /**
@@ -164,5 +408,20 @@ public class DMSProducer extends DefaultProducer {
         clientConfigurations.setOperation(null);
         clientConfigurations.setEngine(null);
         clientConfigurations.setInstanceId(null);
+        clientConfigurations.setName(null);
+        clientConfigurations.setEngineVersion(null);
+        clientConfigurations.setSpecification(null);
+        clientConfigurations.setStorageSpace(null);
+        clientConfigurations.setPartitionNum(null);
+        clientConfigurations.setAccessUser(null);
+        clientConfigurations.setPassword(null);
+        clientConfigurations.setVpcId(null);
+        clientConfigurations.setSecurityGroupId(null);
+        clientConfigurations.setSubnetId(null);
+        clientConfigurations.setAvailableZones(null);
+        clientConfigurations.setProductId(null);
+        clientConfigurations.setKafkaManagerUser(null);
+        clientConfigurations.setKafkaManagerPassword(null);
+        clientConfigurations.setStorageSpecCode(null);
     }
 }
diff --git a/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/DmsClient.java b/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/DmsClient.java
index e75e7cc..a575de5 100644
--- a/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/DmsClient.java
+++ b/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/DmsClient.java
@@ -18,12 +18,16 @@ package org.apache.camel.component.huaweicloud.dms;
 
 import com.huaweicloud.sdk.core.ClientBuilder;
 import com.huaweicloud.sdk.core.HcClient;
+import org.apache.camel.component.huaweicloud.dms.models.CreateInstanceRequest;
+import org.apache.camel.component.huaweicloud.dms.models.CreateInstanceResponse;
 import org.apache.camel.component.huaweicloud.dms.models.DeleteInstanceRequest;
 import org.apache.camel.component.huaweicloud.dms.models.DeleteInstanceResponse;
 import org.apache.camel.component.huaweicloud.dms.models.DmsInstance;
 import org.apache.camel.component.huaweicloud.dms.models.ListInstancesRequest;
 import org.apache.camel.component.huaweicloud.dms.models.ListInstancesResponse;
 import org.apache.camel.component.huaweicloud.dms.models.QueryInstanceRequest;
+import org.apache.camel.component.huaweicloud.dms.models.UpdateInstanceRequest;
+import org.apache.camel.component.huaweicloud.dms.models.UpdateInstanceResponse;
 
 /**
  * DMS Client class
@@ -40,6 +44,10 @@ public class DmsClient {
         return new ClientBuilder<>(DmsClient::new);
     }
 
+    public CreateInstanceResponse createInstance(CreateInstanceRequest request) {
+        return hcClient.syncInvokeHttp(request, DmsMeta.CREATE_INSTANCE);
+    }
+
     public DeleteInstanceResponse deleteInstance(DeleteInstanceRequest request) {
         return hcClient.syncInvokeHttp(request, DmsMeta.DELETE_INSTANCE);
     }
@@ -51,4 +59,8 @@ public class DmsClient {
     public DmsInstance queryInstance(QueryInstanceRequest request) {
         return hcClient.syncInvokeHttp(request, DmsMeta.QUERY_INSTANCE);
     }
+
+    public UpdateInstanceResponse updateInstance(UpdateInstanceRequest request) {
+        return hcClient.syncInvokeHttp(request, DmsMeta.UPDATE_INSTANCE);
+    }
 }
diff --git a/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/DmsMeta.java b/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/DmsMeta.java
index cdfd7ac..9aa9da7 100644
--- a/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/DmsMeta.java
+++ b/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/DmsMeta.java
@@ -20,25 +20,53 @@ import com.huaweicloud.sdk.core.http.FieldExistence;
 import com.huaweicloud.sdk.core.http.HttpMethod;
 import com.huaweicloud.sdk.core.http.HttpRequestDef;
 import com.huaweicloud.sdk.core.http.LocationType;
+import org.apache.camel.component.huaweicloud.dms.models.CreateInstanceRequest;
+import org.apache.camel.component.huaweicloud.dms.models.CreateInstanceRequestBody;
+import org.apache.camel.component.huaweicloud.dms.models.CreateInstanceResponse;
 import org.apache.camel.component.huaweicloud.dms.models.DeleteInstanceRequest;
 import org.apache.camel.component.huaweicloud.dms.models.DeleteInstanceResponse;
 import org.apache.camel.component.huaweicloud.dms.models.DmsInstance;
 import org.apache.camel.component.huaweicloud.dms.models.ListInstancesRequest;
 import org.apache.camel.component.huaweicloud.dms.models.ListInstancesResponse;
 import org.apache.camel.component.huaweicloud.dms.models.QueryInstanceRequest;
+import org.apache.camel.component.huaweicloud.dms.models.UpdateInstanceRequest;
+import org.apache.camel.component.huaweicloud.dms.models.UpdateInstanceRequestBody;
+import org.apache.camel.component.huaweicloud.dms.models.UpdateInstanceResponse;
 
 @SuppressWarnings("unchecked")
 public final class DmsMeta {
 
+    public static final HttpRequestDef<CreateInstanceRequest, CreateInstanceResponse> CREATE_INSTANCE = genForcreateInstance();
+
     public static final HttpRequestDef<DeleteInstanceRequest, DeleteInstanceResponse> DELETE_INSTANCE = genFordeleteInstance();
 
     public static final HttpRequestDef<ListInstancesRequest, ListInstancesResponse> LIST_INSTANCES = genForlistInstances();
 
     public static final HttpRequestDef<QueryInstanceRequest, DmsInstance> QUERY_INSTANCE = genForqueryInstance();
 
+    public static final HttpRequestDef<UpdateInstanceRequest, UpdateInstanceResponse> UPDATE_INSTANCE = genForupdateInstsance();
+
     private DmsMeta() {
     }
 
+    private static HttpRequestDef<CreateInstanceRequest, CreateInstanceResponse> genForcreateInstance() {
+        // basic
+        HttpRequestDef.Builder<CreateInstanceRequest, CreateInstanceResponse> builder
+                = HttpRequestDef.builder(HttpMethod.POST, CreateInstanceRequest.class, CreateInstanceResponse.class)
+                        .withName("CreateInstanceKafka")
+                        .withUri("/v1.0/{project_id}/instances")
+                        .withContentType("application/json");
+
+        // requests
+        builder.withRequestField("body",
+                LocationType.Body,
+                FieldExistence.NON_NULL_NON_EMPTY,
+                CreateInstanceRequestBody.class,
+                f -> f.withMarshaller(CreateInstanceRequest::getBody, CreateInstanceRequest::setBody));
+
+        return builder.build();
+    }
+
     private static HttpRequestDef<DeleteInstanceRequest, DeleteInstanceResponse> genFordeleteInstance() {
         // basic
         HttpRequestDef.Builder<DeleteInstanceRequest, DeleteInstanceResponse> builder
@@ -92,4 +120,28 @@ public final class DmsMeta {
 
         return builder.build();
     }
+
+    private static HttpRequestDef<UpdateInstanceRequest, UpdateInstanceResponse> genForupdateInstsance() {
+        // basic
+        HttpRequestDef.Builder<UpdateInstanceRequest, UpdateInstanceResponse> builder
+                = HttpRequestDef.builder(HttpMethod.PUT, UpdateInstanceRequest.class, UpdateInstanceResponse.class)
+                        .withName("UpdateInstance")
+                        .withUri("/v1.0/{project_id}/instances/{instance_id}")
+                        .withContentType("application/json");
+
+        // requests
+        builder.withRequestField("instance_id",
+                LocationType.Path,
+                FieldExistence.NON_NULL_NON_EMPTY,
+                String.class,
+                f -> f.withMarshaller(UpdateInstanceRequest::getInstanceId, UpdateInstanceRequest::setInstanceId));
+
+        builder.withRequestField("body",
+                LocationType.Body,
+                FieldExistence.NON_NULL_NON_EMPTY,
+                UpdateInstanceRequestBody.class,
+                f -> f.withMarshaller(UpdateInstanceRequest::getBody, UpdateInstanceRequest::setBody));
+
+        return builder.build();
+    }
 }
diff --git a/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/constants/DMSOperations.java b/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/constants/DMSConstants.java
similarity index 73%
copy from components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/constants/DMSOperations.java
copy to components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/constants/DMSConstants.java
index fa83f36..a0bc7e1 100644
--- a/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/constants/DMSOperations.java
+++ b/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/constants/DMSConstants.java
@@ -17,13 +17,12 @@
 package org.apache.camel.component.huaweicloud.dms.constants;
 
 /**
- * Constants for all the supported DMS operations
+ * Constants for the DMS component
  */
-public final class DMSOperations {
-    public static final String DELETE_INSTANCE = "deleteInstance";
-    public static final String LIST_INSTANCES = "listInstances";
-    public static final String QUERY_INSTANCE = "queryInstance";
+public final class DMSConstants {
+    public static final String KAFKA = "kafka";
+    public static final String RABBITMQ = "rabbitmq";
 
-    private DMSOperations() {
+    private DMSConstants() {
     }
 }
diff --git a/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/constants/DMSOperations.java b/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/constants/DMSOperations.java
index fa83f36..72bdf8a 100644
--- a/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/constants/DMSOperations.java
+++ b/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/constants/DMSOperations.java
@@ -20,9 +20,11 @@ package org.apache.camel.component.huaweicloud.dms.constants;
  * Constants for all the supported DMS operations
  */
 public final class DMSOperations {
+    public static final String CREATE_INSTANCE = "createInstance";
     public static final String DELETE_INSTANCE = "deleteInstance";
     public static final String LIST_INSTANCES = "listInstances";
     public static final String QUERY_INSTANCE = "queryInstance";
+    public static final String UPDATE_INSTANCE = "updateInstance";
 
     private DMSOperations() {
     }
diff --git a/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/constants/DMSProperties.java b/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/constants/DMSProperties.java
index d890c2e..6ef3a28 100644
--- a/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/constants/DMSProperties.java
+++ b/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/constants/DMSProperties.java
@@ -23,8 +23,24 @@ public final class DMSProperties {
     public static final String OPERATION = "CamelHwCloudDmsOperation";
     public static final String ENGINE = "CamelHwCloudDmsEngine";
     public static final String INSTANCE_ID = "CamelHwCloudDmsInstanceId";
+    public static final String NAME = "CamelHwCloudDmsName";
+    public static final String ENGINE_VERSION = "CamelHwCloudDmsEngineVersion";
+    public static final String SPECIFICATION = "CamelHwCloudDmsSpecification";
+    public static final String STORAGE_SPACE = "CamelHwCloudDmsStorageSpace";
+    public static final String PARTITION_NUM = "CamelHwCloudDmsPartitionNum";
+    public static final String ACCESS_USER = "CamelHwCloudDmsAccessUser";
+    public static final String PASSWORD = "CamelHwCloudDmsPassword";
+    public static final String VPC_ID = "CamelHwCloudDmsVpcId";
+    public static final String SECURITY_GROUP_ID = "CamelHwCloudDmsSecurityGroupId";
+    public static final String SUBNET_ID = "CamelHwCloudDmsSubnetId";
+    public static final String AVAILABLE_ZONES = "CamelHwCloudDmsAvailableZones";
+    public static final String PRODUCT_ID = "CamelHwCloudDmsProductId";
+    public static final String KAFKA_MANAGER_USER = "CamelHwCloudDmsKafkaManagerUser";
+    public static final String KAFKA_MANAGER_PASSWORD = "CamelHwCloudDmsKafkaManagerPassword";
+    public static final String STORAGE_SPEC_CODE = "CamelHwCloudDmsStorageSpecCode";
 
     public static final String INSTANCE_DELETED = "CamelHwCloudDmsInstanceDeleted";
+    public static final String INSTANCE_UPDATED = "CamelHwCloudDmsInstanceUpdated";
 
     private DMSProperties() {
     }
diff --git a/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/models/ClientConfigurations.java b/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/models/ClientConfigurations.java
index 79ae690..2f7acf2 100644
--- a/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/models/ClientConfigurations.java
+++ b/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/models/ClientConfigurations.java
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.component.huaweicloud.dms.models;
 
+import java.util.List;
+
 /**
  * Class to combine parameters which can be passed through exchange properties and endpoint parameters to avoid checking
  * both each time they are used
@@ -24,6 +26,21 @@ public class ClientConfigurations {
     private String operation;
     private String engine;
     private String instanceId;
+    private String name;
+    private String engineVersion;
+    private String specification;
+    private Integer storageSpace;
+    private Integer partitionNum;
+    private String accessUser;
+    private String password;
+    private String vpcId;
+    private String securityGroupId;
+    private String subnetId;
+    private List<String> availableZones;
+    private String productId;
+    private String kafkaManagerUser;
+    private String kafkaManagerPassword;
+    private String storageSpecCode;
 
     public ClientConfigurations() {
     }
@@ -52,4 +69,123 @@ public class ClientConfigurations {
         this.instanceId = instanceId;
     }
 
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getEngineVersion() {
+        return engineVersion;
+    }
+
+    public void setEngineVersion(String engineVersion) {
+        this.engineVersion = engineVersion;
+    }
+
+    public String getSpecification() {
+        return specification;
+    }
+
+    public void setSpecification(String specification) {
+        this.specification = specification;
+    }
+
+    public Integer getStorageSpace() {
+        return storageSpace;
+    }
+
+    public void setStorageSpace(Integer storageSpace) {
+        this.storageSpace = storageSpace;
+    }
+
+    public Integer getPartitionNum() {
+        return partitionNum;
+    }
+
+    public void setPartitionNum(Integer partitionNum) {
+        this.partitionNum = partitionNum;
+    }
+
+    public String getAccessUser() {
+        return accessUser;
+    }
+
+    public void setAccessUser(String accessUser) {
+        this.accessUser = accessUser;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    public String getVpcId() {
+        return vpcId;
+    }
+
+    public void setVpcId(String vpcId) {
+        this.vpcId = vpcId;
+    }
+
+    public String getSecurityGroupId() {
+        return securityGroupId;
+    }
+
+    public void setSecurityGroupId(String securityGroupId) {
+        this.securityGroupId = securityGroupId;
+    }
+
+    public String getSubnetId() {
+        return subnetId;
+    }
+
+    public void setSubnetId(String subnetId) {
+        this.subnetId = subnetId;
+    }
+
+    public List<String> getAvailableZones() {
+        return availableZones;
+    }
+
+    public void setAvailableZones(List<String> availableZones) {
+        this.availableZones = availableZones;
+    }
+
+    public String getProductId() {
+        return productId;
+    }
+
+    public void setProductId(String productId) {
+        this.productId = productId;
+    }
+
+    public String getKafkaManagerUser() {
+        return kafkaManagerUser;
+    }
+
+    public void setKafkaManagerUser(String kafkaManagerUser) {
+        this.kafkaManagerUser = kafkaManagerUser;
+    }
+
+    public String getKafkaManagerPassword() {
+        return kafkaManagerPassword;
+    }
+
+    public void setKafkaManagerPassword(String kafkaManagerPassword) {
+        this.kafkaManagerPassword = kafkaManagerPassword;
+    }
+
+    public String getStorageSpecCode() {
+        return storageSpecCode;
+    }
+
+    public void setStorageSpecCode(String storageSpecCode) {
+        this.storageSpecCode = storageSpecCode;
+    }
 }
diff --git a/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/models/ClientConfigurations.java b/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/models/CreateInstanceRequest.java
similarity index 54%
copy from components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/models/ClientConfigurations.java
copy to components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/models/CreateInstanceRequest.java
index 79ae690..52e072e 100644
--- a/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/models/ClientConfigurations.java
+++ b/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/models/CreateInstanceRequest.java
@@ -16,40 +16,35 @@
  */
 package org.apache.camel.component.huaweicloud.dms.models;
 
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
 /**
- * Class to combine parameters which can be passed through exchange properties and endpoint parameters to avoid checking
- * both each time they are used
+ * Create instance request object
  */
-public class ClientConfigurations {
-    private String operation;
-    private String engine;
-    private String instanceId;
-
-    public ClientConfigurations() {
-    }
+public class CreateInstanceRequest {
 
-    public String getOperation() {
-        return operation;
-    }
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    @JsonProperty(value = "body")
+    private CreateInstanceRequestBody body;
 
-    public void setOperation(String operation) {
-        this.operation = operation;
+    public CreateInstanceRequest withBody(CreateInstanceRequestBody body) {
+        this.body = body;
+        return this;
     }
 
-    public String getEngine() {
-        return engine;
+    public CreateInstanceRequestBody getBody() {
+        return body;
     }
 
-    public void setEngine(String engine) {
-        this.engine = engine;
+    public void setBody(CreateInstanceRequestBody body) {
+        this.body = body;
     }
 
-    public String getInstanceId() {
-        return instanceId;
+    @Override
+    public String toString() {
+        return "CreateInstanceRequest{" +
+               "body=" + body +
+               '}';
     }
-
-    public void setInstanceId(String instanceId) {
-        this.instanceId = instanceId;
-    }
-
 }
diff --git a/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/models/CreateInstanceRequestBody.java b/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/models/CreateInstanceRequestBody.java
new file mode 100644
index 0000000..b094b0c
--- /dev/null
+++ b/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/models/CreateInstanceRequestBody.java
@@ -0,0 +1,529 @@
+/*
+ * 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.huaweicloud.dms.models;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * Create instance request body object
+ */
+public class CreateInstanceRequestBody {
+
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    @JsonProperty(value = "name")
+    private String name;
+
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    @JsonProperty(value = "description")
+    private String description;
+
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    @JsonProperty(value = "engine")
+    private String engine;
+
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    @JsonProperty(value = "engine_version")
+    private String engineVersion;
+
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    @JsonProperty(value = "specification")
+    private String specification;
+
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    @JsonProperty(value = "storage_space")
+    private Integer storageSpace;
+
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    @JsonProperty(value = "partition_num")
+    private Integer partitionNum;
+
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    @JsonProperty(value = "access_user")
+    private String accessUser;
+
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    @JsonProperty(value = "password")
+    private String password;
+
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    @JsonProperty(value = "vpc_id")
+    private String vpcId;
+
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    @JsonProperty(value = "security_group_id")
+    private String securityGroupId;
+
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    @JsonProperty(value = "subnet_id")
+    private String subnetId;
+
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    @JsonProperty(value = "available_zones")
+    private List<String> availableZones;
+
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    @JsonProperty(value = "product_id")
+    private String productId;
+
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    @JsonProperty(value = "kafka_manager_user")
+    private String kafkaManagerUser;
+
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    @JsonProperty(value = "kafka_manager_password")
+    private String kafkaManagerPassword;
+
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    @JsonProperty(value = "maintain_begin")
+    private String maintainBegin;
+
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    @JsonProperty(value = "maintain_end")
+    private String maintainEnd;
+
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    @JsonProperty(value = "enable_publicip")
+    private Boolean enablePublicip;
+
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    @JsonProperty(value = "public_bandwidth")
+    private String publicBandwidth;
+
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    @JsonProperty(value = "publicip_id")
+    private String publicipId;
+
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    @JsonProperty(value = "ssl_enable")
+    private Boolean sslEnable;
+
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    @JsonProperty(value = "retention_policy")
+    private String retentionPolicy;
+
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    @JsonProperty(value = "connector_enable")
+    private Boolean connectorEnable;
+
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    @JsonProperty(value = "enable_auto_topic")
+    private Boolean enableAutoTopic;
+
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    @JsonProperty(value = "storage_spec_code")
+    private String storageSpecCode;
+
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    @JsonProperty(value = "enterprise_project_id")
+    private String enterpriseProjectId;
+
+    public CreateInstanceRequestBody withName(String name) {
+        this.name = name;
+        return this;
+    }
+
+    public CreateInstanceRequestBody withDescription(String description) {
+        this.description = description;
+        return this;
+    }
+
+    public CreateInstanceRequestBody withEngine(String engine) {
+        this.engine = engine;
+        return this;
+    }
+
+    public CreateInstanceRequestBody withEngineVersion(String engineVersion) {
+        this.engineVersion = engineVersion;
+        return this;
+    }
+
+    public CreateInstanceRequestBody withSpecification(String specification) {
+        this.specification = specification;
+        return this;
+    }
+
+    public CreateInstanceRequestBody withStorageSpace(Integer storageSpace) {
+        this.storageSpace = storageSpace;
+        return this;
+    }
+
+    public CreateInstanceRequestBody withPartitionNum(Integer partitionNum) {
+        this.partitionNum = partitionNum;
+        return this;
+    }
+
+    public CreateInstanceRequestBody withAccessUser(String accessUser) {
+        this.accessUser = accessUser;
+        return this;
+    }
+
+    public CreateInstanceRequestBody withPassword(String password) {
+        this.password = password;
+        return this;
+    }
+
+    public CreateInstanceRequestBody withVpcId(String vpcId) {
+        this.vpcId = vpcId;
+        return this;
+    }
+
+    public CreateInstanceRequestBody withSecurityGroupId(String securityGroupId) {
+        this.securityGroupId = securityGroupId;
+        return this;
+    }
+
+    public CreateInstanceRequestBody withSubnetId(String subnetId) {
+        this.subnetId = subnetId;
+        return this;
+    }
+
+    public CreateInstanceRequestBody withAvailableZones(List<String> availableZones) {
+        this.availableZones = availableZones;
+        return this;
+    }
+
+    public CreateInstanceRequestBody withProductId(String productId) {
+        this.productId = productId;
+        return this;
+    }
+
+    public CreateInstanceRequestBody withKafkaManagerUser(String kafkaManagerUser) {
+        this.kafkaManagerUser = kafkaManagerUser;
+        return this;
+    }
+
+    public CreateInstanceRequestBody withKafkaManagerPassword(String kafkaManagerPassword) {
+        this.kafkaManagerPassword = kafkaManagerPassword;
+        return this;
+    }
+
+    public CreateInstanceRequestBody withMaintainBegin(String maintainBegin) {
+        this.maintainBegin = maintainBegin;
+        return this;
+    }
+
+    public CreateInstanceRequestBody withMaintainEnd(String maintainEnd) {
+        this.maintainEnd = maintainEnd;
+        return this;
+    }
+
+    public CreateInstanceRequestBody withEnablePublicip(Boolean enablePublicip) {
+        this.enablePublicip = enablePublicip;
+        return this;
+    }
+
+    public CreateInstanceRequestBody withPublicBandwidth(String publicBandwidth) {
+        this.publicBandwidth = publicBandwidth;
+        return this;
+    }
+
+    public CreateInstanceRequestBody withPublicipId(String publicipId) {
+        this.publicipId = publicipId;
+        return this;
+    }
+
+    public CreateInstanceRequestBody withSslEnable(Boolean sslEnable) {
+        this.sslEnable = sslEnable;
+        return this;
+    }
+
+    public CreateInstanceRequestBody withRetentionPolicy(String retentionPolicy) {
+        this.retentionPolicy = retentionPolicy;
+        return this;
+    }
+
+    public CreateInstanceRequestBody withConnectorEnable(Boolean connectorEnable) {
+        this.connectorEnable = connectorEnable;
+        return this;
+    }
+
+    public CreateInstanceRequestBody withEnableAutoTopic(Boolean enableAutoTopic) {
+        this.enableAutoTopic = enableAutoTopic;
+        return this;
+    }
+
+    public CreateInstanceRequestBody withStorageSpecCode(String storageSpecCode) {
+        this.storageSpecCode = storageSpecCode;
+        return this;
+    }
+
+    public CreateInstanceRequestBody withEnterpriseProjectId(String enterpriseProjectId) {
+        this.enterpriseProjectId = enterpriseProjectId;
+        return this;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getEngine() {
+        return engine;
+    }
+
+    public void setEngine(String engine) {
+        this.engine = engine;
+    }
+
+    public String getEngineVersion() {
+        return engineVersion;
+    }
+
+    public void setEngineVersion(String engineVersion) {
+        this.engineVersion = engineVersion;
+    }
+
+    public String getSpecification() {
+        return specification;
+    }
+
+    public void setSpecification(String specification) {
+        this.specification = specification;
+    }
+
+    public Integer getStorageSpace() {
+        return storageSpace;
+    }
+
+    public void setStorageSpace(Integer storageSpace) {
+        this.storageSpace = storageSpace;
+    }
+
+    public Integer getPartitionNum() {
+        return partitionNum;
+    }
+
+    public void setPartitionNum(Integer partitionNum) {
+        this.partitionNum = partitionNum;
+    }
+
+    public String getAccessUser() {
+        return accessUser;
+    }
+
+    public void setAccessUser(String accessUser) {
+        this.accessUser = accessUser;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    public String getVpcId() {
+        return vpcId;
+    }
+
+    public void setVpcId(String vpcId) {
+        this.vpcId = vpcId;
+    }
+
+    public String getSecurityGroupId() {
+        return securityGroupId;
+    }
+
+    public void setSecurityGroupId(String securityGroupId) {
+        this.securityGroupId = securityGroupId;
+    }
+
+    public String getSubnetId() {
+        return subnetId;
+    }
+
+    public void setSubnetId(String subnetId) {
+        this.subnetId = subnetId;
+    }
+
+    public List<String> getAvailableZones() {
+        return availableZones;
+    }
+
+    public void setAvailableZones(List<String> availableZones) {
+        this.availableZones = availableZones;
+    }
+
+    public String getProductId() {
+        return productId;
+    }
+
+    public void setProductId(String productId) {
+        this.productId = productId;
+    }
+
+    public String getKafkaManagerUser() {
+        return kafkaManagerUser;
+    }
+
+    public void setKafkaManagerUser(String kafkaManagerUser) {
+        this.kafkaManagerUser = kafkaManagerUser;
+    }
+
+    public String getKafkaManagerPassword() {
+        return kafkaManagerPassword;
+    }
+
+    public void setKafkaManagerPassword(String kafkaManagerPassword) {
+        this.kafkaManagerPassword = kafkaManagerPassword;
+    }
+
+    public String getMaintainBegin() {
+        return maintainBegin;
+    }
+
+    public void setMaintainBegin(String maintainBegin) {
+        this.maintainBegin = maintainBegin;
+    }
+
+    public String getMaintainEnd() {
+        return maintainEnd;
+    }
+
+    public void setMaintainEnd(String maintainEnd) {
+        this.maintainEnd = maintainEnd;
+    }
+
+    public Boolean getEnablePublicip() {
+        return enablePublicip;
+    }
+
+    public void setEnablePublicip(Boolean enablePublicip) {
+        this.enablePublicip = enablePublicip;
+    }
+
+    public String getPublicBandwidth() {
+        return publicBandwidth;
+    }
+
+    public void setPublicBandwidth(String publicBandwidth) {
+        this.publicBandwidth = publicBandwidth;
+    }
+
+    public String getPublicipId() {
+        return publicipId;
+    }
+
+    public void setPublicipId(String publicipId) {
+        this.publicipId = publicipId;
+    }
+
+    public Boolean getSslEnable() {
+        return sslEnable;
+    }
+
+    public void setSslEnable(Boolean sslEnable) {
+        this.sslEnable = sslEnable;
+    }
+
+    public String getRetentionPolicy() {
+        return retentionPolicy;
+    }
+
+    public void setRetentionPolicy(String retentionPolicy) {
+        this.retentionPolicy = retentionPolicy;
+    }
+
+    public Boolean getConnectorEnable() {
+        return connectorEnable;
+    }
+
+    public void setConnectorEnable(Boolean connectorEnable) {
+        this.connectorEnable = connectorEnable;
+    }
+
+    public Boolean getEnableAutoTopic() {
+        return enableAutoTopic;
+    }
+
+    public void setEnableAutoTopic(Boolean enableAutoTopic) {
+        this.enableAutoTopic = enableAutoTopic;
+    }
+
+    public String getStorageSpecCode() {
+        return storageSpecCode;
+    }
+
+    public void setStorageSpecCode(String storageSpecCode) {
+        this.storageSpecCode = storageSpecCode;
+    }
+
+    public String getEnterpriseProjectId() {
+        return enterpriseProjectId;
+    }
+
+    public void setEnterpriseProjectId(String enterpriseProjectId) {
+        this.enterpriseProjectId = enterpriseProjectId;
+    }
+
+    public CreateInstanceRequestBody addAvailableZone(String availableZone) {
+        if (this.availableZones == null) {
+            this.availableZones = new ArrayList<>();
+        }
+        this.availableZones.add(availableZone);
+        return this;
+    }
+
+    @Override
+    public String toString() {
+        return "CreateInstanceRequestBody{" +
+               "name='" + name + '\'' +
+               ", description='" + description + '\'' +
+               ", engine='" + engine + '\'' +
+               ", engineVersion='" + engineVersion + '\'' +
+               ", specification='" + specification + '\'' +
+               ", storageSpace=" + storageSpace +
+               ", partitionNum=" + partitionNum +
+               ", accessUser='" + accessUser + '\'' +
+               ", password='" + password + '\'' +
+               ", vpcId='" + vpcId + '\'' +
+               ", securityGroupId='" + securityGroupId + '\'' +
+               ", subnetId='" + subnetId + '\'' +
+               ", availableZones=" + availableZones +
+               ", productId='" + productId + '\'' +
+               ", kafkaManagerUser='" + kafkaManagerUser + '\'' +
+               ", kafkaManagerPassword='" + kafkaManagerPassword + '\'' +
+               ", maintainBegin='" + maintainBegin + '\'' +
+               ", maintainEnd='" + maintainEnd + '\'' +
+               ", enablePublicip=" + enablePublicip +
+               ", publicBandwidth='" + publicBandwidth + '\'' +
+               ", publicipId='" + publicipId + '\'' +
+               ", sslEnable=" + sslEnable +
+               ", retentionPolicy='" + retentionPolicy + '\'' +
+               ", connectorEnable=" + connectorEnable +
+               ", enableAutoTopic=" + enableAutoTopic +
+               ", storageSpecCode='" + storageSpecCode + '\'' +
+               ", enterpriseProjectId='" + enterpriseProjectId + '\'' +
+               '}';
+    }
+}
diff --git a/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/models/ClientConfigurations.java b/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/models/CreateInstanceResponse.java
similarity index 63%
copy from components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/models/ClientConfigurations.java
copy to components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/models/CreateInstanceResponse.java
index 79ae690..df52b98 100644
--- a/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/models/ClientConfigurations.java
+++ b/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/models/CreateInstanceResponse.java
@@ -16,32 +16,22 @@
  */
 package org.apache.camel.component.huaweicloud.dms.models;
 
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.huaweicloud.sdk.core.SdkResponse;
+
 /**
- * Class to combine parameters which can be passed through exchange properties and endpoint parameters to avoid checking
- * both each time they are used
+ * Create instance response object
  */
-public class ClientConfigurations {
-    private String operation;
-    private String engine;
-    private String instanceId;
-
-    public ClientConfigurations() {
-    }
-
-    public String getOperation() {
-        return operation;
-    }
+public class CreateInstanceResponse extends SdkResponse {
 
-    public void setOperation(String operation) {
-        this.operation = operation;
-    }
-
-    public String getEngine() {
-        return engine;
-    }
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    @JsonProperty(value = "instance_id")
+    private String instanceId;
 
-    public void setEngine(String engine) {
-        this.engine = engine;
+    public CreateInstanceResponse withInstanceId(String instanceId) {
+        this.instanceId = instanceId;
+        return this;
     }
 
     public String getInstanceId() {
@@ -52,4 +42,10 @@ public class ClientConfigurations {
         this.instanceId = instanceId;
     }
 
+    @Override
+    public String toString() {
+        return "CreateInstanceResponse{" +
+               "instanceId='" + instanceId + '\'' +
+               '}';
+    }
 }
diff --git a/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/models/ClientConfigurations.java b/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/models/UpdateInstanceRequest.java
similarity index 52%
copy from components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/models/ClientConfigurations.java
copy to components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/models/UpdateInstanceRequest.java
index 79ae690..b44b30e 100644
--- a/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/models/ClientConfigurations.java
+++ b/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/models/UpdateInstanceRequest.java
@@ -16,32 +16,30 @@
  */
 package org.apache.camel.component.huaweicloud.dms.models;
 
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
 /**
- * Class to combine parameters which can be passed through exchange properties and endpoint parameters to avoid checking
- * both each time they are used
+ * Update instance request object
  */
-public class ClientConfigurations {
-    private String operation;
-    private String engine;
-    private String instanceId;
-
-    public ClientConfigurations() {
-    }
+public class UpdateInstanceRequest {
 
-    public String getOperation() {
-        return operation;
-    }
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    @JsonProperty(value = "instance_id")
+    private String instanceId;
 
-    public void setOperation(String operation) {
-        this.operation = operation;
-    }
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    @JsonProperty(value = "body")
+    private UpdateInstanceRequestBody body;
 
-    public String getEngine() {
-        return engine;
+    public UpdateInstanceRequest withInstanceId(String instanceId) {
+        this.instanceId = instanceId;
+        return this;
     }
 
-    public void setEngine(String engine) {
-        this.engine = engine;
+    public UpdateInstanceRequest withBody(UpdateInstanceRequestBody body) {
+        this.body = body;
+        return this;
     }
 
     public String getInstanceId() {
@@ -52,4 +50,19 @@ public class ClientConfigurations {
         this.instanceId = instanceId;
     }
 
+    public UpdateInstanceRequestBody getBody() {
+        return body;
+    }
+
+    public void setBody(UpdateInstanceRequestBody body) {
+        this.body = body;
+    }
+
+    @Override
+    public String toString() {
+        return "UpdateInstanceRequest{" +
+               "instanceId='" + instanceId + '\'' +
+               ", body=" + body +
+               '}';
+    }
 }
diff --git a/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/models/UpdateInstanceRequestBody.java b/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/models/UpdateInstanceRequestBody.java
new file mode 100644
index 0000000..6a4903e
--- /dev/null
+++ b/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/models/UpdateInstanceRequestBody.java
@@ -0,0 +1,158 @@
+/*
+ * 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.huaweicloud.dms.models;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * Update instance request body object
+ */
+public class UpdateInstanceRequestBody {
+
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    @JsonProperty(value = "name")
+    private String name;
+
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    @JsonProperty(value = "description")
+    private String description;
+
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    @JsonProperty(value = "maintain_begin")
+    private String maintainBegin;
+
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    @JsonProperty(value = "maintain_end")
+    private String maintainEnd;
+
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    @JsonProperty(value = "security_group_id")
+    private String securityGroupId;
+
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    @JsonProperty(value = "enable_publicip")
+    private Boolean enablePublicip;
+
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    @JsonProperty(value = "publicip_id")
+    private String publicipId;
+
+    public UpdateInstanceRequestBody withName(String name) {
+        this.name = name;
+        return this;
+    }
+
+    public UpdateInstanceRequestBody withDescription(String description) {
+        this.description = description;
+        return this;
+    }
+
+    public UpdateInstanceRequestBody withMaintainBegin(String maintainBegin) {
+        this.maintainBegin = maintainBegin;
+        return this;
+    }
+
+    public UpdateInstanceRequestBody withMaintainEnd(String maintainEnd) {
+        this.maintainEnd = maintainEnd;
+        return this;
+    }
+
+    public UpdateInstanceRequestBody withSecurityGroupId(String securityGroupId) {
+        this.securityGroupId = securityGroupId;
+        return this;
+    }
+
+    public UpdateInstanceRequestBody withEnablePublicip(Boolean enablePublicip) {
+        this.enablePublicip = enablePublicip;
+        return this;
+    }
+
+    public UpdateInstanceRequestBody withPublicipId(String publicipId) {
+        this.publicipId = publicipId;
+        return this;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getMaintainBegin() {
+        return maintainBegin;
+    }
+
+    public void setMaintainBegin(String maintainBegin) {
+        this.maintainBegin = maintainBegin;
+    }
+
+    public String getMaintainEnd() {
+        return maintainEnd;
+    }
+
+    public void setMaintainEnd(String maintainEnd) {
+        this.maintainEnd = maintainEnd;
+    }
+
+    public String getSecurityGroupId() {
+        return securityGroupId;
+    }
+
+    public void setSecurityGroupId(String securityGroupId) {
+        this.securityGroupId = securityGroupId;
+    }
+
+    public Boolean getEnablePublicip() {
+        return enablePublicip;
+    }
+
+    public void setEnablePublicip(Boolean enablePublicip) {
+        this.enablePublicip = enablePublicip;
+    }
+
+    public String getPublicipId() {
+        return publicipId;
+    }
+
+    public void setPublicipId(String publicipId) {
+        this.publicipId = publicipId;
+    }
+
+    @Override
+    public String toString() {
+        return "UpdateInstanceRequestBody{" +
+               "name='" + name + '\'' +
+               ", description='" + description + '\'' +
+               ", maintainBegin='" + maintainBegin + '\'' +
+               ", maintainEnd='" + maintainEnd + '\'' +
+               ", securityGroupId='" + securityGroupId + '\'' +
+               ", enablePublicip=" + enablePublicip +
+               ", publicipId='" + publicipId + '\'' +
+               '}';
+    }
+}
diff --git a/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/constants/DMSOperations.java b/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/models/UpdateInstanceResponse.java
similarity index 68%
copy from components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/constants/DMSOperations.java
copy to components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/models/UpdateInstanceResponse.java
index fa83f36..75f9935 100644
--- a/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/constants/DMSOperations.java
+++ b/components/camel-huawei/camel-huaweicloud-dms/src/main/java/org/apache/camel/component/huaweicloud/dms/models/UpdateInstanceResponse.java
@@ -14,16 +14,16 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.component.huaweicloud.dms.constants;
+package org.apache.camel.component.huaweicloud.dms.models;
+
+import com.huaweicloud.sdk.core.SdkResponse;
 
 /**
- * Constants for all the supported DMS operations
+ * Update instance response object
  */
-public final class DMSOperations {
-    public static final String DELETE_INSTANCE = "deleteInstance";
-    public static final String LIST_INSTANCES = "listInstances";
-    public static final String QUERY_INSTANCE = "queryInstance";
-
-    private DMSOperations() {
+public class UpdateInstanceResponse extends SdkResponse {
+    @Override
+    public String toString() {
+        return super.toString();
     }
 }
diff --git a/components/camel-huawei/camel-huaweicloud-dms/src/test/java/org/apache/camel/component/huaweicloud/dms/CreateInstanceJsonTest.java b/components/camel-huawei/camel-huaweicloud-dms/src/test/java/org/apache/camel/component/huaweicloud/dms/CreateInstanceJsonTest.java
new file mode 100644
index 0000000..1f4ccd2
--- /dev/null
+++ b/components/camel-huawei/camel-huaweicloud-dms/src/test/java/org/apache/camel/component/huaweicloud/dms/CreateInstanceJsonTest.java
@@ -0,0 +1,106 @@
+/*
+ * 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.huaweicloud.dms;
+
+import org.apache.camel.BindToRegistry;
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.huaweicloud.common.models.ServiceKeys;
+import org.apache.camel.component.huaweicloud.dms.models.CreateInstanceRequest;
+import org.apache.camel.component.huaweicloud.dms.models.CreateInstanceResponse;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+public class CreateInstanceJsonTest extends CamelTestSupport {
+    TestConfiguration testConfiguration = new TestConfiguration();
+
+    @BindToRegistry("dmsClient")
+    DmsClient mockClient = Mockito.mock(DmsClient.class);
+
+    @BindToRegistry("serviceKeys")
+    ServiceKeys serviceKeys = new ServiceKeys(
+            testConfiguration.getProperty("authenticationKey"),
+            testConfiguration.getProperty("secretKey"));
+
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:operation")
+                        .to("hwcloud-dms:createInstance?" +
+                            "serviceKeys=#serviceKeys" +
+                            "&projectId=" + testConfiguration.getProperty("projectId") +
+                            "&region=" + testConfiguration.getProperty("region") +
+                            "&instanceId=" + testConfiguration.getProperty("instanceId") +
+                            "&ignoreSslVerification=true" +
+                            "&dmsClient=#dmsClient")
+                        .log("Operation successful")
+                        .to("mock:operation_result");
+            }
+        };
+    }
+
+    @Test
+    public void testOperation() throws Exception {
+        CreateInstanceResponse response = new CreateInstanceResponse()
+                .withInstanceId("test-instance-id");
+
+        Mockito.when(mockClient.createInstance(Mockito.any(CreateInstanceRequest.class))).thenReturn(response);
+
+        MockEndpoint mock = getMockEndpoint("mock:operation_result");
+        mock.expectedMinimumMessageCount(1);
+
+        String sampleBody = "{" +
+                            "\"name\":\"" + testConfiguration.getProperty("name") + "\"," +
+                            "\"description\":\"" + testConfiguration.getProperty("description") + "\"," +
+                            "\"engine\":\"" + testConfiguration.getProperty("engine") + "\"," +
+                            "\"engine_version\":\"" + testConfiguration.getProperty("engineVersion") + "\"," +
+                            "\"specification\":\"" + testConfiguration.getProperty("specification") + "\"," +
+                            "\"storage_space\":1000," +
+                            "\"partition_num\":500," +
+                            "\"access_user\":\"" + testConfiguration.getProperty("accessUser") + "\"," +
+                            "\"password\":\"" + testConfiguration.getProperty("password") + "\"," +
+                            "\"vpc_id\":\"" + testConfiguration.getProperty("vpcId") + "\"," +
+                            "\"security_group_id\":\"" + testConfiguration.getProperty("securityGroupId") + "\"," +
+                            "\"subnet_id\":\"" + testConfiguration.getProperty("subnetId") + "\"," +
+                            "\"available_zones\":[\"" + testConfiguration.getProperty("availableZone") + "\"]," +
+                            "\"product_id\":\"" + testConfiguration.getProperty("productId") + "\"," +
+                            "\"kafka_manager_user\":\"" + testConfiguration.getProperty("kafkaManagerUser") + "\"," +
+                            "\"kafka_manager_password\":\"" + testConfiguration.getProperty("kafkaManagerPassword") + "\"," +
+                            "\"maintain_begin\":\"" + testConfiguration.getProperty("maintainBegin") + "\"," +
+                            "\"maintain_end\":\"" + testConfiguration.getProperty("maintainEnd") + "\"," +
+                            "\"enable_publicip\":true," +
+                            "\"public_bandwidth\":\"" + testConfiguration.getProperty("public_bandwidth") + "\"," +
+                            "\"publicip_id\":\"" + testConfiguration.getProperty("publicipId") + "\"," +
+                            "\"ssl_enable\":true," +
+                            "\"retention_policy\":\"" + testConfiguration.getProperty("retentionPolicy") + "\"," +
+                            "\"connector_enable\":false," +
+                            "\"enable_auto_topic\":true," +
+                            "\"storage_spec_code\":\"" + testConfiguration.getProperty("storageSpecCode") + "\"," +
+                            "\"enterprise_project_id\":\"" + testConfiguration.getProperty("enterpriseProjectId") + "\"" +
+                            "}";
+        template.sendBody("direct:operation", sampleBody);
+        Exchange responseExchange = mock.getExchanges().get(0);
+
+        mock.assertIsSatisfied();
+
+        assertEquals("{\"instance_id\":\"test-instance-id\"}",
+                responseExchange.getIn().getBody(String.class));
+    }
+}
diff --git a/components/camel-huawei/camel-huaweicloud-dms/src/test/java/org/apache/camel/component/huaweicloud/dms/CreateInstanceKafkaTest1.java b/components/camel-huawei/camel-huaweicloud-dms/src/test/java/org/apache/camel/component/huaweicloud/dms/CreateInstanceKafkaTest1.java
new file mode 100644
index 0000000..27d4f87
--- /dev/null
+++ b/components/camel-huawei/camel-huaweicloud-dms/src/test/java/org/apache/camel/component/huaweicloud/dms/CreateInstanceKafkaTest1.java
@@ -0,0 +1,100 @@
+/*
+ * 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.huaweicloud.dms;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.camel.BindToRegistry;
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.huaweicloud.common.models.ServiceKeys;
+import org.apache.camel.component.huaweicloud.dms.models.CreateInstanceRequest;
+import org.apache.camel.component.huaweicloud.dms.models.CreateInstanceResponse;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+public class CreateInstanceKafkaTest1 extends CamelTestSupport {
+    TestConfiguration testConfiguration = new TestConfiguration();
+
+    @BindToRegistry("dmsClient")
+    DmsClient mockClient = Mockito.mock(DmsClient.class);
+
+    @BindToRegistry("serviceKeys")
+    ServiceKeys serviceKeys = new ServiceKeys(
+            testConfiguration.getProperty("authenticationKey"),
+            testConfiguration.getProperty("secretKey"));
+
+    @BindToRegistry("availableZones")
+    List<String> availableZones = new ArrayList<>();
+
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:operation")
+                        .to("hwcloud-dms:createInstance?" +
+                            "serviceKeys=#serviceKeys" +
+                            "&projectId=" + testConfiguration.getProperty("projectId") +
+                            "&region=" + testConfiguration.getProperty("region") +
+                            "&instanceId=" + testConfiguration.getProperty("instanceId") +
+                            "&ignoreSslVerification=true" +
+                            "&dmsClient=#dmsClient" +
+
+                            "&name=" + testConfiguration.getProperty("name") +
+                            "&engine=kafka" +
+                            "&engineVersion=" + testConfiguration.getProperty("engineVersion") +
+                            "&specification=" + testConfiguration.getProperty("specification") +
+                            "&storageSpace=1000" +
+                            "&partitionNum=500" +
+                            "&vpcId=" + testConfiguration.getProperty("vpcId") +
+                            "&securityGroupId=" + testConfiguration.getProperty("securityGroupId") +
+                            "&subnetId=" + testConfiguration.getProperty("subnetId") +
+                            "&availableZones=#availableZones" +
+                            "&productId=" + testConfiguration.getProperty("productId") +
+                            "&kafkaManagerUser=" + testConfiguration.getProperty("kafkaManagerUser") +
+                            "&kafkaManagerPassword=" + testConfiguration.getProperty("kafkaManagerPassword") +
+                            "&storageSpecCode=" + testConfiguration.getProperty("storageSpecCode"))
+                        .log("Operation successful")
+                        .to("mock:operation_result");
+            }
+        };
+    }
+
+    @Test
+    public void testOperation() throws Exception {
+        CreateInstanceResponse response = new CreateInstanceResponse()
+                .withInstanceId("test-instance-id");
+
+        Mockito.when(mockClient.createInstance(Mockito.any(CreateInstanceRequest.class))).thenReturn(response);
+
+        MockEndpoint mock = getMockEndpoint("mock:operation_result");
+        mock.expectedMinimumMessageCount(1);
+
+        availableZones.add(testConfiguration.getProperty("availableZone"));
+
+        template.sendBody("direct:operation", "sample_body");
+        Exchange responseExchange = mock.getExchanges().get(0);
+
+        mock.assertIsSatisfied();
+
+        assertEquals("{\"instance_id\":\"test-instance-id\"}",
+                responseExchange.getIn().getBody(String.class));
+    }
+}
diff --git a/components/camel-huawei/camel-huaweicloud-dms/src/test/java/org/apache/camel/component/huaweicloud/dms/CreateInstanceKafkaTest2.java b/components/camel-huawei/camel-huaweicloud-dms/src/test/java/org/apache/camel/component/huaweicloud/dms/CreateInstanceKafkaTest2.java
new file mode 100644
index 0000000..0b7f8d0
--- /dev/null
+++ b/components/camel-huawei/camel-huaweicloud-dms/src/test/java/org/apache/camel/component/huaweicloud/dms/CreateInstanceKafkaTest2.java
@@ -0,0 +1,104 @@
+/*
+ * 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.huaweicloud.dms;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.camel.BindToRegistry;
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.huaweicloud.common.models.ServiceKeys;
+import org.apache.camel.component.huaweicloud.dms.constants.DMSProperties;
+import org.apache.camel.component.huaweicloud.dms.models.CreateInstanceRequest;
+import org.apache.camel.component.huaweicloud.dms.models.CreateInstanceResponse;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+public class CreateInstanceKafkaTest2 extends CamelTestSupport {
+    TestConfiguration testConfiguration = new TestConfiguration();
+
+    @BindToRegistry("dmsClient")
+    DmsClient mockClient = Mockito.mock(DmsClient.class);
+
+    @BindToRegistry("serviceKeys")
+    ServiceKeys serviceKeys = new ServiceKeys(
+            testConfiguration.getProperty("authenticationKey"),
+            testConfiguration.getProperty("secretKey"));
+
+    @BindToRegistry("availableZones")
+    List<String> availableZones = new ArrayList<>();
+
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:operation")
+                        .setProperty(DMSProperties.NAME, constant(testConfiguration.getProperty("name")))
+                        .setProperty(DMSProperties.ENGINE, constant("kafka"))
+                        .setProperty(DMSProperties.ENGINE_VERSION, constant(testConfiguration.getProperty("engineVersion")))
+                        .setProperty(DMSProperties.SPECIFICATION, constant(testConfiguration.getProperty("specification")))
+                        .setProperty(DMSProperties.STORAGE_SPACE, constant(1000))
+                        .setProperty(DMSProperties.PARTITION_NUM, constant(500))
+                        .setProperty(DMSProperties.VPC_ID, constant(testConfiguration.getProperty("vpcId")))
+                        .setProperty(DMSProperties.SECURITY_GROUP_ID,
+                                constant(testConfiguration.getProperty("securityGroupId")))
+                        .setProperty(DMSProperties.SUBNET_ID, constant(testConfiguration.getProperty("subnetId")))
+                        .setProperty(DMSProperties.AVAILABLE_ZONES, constant(availableZones))
+                        .setProperty(DMSProperties.PRODUCT_ID, constant(testConfiguration.getProperty("productId")))
+                        .setProperty(DMSProperties.KAFKA_MANAGER_USER,
+                                constant(testConfiguration.getProperty("kafkaManagerUser")))
+                        .setProperty(DMSProperties.KAFKA_MANAGER_PASSWORD,
+                                constant(testConfiguration.getProperty("kafkaManagerPassword")))
+                        .setProperty(DMSProperties.STORAGE_SPEC_CODE,
+                                constant(testConfiguration.getProperty("storageSpecCode")))
+                        .to("hwcloud-dms:createInstance?" +
+                            "serviceKeys=#serviceKeys" +
+                            "&projectId=" + testConfiguration.getProperty("projectId") +
+                            "&region=" + testConfiguration.getProperty("region") +
+                            "&instanceId=" + testConfiguration.getProperty("instanceId") +
+                            "&ignoreSslVerification=true" +
+                            "&dmsClient=#dmsClient")
+                        .log("Operation successful")
+                        .to("mock:operation_result");
+            }
+        };
+    }
+
+    @Test
+    public void testOperation() throws Exception {
+        CreateInstanceResponse response = new CreateInstanceResponse()
+                .withInstanceId("test-instance-id");
+
+        Mockito.when(mockClient.createInstance(Mockito.any(CreateInstanceRequest.class))).thenReturn(response);
+
+        MockEndpoint mock = getMockEndpoint("mock:operation_result");
+        mock.expectedMinimumMessageCount(1);
+
+        availableZones.add(testConfiguration.getProperty("availableZone"));
+
+        template.sendBody("direct:operation", "sample_body");
+        Exchange responseExchange = mock.getExchanges().get(0);
+
+        mock.assertIsSatisfied();
+
+        assertEquals("{\"instance_id\":\"test-instance-id\"}",
+                responseExchange.getIn().getBody(String.class));
+    }
+}
diff --git a/components/camel-huawei/camel-huaweicloud-dms/src/test/java/org/apache/camel/component/huaweicloud/dms/CreateInstancePojoTest.java b/components/camel-huawei/camel-huaweicloud-dms/src/test/java/org/apache/camel/component/huaweicloud/dms/CreateInstancePojoTest.java
new file mode 100644
index 0000000..2f63f87
--- /dev/null
+++ b/components/camel-huawei/camel-huaweicloud-dms/src/test/java/org/apache/camel/component/huaweicloud/dms/CreateInstancePojoTest.java
@@ -0,0 +1,111 @@
+/*
+ * 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.huaweicloud.dms;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.camel.BindToRegistry;
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.huaweicloud.common.models.ServiceKeys;
+import org.apache.camel.component.huaweicloud.dms.models.CreateInstanceRequest;
+import org.apache.camel.component.huaweicloud.dms.models.CreateInstanceRequestBody;
+import org.apache.camel.component.huaweicloud.dms.models.CreateInstanceResponse;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+public class CreateInstancePojoTest extends CamelTestSupport {
+    TestConfiguration testConfiguration = new TestConfiguration();
+
+    @BindToRegistry("dmsClient")
+    DmsClient mockClient = Mockito.mock(DmsClient.class);
+
+    @BindToRegistry("serviceKeys")
+    ServiceKeys serviceKeys = new ServiceKeys(
+            testConfiguration.getProperty("authenticationKey"),
+            testConfiguration.getProperty("secretKey"));
+
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:operation")
+                        .to("hwcloud-dms:createInstance?" +
+                            "serviceKeys=#serviceKeys" +
+                            "&projectId=" + testConfiguration.getProperty("projectId") +
+                            "&region=" + testConfiguration.getProperty("region") +
+                            "&instanceId=" + testConfiguration.getProperty("instanceId") +
+                            "&ignoreSslVerification=true" +
+                            "&dmsClient=#dmsClient")
+                        .log("Operation successful")
+                        .to("mock:operation_result");
+            }
+        };
+    }
+
+    @Test
+    public void testOperation() throws Exception {
+        CreateInstanceResponse response = new CreateInstanceResponse()
+                .withInstanceId("test-instance-id");
+
+        Mockito.when(mockClient.createInstance(Mockito.any(CreateInstanceRequest.class))).thenReturn(response);
+
+        MockEndpoint mock = getMockEndpoint("mock:operation_result");
+        mock.expectedMinimumMessageCount(1);
+
+        List<String> availableZones = new ArrayList<>();
+        availableZones.add(testConfiguration.getProperty("availableZone"));
+        CreateInstanceRequestBody sampleBody = new CreateInstanceRequestBody()
+                .withName(testConfiguration.getProperty("name"))
+                .withDescription(testConfiguration.getProperty("description"))
+                .withEngine(testConfiguration.getProperty("engine"))
+                .withEngineVersion(testConfiguration.getProperty("engineVersion"))
+                .withSpecification(testConfiguration.getProperty("specification"))
+                .withStorageSpace(1000)
+                .withPartitionNum(500)
+                .withAccessUser(testConfiguration.getProperty("accessUser"))
+                .withPassword(testConfiguration.getProperty("password"))
+                .withVpcId(testConfiguration.getProperty("vpcId"))
+                .withSecurityGroupId(testConfiguration.getProperty("securityGroupId"))
+                .withSubnetId(testConfiguration.getProperty("subnetId"))
+                .withAvailableZones(availableZones)
+                .withProductId(testConfiguration.getProperty("productId"))
+                .withKafkaManagerUser(testConfiguration.getProperty("kafkaManagerUser"))
+                .withKafkaManagerPassword(testConfiguration.getProperty("kafkaManagerPassword"))
+                .withMaintainBegin(testConfiguration.getProperty("maintainBegin"))
+                .withMaintainEnd(testConfiguration.getProperty("maintainEnd"))
+                .withEnablePublicip(true)
+                .withPublicBandwidth(testConfiguration.getProperty("publicBandwidth"))
+                .withPublicipId(testConfiguration.getProperty("publicipId"))
+                .withSslEnable(true)
+                .withRetentionPolicy(testConfiguration.getProperty("retentionPolicy"))
+                .withConnectorEnable(false)
+                .withEnableAutoTopic(true)
+                .withStorageSpecCode(testConfiguration.getProperty("storageSpecCode"))
+                .withEnterpriseProjectId(testConfiguration.getProperty("enterpriseProjectId"));
+        template.sendBody("direct:operation", sampleBody);
+        Exchange responseExchange = mock.getExchanges().get(0);
+
+        mock.assertIsSatisfied();
+
+        assertEquals("{\"instance_id\":\"test-instance-id\"}",
+                responseExchange.getIn().getBody(String.class));
+    }
+}
diff --git a/components/camel-huawei/camel-huaweicloud-dms/src/test/java/org/apache/camel/component/huaweicloud/dms/CreateInstanceRmqTest1.java b/components/camel-huawei/camel-huaweicloud-dms/src/test/java/org/apache/camel/component/huaweicloud/dms/CreateInstanceRmqTest1.java
new file mode 100644
index 0000000..f94a5bc
--- /dev/null
+++ b/components/camel-huawei/camel-huaweicloud-dms/src/test/java/org/apache/camel/component/huaweicloud/dms/CreateInstanceRmqTest1.java
@@ -0,0 +1,97 @@
+/*
+ * 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.huaweicloud.dms;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.camel.BindToRegistry;
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.huaweicloud.common.models.ServiceKeys;
+import org.apache.camel.component.huaweicloud.dms.models.CreateInstanceRequest;
+import org.apache.camel.component.huaweicloud.dms.models.CreateInstanceResponse;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+public class CreateInstanceRmqTest1 extends CamelTestSupport {
+    TestConfiguration testConfiguration = new TestConfiguration();
+
+    @BindToRegistry("dmsClient")
+    DmsClient mockClient = Mockito.mock(DmsClient.class);
+
+    @BindToRegistry("serviceKeys")
+    ServiceKeys serviceKeys = new ServiceKeys(
+            testConfiguration.getProperty("authenticationKey"),
+            testConfiguration.getProperty("secretKey"));
+
+    @BindToRegistry("availableZones")
+    List<String> availableZones = new ArrayList<>();
+
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:operation")
+                        .to("hwcloud-dms:createInstance?" +
+                            "serviceKeys=#serviceKeys" +
+                            "&projectId=" + testConfiguration.getProperty("projectId") +
+                            "&region=" + testConfiguration.getProperty("region") +
+                            "&instanceId=" + testConfiguration.getProperty("instanceId") +
+                            "&ignoreSslVerification=true" +
+                            "&dmsClient=#dmsClient" +
+
+                            "&name=" + testConfiguration.getProperty("name") +
+                            "&engine=rabbitmq" +
+                            "&storageSpace=1000" +
+                            "&accessUser=" + testConfiguration.getProperty("accessUser") +
+                            "&password=" + testConfiguration.getProperty("password") +
+                            "&vpcId=" + testConfiguration.getProperty("vpcId") +
+                            "&securityGroupId=" + testConfiguration.getProperty("securityGroupId") +
+                            "&subnetId=" + testConfiguration.getProperty("subnetId") +
+                            "&availableZones=#availableZones" +
+                            "&productId=" + testConfiguration.getProperty("productId") +
+                            "&storageSpecCode=" + testConfiguration.getProperty("storageSpecCode"))
+                        .log("Operation successful")
+                        .to("mock:operation_result");
+            }
+        };
+    }
+
+    @Test
+    public void testOperation() throws Exception {
+        CreateInstanceResponse response = new CreateInstanceResponse()
+                .withInstanceId("test-instance-id");
+
+        Mockito.when(mockClient.createInstance(Mockito.any(CreateInstanceRequest.class))).thenReturn(response);
+
+        MockEndpoint mock = getMockEndpoint("mock:operation_result");
+        mock.expectedMinimumMessageCount(1);
+
+        availableZones.add(testConfiguration.getProperty("availableZone"));
+
+        template.sendBody("direct:operation", "sample_body");
+        Exchange responseExchange = mock.getExchanges().get(0);
+
+        mock.assertIsSatisfied();
+
+        assertEquals("{\"instance_id\":\"test-instance-id\"}",
+                responseExchange.getIn().getBody(String.class));
+    }
+}
diff --git a/components/camel-huawei/camel-huaweicloud-dms/src/test/java/org/apache/camel/component/huaweicloud/dms/CreateInstanceRmqTest2.java b/components/camel-huawei/camel-huaweicloud-dms/src/test/java/org/apache/camel/component/huaweicloud/dms/CreateInstanceRmqTest2.java
new file mode 100644
index 0000000..3098730
--- /dev/null
+++ b/components/camel-huawei/camel-huaweicloud-dms/src/test/java/org/apache/camel/component/huaweicloud/dms/CreateInstanceRmqTest2.java
@@ -0,0 +1,99 @@
+/*
+ * 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.huaweicloud.dms;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.camel.BindToRegistry;
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.huaweicloud.common.models.ServiceKeys;
+import org.apache.camel.component.huaweicloud.dms.constants.DMSProperties;
+import org.apache.camel.component.huaweicloud.dms.models.CreateInstanceRequest;
+import org.apache.camel.component.huaweicloud.dms.models.CreateInstanceResponse;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+public class CreateInstanceRmqTest2 extends CamelTestSupport {
+    TestConfiguration testConfiguration = new TestConfiguration();
+
+    @BindToRegistry("dmsClient")
+    DmsClient mockClient = Mockito.mock(DmsClient.class);
+
+    @BindToRegistry("serviceKeys")
+    ServiceKeys serviceKeys = new ServiceKeys(
+            testConfiguration.getProperty("authenticationKey"),
+            testConfiguration.getProperty("secretKey"));
+
+    @BindToRegistry("availableZones")
+    List<String> availableZones = new ArrayList<>();
+
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:operation")
+                        .setProperty(DMSProperties.NAME, constant(testConfiguration.getProperty("name")))
+                        .setProperty(DMSProperties.ENGINE, constant("rabbitmq"))
+                        .setProperty(DMSProperties.STORAGE_SPACE, constant(1000))
+                        .setProperty(DMSProperties.ACCESS_USER, constant(testConfiguration.getProperty("accessUser")))
+                        .setProperty(DMSProperties.PASSWORD, constant(testConfiguration.getProperty("password")))
+                        .setProperty(DMSProperties.VPC_ID, constant(testConfiguration.getProperty("vpcId")))
+                        .setProperty(DMSProperties.SECURITY_GROUP_ID,
+                                constant(testConfiguration.getProperty("securityGroupId")))
+                        .setProperty(DMSProperties.SUBNET_ID, constant(testConfiguration.getProperty("subnetId")))
+                        .setProperty(DMSProperties.AVAILABLE_ZONES, constant(availableZones))
+                        .setProperty(DMSProperties.PRODUCT_ID, constant(testConfiguration.getProperty("productId")))
+                        .setProperty(DMSProperties.STORAGE_SPEC_CODE,
+                                constant(testConfiguration.getProperty("storageSpecCode")))
+                        .to("hwcloud-dms:createInstance?" +
+                            "serviceKeys=#serviceKeys" +
+                            "&projectId=" + testConfiguration.getProperty("projectId") +
+                            "&region=" + testConfiguration.getProperty("region") +
+                            "&instanceId=" + testConfiguration.getProperty("instanceId") +
+                            "&ignoreSslVerification=true" +
+                            "&dmsClient=#dmsClient")
+                        .log("Operation successful")
+                        .to("mock:operation_result");
+            }
+        };
+    }
+
+    @Test
+    public void testOperation() throws Exception {
+        CreateInstanceResponse response = new CreateInstanceResponse()
+                .withInstanceId("test-instance-id");
+
+        Mockito.when(mockClient.createInstance(Mockito.any(CreateInstanceRequest.class))).thenReturn(response);
+
+        MockEndpoint mock = getMockEndpoint("mock:operation_result");
+        mock.expectedMinimumMessageCount(1);
+
+        availableZones.add(testConfiguration.getProperty("availableZone"));
+
+        template.sendBody("direct:operation", "sample_body");
+        Exchange responseExchange = mock.getExchanges().get(0);
+
+        mock.assertIsSatisfied();
+
+        assertEquals("{\"instance_id\":\"test-instance-id\"}",
+                responseExchange.getIn().getBody(String.class));
+    }
+}
diff --git a/components/camel-huawei/camel-huaweicloud-dms/src/test/java/org/apache/camel/component/huaweicloud/dms/TestConfiguration.java b/components/camel-huawei/camel-huaweicloud-dms/src/test/java/org/apache/camel/component/huaweicloud/dms/TestConfiguration.java
index f5d3317..fad5538 100644
--- a/components/camel-huawei/camel-huaweicloud-dms/src/test/java/org/apache/camel/component/huaweicloud/dms/TestConfiguration.java
+++ b/components/camel-huawei/camel-huaweicloud-dms/src/test/java/org/apache/camel/component/huaweicloud/dms/TestConfiguration.java
@@ -35,6 +35,27 @@ public class TestConfiguration {
         propertyMap.put("projectId", "dummy_project_id");
         propertyMap.put("engine", "kafka");
         propertyMap.put("instanceId", "dummy_id");
+
+        propertyMap.put("name", "dummy_name");
+        propertyMap.put("description", "dummy_description");
+        propertyMap.put("engineVersion", "dummy_engine_version");
+        propertyMap.put("specification", "dummy_specification");
+        propertyMap.put("accessUser", "dummy_access_user");
+        propertyMap.put("password", "dummy_password");
+        propertyMap.put("vpcId", "dummy_vpc_id");
+        propertyMap.put("securityGroupId", "dummy_security_group_id");
+        propertyMap.put("subnetId", "dummy_subnet_id");
+        propertyMap.put("availableZone", "dummy_available_zone_id");
+        propertyMap.put("productId", "dummy_product_id");
+        propertyMap.put("kafkaManagerUser", "dummy_kafka_user");
+        propertyMap.put("kafkaManagerPassword", "dummy_kafka_password");
+        propertyMap.put("maintainBegin", "dummy_maintain_begin");
+        propertyMap.put("maintainEnd", "dummy_maintain_end");
+        propertyMap.put("publicBandwidth", "dummy_public_bandwidth");
+        propertyMap.put("publicipId", "dummy_publicip_id");
+        propertyMap.put("retentionPolicy", "dummy_retention_policy");
+        propertyMap.put("storageSpecCode", "dummy_storage_spec_code");
+        propertyMap.put("enterpriseProjectId", "dummy_enterprise_id");
     }
 
     public String getProperty(String key) {
diff --git a/components/camel-huawei/camel-huaweicloud-dms/src/test/java/org/apache/camel/component/huaweicloud/dms/UpdateInstanceJsonTest.java b/components/camel-huawei/camel-huaweicloud-dms/src/test/java/org/apache/camel/component/huaweicloud/dms/UpdateInstanceJsonTest.java
new file mode 100644
index 0000000..ab02fbb
--- /dev/null
+++ b/components/camel-huawei/camel-huaweicloud-dms/src/test/java/org/apache/camel/component/huaweicloud/dms/UpdateInstanceJsonTest.java
@@ -0,0 +1,85 @@
+/*
+ * 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.huaweicloud.dms;
+
+import org.apache.camel.BindToRegistry;
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.huaweicloud.common.models.ServiceKeys;
+import org.apache.camel.component.huaweicloud.dms.constants.DMSProperties;
+import org.apache.camel.component.huaweicloud.dms.models.UpdateInstanceRequest;
+import org.apache.camel.component.huaweicloud.dms.models.UpdateInstanceResponse;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+public class UpdateInstanceJsonTest extends CamelTestSupport {
+    TestConfiguration testConfiguration = new TestConfiguration();
+
+    @BindToRegistry("dmsClient")
+    DmsClient mockClient = Mockito.mock(DmsClient.class);
+
+    @BindToRegistry("serviceKeys")
+    ServiceKeys serviceKeys = new ServiceKeys(
+            testConfiguration.getProperty("authenticationKey"),
+            testConfiguration.getProperty("secretKey"));
+
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:operation")
+                        .to("hwcloud-dms:updateInstance?" +
+                            "serviceKeys=#serviceKeys" +
+                            "&projectId=" + testConfiguration.getProperty("projectId") +
+                            "&region=" + testConfiguration.getProperty("region") +
+                            "&instanceId=" + testConfiguration.getProperty("instanceId") +
+                            "&ignoreSslVerification=true" +
+                            "&dmsClient=#dmsClient")
+                        .log("Operation successful")
+                        .to("mock:operation_result");
+            }
+        };
+    }
+
+    @Test
+    public void testOperation() throws Exception {
+        UpdateInstanceResponse response = new UpdateInstanceResponse();
+
+        Mockito.when(mockClient.updateInstance(Mockito.any(UpdateInstanceRequest.class))).thenReturn(response);
+
+        MockEndpoint mock = getMockEndpoint("mock:operation_result");
+        mock.expectedMinimumMessageCount(1);
+
+        String sampleBody = "{" +
+                            "\"name\":\"" + testConfiguration.getProperty("name") + "\"," +
+                            "\"description\":\"" + testConfiguration.getProperty("description") + "\"," +
+                            "\"maintain_begin\":\"" + testConfiguration.getProperty("maintainBegin") + "\"," +
+                            "\"maintain_end\":\"" + testConfiguration.getProperty("maintainEnd") + "\"," +
+                            "\"security_group_id\":\"" + testConfiguration.getProperty("securityGroupId") + "\"," +
+                            "\"enable_publicip\":\"" + testConfiguration.getProperty("enablePublicip") + "\"," +
+                            "\"publicip_id\":\"" + testConfiguration.getProperty("publicipId") + "\"" +
+                            "}";
+        template.sendBody("direct:operation", sampleBody);
+        Exchange responseExchange = mock.getExchanges().get(0);
+
+        mock.assertIsSatisfied();
+
+        assertTrue(responseExchange.getProperty(DMSProperties.INSTANCE_UPDATED, boolean.class));
+    }
+}
diff --git a/components/camel-huawei/camel-huaweicloud-dms/src/test/java/org/apache/camel/component/huaweicloud/dms/UpdateInstancePojoTest.java b/components/camel-huawei/camel-huaweicloud-dms/src/test/java/org/apache/camel/component/huaweicloud/dms/UpdateInstancePojoTest.java
new file mode 100644
index 0000000..780969c
--- /dev/null
+++ b/components/camel-huawei/camel-huaweicloud-dms/src/test/java/org/apache/camel/component/huaweicloud/dms/UpdateInstancePojoTest.java
@@ -0,0 +1,85 @@
+/*
+ * 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.huaweicloud.dms;
+
+import org.apache.camel.BindToRegistry;
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.huaweicloud.common.models.ServiceKeys;
+import org.apache.camel.component.huaweicloud.dms.constants.DMSProperties;
+import org.apache.camel.component.huaweicloud.dms.models.UpdateInstanceRequest;
+import org.apache.camel.component.huaweicloud.dms.models.UpdateInstanceRequestBody;
+import org.apache.camel.component.huaweicloud.dms.models.UpdateInstanceResponse;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+public class UpdateInstancePojoTest extends CamelTestSupport {
+    TestConfiguration testConfiguration = new TestConfiguration();
+
+    @BindToRegistry("dmsClient")
+    DmsClient mockClient = Mockito.mock(DmsClient.class);
+
+    @BindToRegistry("serviceKeys")
+    ServiceKeys serviceKeys = new ServiceKeys(
+            testConfiguration.getProperty("authenticationKey"),
+            testConfiguration.getProperty("secretKey"));
+
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:operation")
+                        .to("hwcloud-dms:updateInstance?" +
+                            "serviceKeys=#serviceKeys" +
+                            "&projectId=" + testConfiguration.getProperty("projectId") +
+                            "&region=" + testConfiguration.getProperty("region") +
+                            "&instanceId=" + testConfiguration.getProperty("instanceId") +
+                            "&ignoreSslVerification=true" +
+                            "&dmsClient=#dmsClient")
+                        .log("Operation successful")
+                        .to("mock:operation_result");
+            }
+        };
+    }
+
+    @Test
+    public void testOperation() throws Exception {
+        UpdateInstanceResponse response = new UpdateInstanceResponse();
+
+        Mockito.when(mockClient.updateInstance(Mockito.any(UpdateInstanceRequest.class))).thenReturn(response);
+
+        MockEndpoint mock = getMockEndpoint("mock:operation_result");
+        mock.expectedMinimumMessageCount(1);
+
+        UpdateInstanceRequestBody sampleBody = new UpdateInstanceRequestBody()
+                .withName(testConfiguration.getProperty("name"))
+                .withDescription(testConfiguration.getProperty("description"))
+                .withMaintainBegin(testConfiguration.getProperty("maintainBegin"))
+                .withMaintainEnd(testConfiguration.getProperty("maintainEnd"))
+                .withSecurityGroupId(testConfiguration.getProperty("securityGroupId"))
+                .withEnablePublicip(true)
+                .withPublicipId(testConfiguration.getProperty("publicipId"));
+        template.sendBody("direct:operation", sampleBody);
+        Exchange responseExchange = mock.getExchanges().get(0);
+
+        mock.assertIsSatisfied();
+
+        assertTrue(responseExchange.getProperty(DMSProperties.INSTANCE_UPDATED, boolean.class));
+    }
+}
diff --git a/components/camel-huawei/camel-huaweicloud-dms/src/test/java/org/apache/camel/component/huaweicloud/dms/constants/DMSOperationsTest.java b/components/camel-huawei/camel-huaweicloud-dms/src/test/java/org/apache/camel/component/huaweicloud/dms/constants/DMSConstantsTest.java
similarity index 80%
copy from components/camel-huawei/camel-huaweicloud-dms/src/test/java/org/apache/camel/component/huaweicloud/dms/constants/DMSOperationsTest.java
copy to components/camel-huawei/camel-huaweicloud-dms/src/test/java/org/apache/camel/component/huaweicloud/dms/constants/DMSConstantsTest.java
index 44deb09..d4ade66 100644
--- a/components/camel-huawei/camel-huaweicloud-dms/src/test/java/org/apache/camel/component/huaweicloud/dms/constants/DMSOperationsTest.java
+++ b/components/camel-huawei/camel-huaweicloud-dms/src/test/java/org/apache/camel/component/huaweicloud/dms/constants/DMSConstantsTest.java
@@ -20,11 +20,10 @@ import org.junit.Test;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
-public class DMSOperationsTest {
+public class DMSConstantsTest {
     @Test
     public void test() {
-        assertEquals("deleteInstance", DMSOperations.DELETE_INSTANCE);
-        assertEquals("listInstances", DMSOperations.LIST_INSTANCES);
-        assertEquals("queryInstance", DMSOperations.QUERY_INSTANCE);
+        assertEquals("kafka", DMSConstants.KAFKA);
+        assertEquals("rabbitmq", DMSConstants.RABBITMQ);
     }
 }
diff --git a/components/camel-huawei/camel-huaweicloud-dms/src/test/java/org/apache/camel/component/huaweicloud/dms/constants/DMSOperationsTest.java b/components/camel-huawei/camel-huaweicloud-dms/src/test/java/org/apache/camel/component/huaweicloud/dms/constants/DMSOperationsTest.java
index 44deb09..b8e7e55 100644
--- a/components/camel-huawei/camel-huaweicloud-dms/src/test/java/org/apache/camel/component/huaweicloud/dms/constants/DMSOperationsTest.java
+++ b/components/camel-huawei/camel-huaweicloud-dms/src/test/java/org/apache/camel/component/huaweicloud/dms/constants/DMSOperationsTest.java
@@ -23,8 +23,10 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 public class DMSOperationsTest {
     @Test
     public void test() {
+        assertEquals("createInstance", DMSOperations.CREATE_INSTANCE);
         assertEquals("deleteInstance", DMSOperations.DELETE_INSTANCE);
         assertEquals("listInstances", DMSOperations.LIST_INSTANCES);
         assertEquals("queryInstance", DMSOperations.QUERY_INSTANCE);
+        assertEquals("updateInstance", DMSOperations.UPDATE_INSTANCE);
     }
 }
diff --git a/components/camel-huawei/camel-huaweicloud-dms/src/test/java/org/apache/camel/component/huaweicloud/dms/constants/DMSPropertiesTest.java b/components/camel-huawei/camel-huaweicloud-dms/src/test/java/org/apache/camel/component/huaweicloud/dms/constants/DMSPropertiesTest.java
index 6184345..2a87d5f 100644
--- a/components/camel-huawei/camel-huaweicloud-dms/src/test/java/org/apache/camel/component/huaweicloud/dms/constants/DMSPropertiesTest.java
+++ b/components/camel-huawei/camel-huaweicloud-dms/src/test/java/org/apache/camel/component/huaweicloud/dms/constants/DMSPropertiesTest.java
@@ -26,7 +26,23 @@ public class DMSPropertiesTest {
         assertEquals("CamelHwCloudDmsOperation", DMSProperties.OPERATION);
         assertEquals("CamelHwCloudDmsEngine", DMSProperties.ENGINE);
         assertEquals("CamelHwCloudDmsInstanceId", DMSProperties.INSTANCE_ID);
+        assertEquals("CamelHwCloudDmsName", DMSProperties.NAME);
+        assertEquals("CamelHwCloudDmsEngineVersion", DMSProperties.ENGINE_VERSION);
+        assertEquals("CamelHwCloudDmsSpecification", DMSProperties.SPECIFICATION);
+        assertEquals("CamelHwCloudDmsStorageSpace", DMSProperties.STORAGE_SPACE);
+        assertEquals("CamelHwCloudDmsPartitionNum", DMSProperties.PARTITION_NUM);
+        assertEquals("CamelHwCloudDmsAccessUser", DMSProperties.ACCESS_USER);
+        assertEquals("CamelHwCloudDmsPassword", DMSProperties.PASSWORD);
+        assertEquals("CamelHwCloudDmsVpcId", DMSProperties.VPC_ID);
+        assertEquals("CamelHwCloudDmsSecurityGroupId", DMSProperties.SECURITY_GROUP_ID);
+        assertEquals("CamelHwCloudDmsSubnetId", DMSProperties.SUBNET_ID);
+        assertEquals("CamelHwCloudDmsAvailableZones", DMSProperties.AVAILABLE_ZONES);
+        assertEquals("CamelHwCloudDmsProductId", DMSProperties.PRODUCT_ID);
+        assertEquals("CamelHwCloudDmsKafkaManagerUser", DMSProperties.KAFKA_MANAGER_USER);
+        assertEquals("CamelHwCloudDmsKafkaManagerPassword", DMSProperties.KAFKA_MANAGER_PASSWORD);
+        assertEquals("CamelHwCloudDmsStorageSpecCode", DMSProperties.STORAGE_SPEC_CODE);
 
         assertEquals("CamelHwCloudDmsInstanceDeleted", DMSProperties.INSTANCE_DELETED);
+        assertEquals("CamelHwCloudDmsInstanceUpdated", DMSProperties.INSTANCE_UPDATED);
     }
 }