You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2022/01/28 06:03:30 UTC

[camel] 01/02: CAMEL-17321: Add HuaweiCloud FaceRecognitionService(FRS) Component (#6838)

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

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

commit 7c34b78b8ba0aba1020ac87c626615222a49859a
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Fri Jan 28 06:54:25 2022 +0100

    CAMEL-17321: Add HuaweiCloud FaceRecognitionService(FRS) Component (#6838)
---
 .../frs/FaceRecognitionComponentConfigurer.java    |  55 +++++++
 .../frs/FaceRecognitionEndpointConfigurer.java     | 172 +++++++++++++++++++++
 .../frs/FaceRecognitionEndpointUriFactory.java     |  97 ++++++++++++
 .../services/org/apache/camel/component.properties |   7 +
 .../org/apache/camel/component/hwcloud-frs         |   2 +
 .../apache/camel/configurer/hwcloud-frs-component  |   2 +
 .../apache/camel/configurer/hwcloud-frs-endpoint   |   2 +
 .../apache/camel/urifactory/hwcloud-frs-endpoint   |   2 +
 .../component/huaweicloud/frs/hwcloud-frs.json     |  54 +++++++
 .../src/main/docs/hwcloud-frs-component.adoc       |   8 +-
 ...ceDetectionWithImageBae64AndMockClientTest.java |  12 +-
 .../modules/ROOT/examples/json/hwcloud-frs.json    |   1 +
 docs/components/modules/ROOT/nav.adoc              |   1 +
 .../modules/ROOT/pages/hwcloud-frs-component.adoc  |   1 +
 14 files changed, 406 insertions(+), 10 deletions(-)

diff --git a/components/camel-huawei/camel-huaweicloud-frs/src/generated/java/org/apache/camel/component/huaweicloud/frs/FaceRecognitionComponentConfigurer.java b/components/camel-huawei/camel-huaweicloud-frs/src/generated/java/org/apache/camel/component/huaweicloud/frs/FaceRecognitionComponentConfigurer.java
new file mode 100644
index 0000000..837c1d8
--- /dev/null
+++ b/components/camel-huawei/camel-huaweicloud-frs/src/generated/java/org/apache/camel/component/huaweicloud/frs/FaceRecognitionComponentConfigurer.java
@@ -0,0 +1,55 @@
+/* Generated by camel build tools - do NOT edit this file! */
+package org.apache.camel.component.huaweicloud.frs;
+
+import java.util.Map;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.spi.ExtendedPropertyConfigurerGetter;
+import org.apache.camel.spi.PropertyConfigurerGetter;
+import org.apache.camel.spi.ConfigurerStrategy;
+import org.apache.camel.spi.GeneratedPropertyConfigurer;
+import org.apache.camel.util.CaseInsensitiveMap;
+import org.apache.camel.support.component.PropertyConfigurerSupport;
+
+/**
+ * Generated by camel build tools - do NOT edit this file!
+ */
+@SuppressWarnings("unchecked")
+public class FaceRecognitionComponentConfigurer extends PropertyConfigurerSupport implements GeneratedPropertyConfigurer, PropertyConfigurerGetter {
+
+    @Override
+    public boolean configure(CamelContext camelContext, Object obj, String name, Object value, boolean ignoreCase) {
+        FaceRecognitionComponent target = (FaceRecognitionComponent) obj;
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "autowiredenabled":
+        case "autowiredEnabled": target.setAutowiredEnabled(property(camelContext, boolean.class, value)); return true;
+        case "lazystartproducer":
+        case "lazyStartProducer": target.setLazyStartProducer(property(camelContext, boolean.class, value)); return true;
+        default: return false;
+        }
+    }
+
+    @Override
+    public Class<?> getOptionType(String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "autowiredenabled":
+        case "autowiredEnabled": return boolean.class;
+        case "lazystartproducer":
+        case "lazyStartProducer": return boolean.class;
+        default: return null;
+        }
+    }
+
+    @Override
+    public Object getOptionValue(Object obj, String name, boolean ignoreCase) {
+        FaceRecognitionComponent target = (FaceRecognitionComponent) obj;
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "autowiredenabled":
+        case "autowiredEnabled": return target.isAutowiredEnabled();
+        case "lazystartproducer":
+        case "lazyStartProducer": return target.isLazyStartProducer();
+        default: return null;
+        }
+    }
+}
+
diff --git a/components/camel-huawei/camel-huaweicloud-frs/src/generated/java/org/apache/camel/component/huaweicloud/frs/FaceRecognitionEndpointConfigurer.java b/components/camel-huawei/camel-huaweicloud-frs/src/generated/java/org/apache/camel/component/huaweicloud/frs/FaceRecognitionEndpointConfigurer.java
new file mode 100644
index 0000000..bc52715
--- /dev/null
+++ b/components/camel-huawei/camel-huaweicloud-frs/src/generated/java/org/apache/camel/component/huaweicloud/frs/FaceRecognitionEndpointConfigurer.java
@@ -0,0 +1,172 @@
+/* Generated by camel build tools - do NOT edit this file! */
+package org.apache.camel.component.huaweicloud.frs;
+
+import java.util.Map;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.spi.ExtendedPropertyConfigurerGetter;
+import org.apache.camel.spi.PropertyConfigurerGetter;
+import org.apache.camel.spi.ConfigurerStrategy;
+import org.apache.camel.spi.GeneratedPropertyConfigurer;
+import org.apache.camel.util.CaseInsensitiveMap;
+import org.apache.camel.support.component.PropertyConfigurerSupport;
+
+/**
+ * Generated by camel build tools - do NOT edit this file!
+ */
+@SuppressWarnings("unchecked")
+public class FaceRecognitionEndpointConfigurer extends PropertyConfigurerSupport implements GeneratedPropertyConfigurer, PropertyConfigurerGetter {
+
+    @Override
+    public boolean configure(CamelContext camelContext, Object obj, String name, Object value, boolean ignoreCase) {
+        FaceRecognitionEndpoint target = (FaceRecognitionEndpoint) obj;
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "accesskey":
+        case "accessKey": target.setAccessKey(property(camelContext, java.lang.String.class, value)); return true;
+        case "actiontimes":
+        case "actionTimes": target.setActionTimes(property(camelContext, java.lang.String.class, value)); return true;
+        case "actions": target.setActions(property(camelContext, java.lang.String.class, value)); return true;
+        case "anotherimagebase64":
+        case "anotherImageBase64": target.setAnotherImageBase64(property(camelContext, java.lang.String.class, value)); return true;
+        case "anotherimagefilepath":
+        case "anotherImageFilePath": target.setAnotherImageFilePath(property(camelContext, java.lang.String.class, value)); return true;
+        case "anotherimageurl":
+        case "anotherImageUrl": target.setAnotherImageUrl(property(camelContext, java.lang.String.class, value)); return true;
+        case "endpoint": target.setEndpoint(property(camelContext, java.lang.String.class, value)); return true;
+        case "ignoresslverification":
+        case "ignoreSslVerification": target.setIgnoreSslVerification(property(camelContext, boolean.class, value)); return true;
+        case "imagebase64":
+        case "imageBase64": target.setImageBase64(property(camelContext, java.lang.String.class, value)); return true;
+        case "imagefilepath":
+        case "imageFilePath": target.setImageFilePath(property(camelContext, java.lang.String.class, value)); return true;
+        case "imageurl":
+        case "imageUrl": target.setImageUrl(property(camelContext, java.lang.String.class, value)); return true;
+        case "lazystartproducer":
+        case "lazyStartProducer": target.setLazyStartProducer(property(camelContext, boolean.class, value)); return true;
+        case "projectid":
+        case "projectId": target.setProjectId(property(camelContext, java.lang.String.class, value)); return true;
+        case "proxyhost":
+        case "proxyHost": target.setProxyHost(property(camelContext, java.lang.String.class, value)); return true;
+        case "proxypassword":
+        case "proxyPassword": target.setProxyPassword(property(camelContext, java.lang.String.class, value)); return true;
+        case "proxyport":
+        case "proxyPort": target.setProxyPort(property(camelContext, int.class, value)); return true;
+        case "proxyuser":
+        case "proxyUser": target.setProxyUser(property(camelContext, java.lang.String.class, value)); return true;
+        case "region": target.setRegion(property(camelContext, java.lang.String.class, value)); return true;
+        case "secretkey":
+        case "secretKey": target.setSecretKey(property(camelContext, java.lang.String.class, value)); return true;
+        case "servicekeys":
+        case "serviceKeys": target.setServiceKeys(property(camelContext, org.apache.camel.component.huaweicloud.common.models.ServiceKeys.class, value)); return true;
+        case "videobase64":
+        case "videoBase64": target.setVideoBase64(property(camelContext, java.lang.String.class, value)); return true;
+        case "videofilepath":
+        case "videoFilePath": target.setVideoFilePath(property(camelContext, java.lang.String.class, value)); return true;
+        case "videourl":
+        case "videoUrl": target.setVideoUrl(property(camelContext, java.lang.String.class, value)); return true;
+        default: return false;
+        }
+    }
+
+    @Override
+    public Class<?> getOptionType(String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "accesskey":
+        case "accessKey": return java.lang.String.class;
+        case "actiontimes":
+        case "actionTimes": return java.lang.String.class;
+        case "actions": return java.lang.String.class;
+        case "anotherimagebase64":
+        case "anotherImageBase64": return java.lang.String.class;
+        case "anotherimagefilepath":
+        case "anotherImageFilePath": return java.lang.String.class;
+        case "anotherimageurl":
+        case "anotherImageUrl": return java.lang.String.class;
+        case "endpoint": return java.lang.String.class;
+        case "ignoresslverification":
+        case "ignoreSslVerification": return boolean.class;
+        case "imagebase64":
+        case "imageBase64": return java.lang.String.class;
+        case "imagefilepath":
+        case "imageFilePath": return java.lang.String.class;
+        case "imageurl":
+        case "imageUrl": return java.lang.String.class;
+        case "lazystartproducer":
+        case "lazyStartProducer": return boolean.class;
+        case "projectid":
+        case "projectId": return java.lang.String.class;
+        case "proxyhost":
+        case "proxyHost": return java.lang.String.class;
+        case "proxypassword":
+        case "proxyPassword": return java.lang.String.class;
+        case "proxyport":
+        case "proxyPort": return int.class;
+        case "proxyuser":
+        case "proxyUser": return java.lang.String.class;
+        case "region": return java.lang.String.class;
+        case "secretkey":
+        case "secretKey": return java.lang.String.class;
+        case "servicekeys":
+        case "serviceKeys": return org.apache.camel.component.huaweicloud.common.models.ServiceKeys.class;
+        case "videobase64":
+        case "videoBase64": return java.lang.String.class;
+        case "videofilepath":
+        case "videoFilePath": return java.lang.String.class;
+        case "videourl":
+        case "videoUrl": return java.lang.String.class;
+        default: return null;
+        }
+    }
+
+    @Override
+    public Object getOptionValue(Object obj, String name, boolean ignoreCase) {
+        FaceRecognitionEndpoint target = (FaceRecognitionEndpoint) obj;
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "accesskey":
+        case "accessKey": return target.getAccessKey();
+        case "actiontimes":
+        case "actionTimes": return target.getActionTimes();
+        case "actions": return target.getActions();
+        case "anotherimagebase64":
+        case "anotherImageBase64": return target.getAnotherImageBase64();
+        case "anotherimagefilepath":
+        case "anotherImageFilePath": return target.getAnotherImageFilePath();
+        case "anotherimageurl":
+        case "anotherImageUrl": return target.getAnotherImageUrl();
+        case "endpoint": return target.getEndpoint();
+        case "ignoresslverification":
+        case "ignoreSslVerification": return target.isIgnoreSslVerification();
+        case "imagebase64":
+        case "imageBase64": return target.getImageBase64();
+        case "imagefilepath":
+        case "imageFilePath": return target.getImageFilePath();
+        case "imageurl":
+        case "imageUrl": return target.getImageUrl();
+        case "lazystartproducer":
+        case "lazyStartProducer": return target.isLazyStartProducer();
+        case "projectid":
+        case "projectId": return target.getProjectId();
+        case "proxyhost":
+        case "proxyHost": return target.getProxyHost();
+        case "proxypassword":
+        case "proxyPassword": return target.getProxyPassword();
+        case "proxyport":
+        case "proxyPort": return target.getProxyPort();
+        case "proxyuser":
+        case "proxyUser": return target.getProxyUser();
+        case "region": return target.getRegion();
+        case "secretkey":
+        case "secretKey": return target.getSecretKey();
+        case "servicekeys":
+        case "serviceKeys": return target.getServiceKeys();
+        case "videobase64":
+        case "videoBase64": return target.getVideoBase64();
+        case "videofilepath":
+        case "videoFilePath": return target.getVideoFilePath();
+        case "videourl":
+        case "videoUrl": return target.getVideoUrl();
+        default: return null;
+        }
+    }
+}
+
diff --git a/components/camel-huawei/camel-huaweicloud-frs/src/generated/java/org/apache/camel/component/huaweicloud/frs/FaceRecognitionEndpointUriFactory.java b/components/camel-huawei/camel-huaweicloud-frs/src/generated/java/org/apache/camel/component/huaweicloud/frs/FaceRecognitionEndpointUriFactory.java
new file mode 100644
index 0000000..03ccd7f
--- /dev/null
+++ b/components/camel-huawei/camel-huaweicloud-frs/src/generated/java/org/apache/camel/component/huaweicloud/frs/FaceRecognitionEndpointUriFactory.java
@@ -0,0 +1,97 @@
+/* Generated by camel build tools - do NOT edit this file! */
+package org.apache.camel.component.huaweicloud.frs;
+
+import java.net.URISyntaxException;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.camel.spi.EndpointUriFactory;
+
+/**
+ * Generated by camel build tools - do NOT edit this file!
+ */
+public class FaceRecognitionEndpointUriFactory extends org.apache.camel.support.component.EndpointUriFactorySupport implements EndpointUriFactory {
+
+    private static final String BASE = ":operation";
+
+    private static final Set<String> PROPERTY_NAMES;
+    private static final Set<String> SECRET_PROPERTY_NAMES;
+    private static final Set<String> MULTI_VALUE_PREFIXES;
+    static {
+        Set<String> props = new HashSet<>(24);
+        props.add("serviceKeys");
+        props.add("videoFilePath");
+        props.add("secretKey");
+        props.add("proxyPassword");
+        props.add("imageFilePath");
+        props.add("ignoreSslVerification");
+        props.add("proxyHost");
+        props.add("anotherImageUrl");
+        props.add("imageBase64");
+        props.add("proxyPort");
+        props.add("endpoint");
+        props.add("lazyStartProducer");
+        props.add("videoUrl");
+        props.add("accessKey");
+        props.add("actionTimes");
+        props.add("videoBase64");
+        props.add("anotherImageFilePath");
+        props.add("imageUrl");
+        props.add("proxyUser");
+        props.add("anotherImageBase64");
+        props.add("region");
+        props.add("operation");
+        props.add("actions");
+        props.add("projectId");
+        PROPERTY_NAMES = Collections.unmodifiableSet(props);
+        Set<String> secretProps = new HashSet<>(5);
+        secretProps.add("serviceKeys");
+        secretProps.add("secretKey");
+        secretProps.add("accessKey");
+        secretProps.add("proxyPassword");
+        secretProps.add("proxyUser");
+        SECRET_PROPERTY_NAMES = Collections.unmodifiableSet(secretProps);
+        MULTI_VALUE_PREFIXES = Collections.emptySet();
+    }
+
+    @Override
+    public boolean isEnabled(String scheme) {
+        return "hwcloud-frs".equals(scheme);
+    }
+
+    @Override
+    public String buildUri(String scheme, Map<String, Object> properties, boolean encode) throws URISyntaxException {
+        String syntax = scheme + BASE;
+        String uri = syntax;
+
+        Map<String, Object> copy = new HashMap<>(properties);
+
+        uri = buildPathParameter(syntax, uri, "operation", null, true, copy);
+        uri = buildQueryParameters(uri, copy, encode);
+        return uri;
+    }
+
+    @Override
+    public Set<String> propertyNames() {
+        return PROPERTY_NAMES;
+    }
+
+    @Override
+    public Set<String> secretPropertyNames() {
+        return SECRET_PROPERTY_NAMES;
+    }
+
+    @Override
+    public Set<String> multiValuePrefixes() {
+        return MULTI_VALUE_PREFIXES;
+    }
+
+    @Override
+    public boolean isLenientProperties() {
+        return false;
+    }
+}
+
diff --git a/components/camel-huawei/camel-huaweicloud-frs/src/generated/resources/META-INF/services/org/apache/camel/component.properties b/components/camel-huawei/camel-huaweicloud-frs/src/generated/resources/META-INF/services/org/apache/camel/component.properties
new file mode 100644
index 0000000..5945d24
--- /dev/null
+++ b/components/camel-huawei/camel-huaweicloud-frs/src/generated/resources/META-INF/services/org/apache/camel/component.properties
@@ -0,0 +1,7 @@
+# Generated by camel build tools - do NOT edit this file!
+components=hwcloud-frs
+groupId=org.apache.camel
+artifactId=camel-huaweicloud-frs
+version=3.15.0-SNAPSHOT
+projectName=Camel :: Huawei Cloud :: FaceRecognition
+projectDescription=A Camel Huawei Face Recognition Service component
diff --git a/components/camel-huawei/camel-huaweicloud-frs/src/generated/resources/META-INF/services/org/apache/camel/component/hwcloud-frs b/components/camel-huawei/camel-huaweicloud-frs/src/generated/resources/META-INF/services/org/apache/camel/component/hwcloud-frs
new file mode 100644
index 0000000..b639a97
--- /dev/null
+++ b/components/camel-huawei/camel-huaweicloud-frs/src/generated/resources/META-INF/services/org/apache/camel/component/hwcloud-frs
@@ -0,0 +1,2 @@
+# Generated by camel build tools - do NOT edit this file!
+class=org.apache.camel.component.huaweicloud.frs.FaceRecognitionComponent
diff --git a/components/camel-huawei/camel-huaweicloud-frs/src/generated/resources/META-INF/services/org/apache/camel/configurer/hwcloud-frs-component b/components/camel-huawei/camel-huaweicloud-frs/src/generated/resources/META-INF/services/org/apache/camel/configurer/hwcloud-frs-component
new file mode 100644
index 0000000..3f37e2e
--- /dev/null
+++ b/components/camel-huawei/camel-huaweicloud-frs/src/generated/resources/META-INF/services/org/apache/camel/configurer/hwcloud-frs-component
@@ -0,0 +1,2 @@
+# Generated by camel build tools - do NOT edit this file!
+class=org.apache.camel.component.huaweicloud.frs.FaceRecognitionComponentConfigurer
diff --git a/components/camel-huawei/camel-huaweicloud-frs/src/generated/resources/META-INF/services/org/apache/camel/configurer/hwcloud-frs-endpoint b/components/camel-huawei/camel-huaweicloud-frs/src/generated/resources/META-INF/services/org/apache/camel/configurer/hwcloud-frs-endpoint
new file mode 100644
index 0000000..107a86f
--- /dev/null
+++ b/components/camel-huawei/camel-huaweicloud-frs/src/generated/resources/META-INF/services/org/apache/camel/configurer/hwcloud-frs-endpoint
@@ -0,0 +1,2 @@
+# Generated by camel build tools - do NOT edit this file!
+class=org.apache.camel.component.huaweicloud.frs.FaceRecognitionEndpointConfigurer
diff --git a/components/camel-huawei/camel-huaweicloud-frs/src/generated/resources/META-INF/services/org/apache/camel/urifactory/hwcloud-frs-endpoint b/components/camel-huawei/camel-huaweicloud-frs/src/generated/resources/META-INF/services/org/apache/camel/urifactory/hwcloud-frs-endpoint
new file mode 100644
index 0000000..d1623ff
--- /dev/null
+++ b/components/camel-huawei/camel-huaweicloud-frs/src/generated/resources/META-INF/services/org/apache/camel/urifactory/hwcloud-frs-endpoint
@@ -0,0 +1,2 @@
+# Generated by camel build tools - do NOT edit this file!
+class=org.apache.camel.component.huaweicloud.frs.FaceRecognitionEndpointUriFactory
diff --git a/components/camel-huawei/camel-huaweicloud-frs/src/generated/resources/org/apache/camel/component/huaweicloud/frs/hwcloud-frs.json b/components/camel-huawei/camel-huaweicloud-frs/src/generated/resources/org/apache/camel/component/huaweicloud/frs/hwcloud-frs.json
new file mode 100644
index 0000000..b4495c8
--- /dev/null
+++ b/components/camel-huawei/camel-huaweicloud-frs/src/generated/resources/org/apache/camel/component/huaweicloud/frs/hwcloud-frs.json
@@ -0,0 +1,54 @@
+{
+  "component": {
+    "kind": "component",
+    "name": "hwcloud-frs",
+    "title": "Huawei Cloud Face Recognition Service",
+    "description": "Face Recognition Service (FRS) is an intelligent service that uses computers to process, analyze, and understand facial images based on human facial features.",
+    "deprecated": false,
+    "firstVersion": "3.15.0",
+    "label": "cloud,messaging",
+    "javaType": "org.apache.camel.component.huaweicloud.frs.FaceRecognitionComponent",
+    "supportLevel": "Preview",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-huaweicloud-frs",
+    "version": "3.15.0-SNAPSHOT",
+    "scheme": "hwcloud-frs",
+    "extendsScheme": "",
+    "syntax": "hwcloud-frs:operation",
+    "async": false,
+    "api": false,
+    "consumerOnly": false,
+    "producerOnly": true,
+    "lenientProperties": false
+  },
+  "componentProperties": {
+    "lazyStartProducer": { "kind": "property", "displayName": "Lazy Start Producer", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during star [...]
+    "autowiredEnabled": { "kind": "property", "displayName": "Autowired Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching type, which t [...]
+  },
+  "properties": {
+    "operation": { "kind": "path", "displayName": "Operation name", "group": "producer", "label": "producer", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Name of Face Recognition operation to perform, including faceDetection, faceVerification and faceLiveDetection" },
+    "accessKey": { "kind": "parameter", "displayName": "Account access key (AK)", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": true, "description": "Access key for the cloud user" },
+    "actions": { "kind": "parameter", "displayName": "actions", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "This param is mandatory when the operation is faceLiveDetection, indicating the action code sequence list. Actions are separated by commas (,). Currently, the following actions are supported: 1: Shake the head to the left. 2: Sh [...]
+    "actionTimes": { "kind": "parameter", "displayName": "actionTime", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "This param can be used when the operation is faceLiveDetection, indicating the action time array. The length of the array is the same as the number of actions. Each item contains the start time and end time of the action  [...]
+    "anotherImageBase64": { "kind": "parameter", "displayName": "anotherImageBase64", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "This param can be used when operation is faceVerification, indicating the Base64 character string converted from the other image. It needs to be configured if imageBase64 is set. The image size cannot excee [...]
+    "anotherImageFilePath": { "kind": "parameter", "displayName": "anotherImageFilePath", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "This param can be used when operation is faceVerification, indicating the local file path of the other image. It needs to be configured if imageFilePath is set. Image size cannot exceed 8 MB, and it is  [...]
+    "anotherImageUrl": { "kind": "parameter", "displayName": "anotherImageUrl", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "This param can be used when operation is faceVerification, indicating the URL of the other image. It needs to be configured if imageUrl is set. The options are as follows: 1.HTTP\/HTTPS URLs on the public network [...]
+    "endpoint": { "kind": "parameter", "displayName": "Service endpoint", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Fully qualified Face Recognition service url. Carries higher precedence than region based configuration." },
+    "imageBase64": { "kind": "parameter", "displayName": "imageBase64", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "This param can be used when operation is faceDetection or faceVerification, indicating the Base64 character string converted from an image. Any one of imageBase64, imageUrl and imageFilePath needs to be set, and the prio [...]
+    "imageFilePath": { "kind": "parameter", "displayName": "imageFilePath", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "This param can be used when operation is faceDetection or faceVerification, indicating the local image file path. Any one of imageBase64, imageUrl and imageFilePath needs to be set, and the priority is imageBase64 im [...]
+    "imageUrl": { "kind": "parameter", "displayName": "imageUrl", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "This param can be used when operation is faceDetection or faceVerification, indicating the URL of an image. Any one of imageBase64, imageUrl and imageFilePath needs to be set, and the priority is imageBase64 imageUrl imageFile [...]
+    "lazyStartProducer": { "kind": "parameter", "displayName": "Lazy Start Producer", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during sta [...]
+    "projectId": { "kind": "parameter", "displayName": "Project ID", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Cloud project ID" },
+    "proxyHost": { "kind": "parameter", "displayName": "Proxy server host", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Proxy server ip\/hostname" },
+    "proxyPassword": { "kind": "parameter", "displayName": "Proxy password", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": true, "description": "Proxy authentication password" },
+    "proxyPort": { "kind": "parameter", "displayName": "Proxy server port", "group": "producer", "label": "", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Proxy server port" },
+    "proxyUser": { "kind": "parameter", "displayName": "Proxy user", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": true, "description": "Proxy authentication user" },
+    "region": { "kind": "parameter", "displayName": "Service region", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Face Recognition service region. Currently only cn-north-1 and cn-north-4 are supported. This is lower precedence than endpoint based configuration." },
+    "secretKey": { "kind": "parameter", "displayName": "Account secret key (SK)", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": true, "description": "Secret key for the cloud user" },
+    "serviceKeys": { "kind": "parameter", "displayName": "Service Configuration", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.huaweicloud.common.models.ServiceKeys", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": true, "description": "Configuration object for cloud service authentication" },
+    "videoBase64": { "kind": "parameter", "displayName": "videoBase64", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "This param can be used when operation is faceLiveDetection, indicating the Base64 character string converted from a video. Any one of videoBase64, videoUrl and videoFilePath needs to be set, and the priority is videoBase [...]
+    "videoFilePath": { "kind": "parameter", "displayName": "videoFilePath", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "This param can be used when operation is faceLiveDetection, indicating the local video file path. Any one of videoBase64, videoUrl and videoFilePath needs to be set, and the priority is videoBase64 videoUrl videoFile [...]
+    "videoUrl": { "kind": "parameter", "displayName": "videoUrl", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "This param can be used when operation is faceLiveDetection, indicating the URL of a video. Any one of videoBase64, videoUrl and videoFilePath needs to be set, and the priority is videoBase64 videoUrl videoFilePath. Currently,  [...]
+    "ignoreSslVerification": { "kind": "parameter", "displayName": "SSL Verification Ignored", "group": "security", "label": "security", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": false, "description": "Ignore SSL verification" }
+  }
+}
diff --git a/components/camel-huawei/camel-huaweicloud-frs/src/main/docs/hwcloud-frs-component.adoc b/components/camel-huawei/camel-huaweicloud-frs/src/main/docs/hwcloud-frs-component.adoc
index 003c141..8c1be0d 100644
--- a/components/camel-huawei/camel-huaweicloud-frs/src/main/docs/hwcloud-frs-component.adoc
+++ b/components/camel-huawei/camel-huaweicloud-frs/src/main/docs/hwcloud-frs-component.adoc
@@ -1,10 +1,10 @@
 = Huawei Cloud Face Recognition Service Component
-:doctitle: Huawei Cloud Face Recognition Service(FRS)
+:doctitle: Huawei Cloud Face Recognition Service
 :shortname: hwcloud-frs
 :artifactid: camel-huaweicloud-frs
-:description: Face Recognition Service(FRS) is an intelligent service that uses computers to process, analyze and understand facial images based on human facial features
-:since: 3.15.0
-:supportlevel: Stable
+:description: Face Recognition Service (FRS) is an intelligent service that uses computers to process, analyze, and understand facial images based on human facial features.
+:since: 3.15
+:supportlevel: Preview
 :component-header: Only producer is supported
 //Manually maintained attributes
 :group: Huawei Cloud
diff --git a/components/camel-huawei/camel-huaweicloud-frs/src/test/java/org/apache/camel/component/huaweicloud/frs/FaceDetectionWithImageBae64AndMockClientTest.java b/components/camel-huawei/camel-huaweicloud-frs/src/test/java/org/apache/camel/component/huaweicloud/frs/FaceDetectionWithImageBae64AndMockClientTest.java
index 917ac9d..00a7959 100644
--- a/components/camel-huawei/camel-huaweicloud-frs/src/test/java/org/apache/camel/component/huaweicloud/frs/FaceDetectionWithImageBae64AndMockClientTest.java
+++ b/components/camel-huawei/camel-huaweicloud-frs/src/test/java/org/apache/camel/component/huaweicloud/frs/FaceDetectionWithImageBae64AndMockClientTest.java
@@ -41,12 +41,12 @@ public class FaceDetectionWithImageBae64AndMockClientTest extends CamelTestSuppo
                         .setProperty(FaceRecognitionProperties.FACE_IMAGE_BASE64,
                                 constant(testConfiguration.getProperty("imageContent")))
                         .to("hwcloud-frs:faceDetection?"
-                                + "accessKey=" + testConfiguration.getProperty("accessKey")
-                                + "&secretKey=" + testConfiguration.getProperty("secretKey")
-                                + "&projectId=" + testConfiguration.getProperty("projectId")
-                                + "&region=" + testConfiguration.getProperty("region")
-                                + "&ignoreSslVerification=true"
-                                + "&frsClient=#frsClient")
+                            + "accessKey=" + testConfiguration.getProperty("accessKey")
+                            + "&secretKey=" + testConfiguration.getProperty("secretKey")
+                            + "&projectId=" + testConfiguration.getProperty("projectId")
+                            + "&region=" + testConfiguration.getProperty("region")
+                            + "&ignoreSslVerification=true"
+                            + "&frsClient=#frsClient")
                         .log("perform faceDetection successful")
                         .to("mock:perform_face_detection_result");
             }
diff --git a/docs/components/modules/ROOT/examples/json/hwcloud-frs.json b/docs/components/modules/ROOT/examples/json/hwcloud-frs.json
new file mode 120000
index 0000000..115316b
--- /dev/null
+++ b/docs/components/modules/ROOT/examples/json/hwcloud-frs.json
@@ -0,0 +1 @@
+../../../../../../components/camel-huawei/camel-huaweicloud-frs/src/generated/resources/org/apache/camel/component/huaweicloud/frs/hwcloud-frs.json
\ No newline at end of file
diff --git a/docs/components/modules/ROOT/nav.adoc b/docs/components/modules/ROOT/nav.adoc
index a432179..1f88c27 100644
--- a/docs/components/modules/ROOT/nav.adoc
+++ b/docs/components/modules/ROOT/nav.adoc
@@ -151,6 +151,7 @@
 ** xref:hdfs-component.adoc[HDFS]
 ** xref:http-component.adoc[HTTP]
 ** xref:hwcloud-summary.adoc[Huawei Cloud]
+*** xref:hwcloud-frs-component.adoc[Huawei Cloud Face Recognition Service]
 *** xref:hwcloud-imagerecognition-component.adoc[Huawei Cloud Image Recognition]
 *** xref:hwcloud-dms-component.adoc[Huawei Distributed Message Service (DMS)]
 *** xref:hwcloud-functiongraph-component.adoc[Huawei FunctionGraph]
diff --git a/docs/components/modules/ROOT/pages/hwcloud-frs-component.adoc b/docs/components/modules/ROOT/pages/hwcloud-frs-component.adoc
new file mode 120000
index 0000000..a2bd94a
--- /dev/null
+++ b/docs/components/modules/ROOT/pages/hwcloud-frs-component.adoc
@@ -0,0 +1 @@
+../../../../../components/camel-huawei/camel-huaweicloud-frs/src/main/docs/hwcloud-frs-component.adoc
\ No newline at end of file