You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by "atiaomar1978-hub (via GitHub)" <gi...@apache.org> on 2026/08/10 18:05:53 UTC
[PR] CAMEL-24373: Add camel-alibaba MVP (common, OSS, MNS) — phase 1 [camel]
atiaomar1978-hub opened a new pull request, #25433:
URL: https://github.com/apache/camel/pull/25433
## Summary
Phase 1 (MVP) of [CAMEL-24373](https://issues.apache.org/jira/browse/CAMEL-24373): introduces the new `components/camel-alibaba/` parent module with shared common code and initial Alibaba Cloud components for **Object Storage (OSS)** and **Message Service (MNS)**.
## Modules added
| Module | URI scheme | Description |
|--------|------------|-------------|
| `camel-alibaba-common` | — | Shared `ServiceKeys`, `AlibabaClientBuilderUtil`, `AlibabaClientRegistry` |
| `camel-alibaba-oss` | `alibaba-oss:` | OSS producer/consumer using `alibabacloud-oss-v2` SDK |
| `camel-alibaba-mns` | `alibaba-mns:` | MNS queue/topic messaging using `aliyun-sdk-mns` SDK |
## OSS operations (producer)
`listBuckets`, `listObjects`, `putObject`, `getObject`, `deleteObject`, `copyObject`, `headObject`
OSS consumer polls objects from a bucket (optional `deleteAfterRead`).
## MNS operations
- **Producer:** `sendMessage` (default for queue), `deleteMessage`, `publishMessage` (topic via `topic:` URI prefix)
- **Consumer:** queue polling with `deleteAfterRead`, `waitSeconds`, `maxMessagesPerPoll`
## Review fixes applied
- MNS queue producer defaults to `sendMessage` (not `receiveMessage`)
- OSS `putObject` validates bucket name for all body types
- OSS consumer advances pagination token only after successful batch processing
- Removed non-existent Spring Boot starter references from docs
- Regenerated catalog JSON/docs for `alibaba-oss` and `alibaba-mns`
## Test plan
33 unit tests — all passing locally:
```bash
./mvnw -pl components/camel-alibaba/camel-alibaba-common,components/camel-alibaba/camel-alibaba-oss,components/camel-alibaba/camel-alibaba-mns test
./mvnw -pl components/camel-alibaba -am test
```
Closes CAMEL-24373 (phase 1 MVP)
_AI-generated PR description on behalf of atiaomar1978-hub_
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@camel.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] CAMEL-24373: Add camel-alibaba MVP (common, OSS, MNS) — phase 1 [camel]
Posted by "atiaomar1978-hub (via GitHub)" <gi...@apache.org>.
atiaomar1978-hub commented on code in PR #25433:
URL: https://github.com/apache/camel/pull/25433#discussion_r3768031014
##########
parent/pom.xml:
##########
@@ -80,7 +80,13 @@
<avro-ipc-jetty-version>1.12.1</avro-ipc-jetty-version>
<avro-ipc-netty-version>1.12.1</avro-ipc-netty-version>
<awaitility-version>4.3.0</awaitility-version>
+<<<<<<< HEAD
Review Comment:
Fixed — the merge conflict in `parent/pom.xml` was resolved and the branch has been rebased on current `main` (see commits `08dd1a2`, `9d890ace`, and latest `eb936edc`).
_AI-generated reply on behalf of atiaomar1978-hub_
##########
components/camel-alibaba/camel-alibaba-common/pom.xml:
##########
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ 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.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-alibaba-parent</artifactId>
+ <version>4.22.0-SNAPSHOT</version>
+ </parent>
+
+ <properties>
+ <firstVersion>4.22.0</firstVersion>
+ </properties>
+
+ <artifactId>camel-alibaba-common</artifactId>
+ <packaging>jar</packaging>
+ <name>Camel :: Alibaba Cloud :: Common</name>
+ <description>Common utilities for Camel Alibaba Cloud components</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-support</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>com.aliyun</groupId>
Review Comment:
Fixed — the OSS SDK dependency was removed from `camel-alibaba-common`. Client creation now lives in `OSSUtils.createClient()` inside `camel-alibaba-oss`; the common module only contains shared `ServiceKeys`.
_AI-generated reply on behalf of atiaomar1978-hub_
##########
components/camel-alibaba/camel-alibaba-oss/src/main/java/org/apache/camel/component/alibaba/oss/OSSEndpoint.java:
##########
@@ -0,0 +1,240 @@
+/*
+ * 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.alibaba.oss;
+
+import com.aliyun.sdk.service.oss2.OSSClient;
+import org.apache.camel.Category;
+import org.apache.camel.Consumer;
+import org.apache.camel.Processor;
+import org.apache.camel.Producer;
+import org.apache.camel.component.alibaba.common.AlibabaClientBuilderUtil;
+import org.apache.camel.component.alibaba.common.models.ServiceKeys;
+import org.apache.camel.component.alibaba.oss.constants.OSSHeaders;
+import org.apache.camel.spi.Metadata;
+import org.apache.camel.spi.UriEndpoint;
+import org.apache.camel.spi.UriParam;
+import org.apache.camel.spi.UriPath;
+import org.apache.camel.support.ScheduledPollEndpoint;
+import org.apache.camel.util.ObjectHelper;
+
+/**
+ * Alibaba Cloud Object Storage Service (OSS) component
+ */
+@UriEndpoint(firstVersion = "4.22.0", scheme = "alibaba-oss", title = "Alibaba Object Storage Service (OSS)",
+ syntax = "alibaba-oss:operation",
+ category = { Category.CLOUD }, headersClass = OSSHeaders.class)
+public class OSSEndpoint extends ScheduledPollEndpoint {
+
+ @UriPath(description = "Operation to be performed", displayName = "Operation", label = "producer")
+ @Metadata(required = true)
+ private String operation;
+
+ @UriParam(description = "OSS service region", displayName = "Service region")
+ @Metadata(required = true)
+ private String region;
+
+ @UriParam(description = "OSS endpoint URL. Carries higher precedence than region based client initialization",
+ displayName = "Endpoint url")
+ private String endpoint;
+
+ @UriParam(description = "Configuration object for cloud service authentication", displayName = "Service Configuration",
+ security = "secret", label = "security")
+ private ServiceKeys serviceKeys;
+
+ @UriParam(description = "Access key for the cloud user", displayName = "API access key (AK)",
+ security = "secret", label = "security")
+ @Metadata(required = true)
+ private String accessKey;
+
+ @UriParam(description = "Secret key for the cloud user", displayName = "API secret key (SK)",
+ security = "secret", label = "security")
+ @Metadata(required = true)
+ private String secretKey;
+
+ @UriParam(description = "Name of bucket to perform operation on", displayName = "Bucket Name", endpointIdentity = true)
+ private String bucketName;
+
+ @UriParam(description = "Name of object to perform operation with", displayName = "Object Name")
+ private String objectName;
+
+ @UriParam(description = "The object name prefix used for filtering objects to be listed", displayName = "Prefix",
+ label = "consumer")
+ private String prefix;
+
+ @UriParam(description = "The maximum number of keys returned when listing objects", displayName = "Max Keys",
+ label = "consumer,producer")
+ private Integer maxKeys;
+
+ @UriParam(description = "Determines if objects should be deleted after they have been retrieved",
+ displayName = "Delete after read", defaultValue = "false", label = "consumer")
+ private boolean deleteAfterRead;
+
+ @UriParam(description = "The maximum number of messages to poll at each polling", displayName = "Maximum messages per poll",
+ defaultValue = "10", label = "consumer")
+ private int maxMessagesPerPoll = 10;
+
+ @UriParam(description = "An autowired OSS client", displayName = "OSS Client", label = "advanced")
+ @Metadata(autowired = true)
+ private OSSClient ossClient;
+
+ public OSSEndpoint() {
+ }
+
+ public OSSEndpoint(String uri, String operation, OSSComponent component) {
+ super(uri, component);
+ this.operation = operation;
+ }
+
+ public Producer createProducer() throws Exception {
+ return new OSSProducer(this);
+ }
+
+ public Consumer createConsumer(Processor processor) throws Exception {
+ OSSConsumer consumer = new OSSConsumer(this, processor);
+ configureConsumer(consumer);
+ consumer.setMaxMessagesPerPoll(maxMessagesPerPoll);
+ return consumer;
+ }
+
+ /**
+ * Initialize and return an OSS client
+ */
+ public OSSClient initClient() {
+ if (ossClient != null) {
+ return ossClient;
+ }
+
+ if (ObjectHelper.isEmpty(getServiceKeys()) && ObjectHelper.isEmpty(getAccessKey())) {
+ throw new IllegalArgumentException("Authentication parameter 'access key (AK)' not found");
+ }
+ if (ObjectHelper.isEmpty(getServiceKeys()) && ObjectHelper.isEmpty(getSecretKey())) {
+ throw new IllegalArgumentException("Authentication parameter 'secret key (SK)' not found");
+ }
+ if (ObjectHelper.isEmpty(getRegion()) && ObjectHelper.isEmpty(getEndpoint())) {
+ throw new IllegalArgumentException("Region/endpoint not found");
+ }
+
+ String auth = getServiceKeys() != null ? getServiceKeys().getAccessKey() : getAccessKey();
+ String secret = getServiceKeys() != null ? getServiceKeys().getSecretKey() : getSecretKey();
+
Review Comment:
Fixed — `initClient()` now assigns the created client to `this.ossClient` and returns the cached instance on subsequent calls. Non-autowired clients are closed in `doStop()`.
_AI-generated reply on behalf of atiaomar1978-hub_
##########
components/camel-alibaba/camel-alibaba-oss/src/main/java/org/apache/camel/component/alibaba/oss/OSSComponent.java:
##########
@@ -0,0 +1,33 @@
+/*
+ * 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.alibaba.oss;
+
+import java.util.Map;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.spi.annotations.Component;
+import org.apache.camel.support.HealthCheckComponent;
+
+@Component("alibaba-oss")
+public class OSSComponent extends HealthCheckComponent {
+
+ protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
Review Comment:
Fixed — `@Override` has been added to `OSSComponent.createEndpoint()`.
_AI-generated reply on behalf of atiaomar1978-hub_
##########
bom/camel-bom/pom.xml:
##########
@@ -66,6 +66,21 @@
<artifactId>camel-ai-tool</artifactId>
<version>4.23.0-SNAPSHOT</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-alibaba-common</artifactId>
+ <version>4.22.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-alibaba-mns</artifactId>
+ <version>4.22.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-alibaba-oss</artifactId>
+ <version>4.22.0-SNAPSHOT</version>
+ </dependency>
Review Comment:
Fixed in `eb936edc` — all three alibaba BOM entries now use `4.23.0-SNAPSHOT`, matching `parent/pom.xml` and the module POMs.
_AI-generated reply on behalf of atiaomar1978-hub_
##########
components/camel-alibaba/camel-alibaba-oss/src/main/java/org/apache/camel/component/alibaba/oss/OSSEndpoint.java:
##########
@@ -0,0 +1,240 @@
+/*
+ * 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.alibaba.oss;
+
+import com.aliyun.sdk.service.oss2.OSSClient;
+import org.apache.camel.Category;
+import org.apache.camel.Consumer;
+import org.apache.camel.Processor;
+import org.apache.camel.Producer;
+import org.apache.camel.component.alibaba.common.models.ServiceKeys;
+import org.apache.camel.component.alibaba.oss.constants.OSSHeaders;
+import org.apache.camel.spi.Metadata;
+import org.apache.camel.spi.UriEndpoint;
+import org.apache.camel.spi.UriParam;
+import org.apache.camel.spi.UriPath;
+import org.apache.camel.support.ScheduledPollEndpoint;
+
+/**
+ * Alibaba Cloud Object Storage Service (OSS) component
+ */
+@UriEndpoint(firstVersion = "4.23.0", scheme = "alibaba-oss", title = "Alibaba Object Storage Service (OSS)",
+ syntax = "alibaba-oss:operation",
+ category = { Category.CLOUD }, headersClass = OSSHeaders.class)
+public class OSSEndpoint extends ScheduledPollEndpoint {
+
+ @UriPath(description = "Operation to be performed", displayName = "Operation", label = "producer")
+ @Metadata(required = true)
+ private String operation;
+
+ @UriParam(description = "OSS service region", displayName = "Service region")
+ @Metadata(required = true)
+ private String region;
+
+ @UriParam(description = "OSS endpoint URL. Carries higher precedence than region based client initialization",
+ displayName = "Endpoint url")
+ private String endpoint;
+
+ @UriParam(description = "Configuration object for cloud service authentication", displayName = "Service Configuration",
+ security = "secret", label = "security")
+ private ServiceKeys serviceKeys;
+
+ @UriParam(description = "Access key for the cloud user", displayName = "API access key (AK)",
+ security = "secret", label = "security")
+ @Metadata(required = true)
+ private String accessKey;
Review Comment:
Fixed in `eb936edc` — `accessKey`, `secretKey`, and `serviceKeys` on `OSSEndpoint` now use `secret = true`, `security = "secret"`, and `label = "security"` so credentials are masked in logs/JMX as well as covered by the security policy framework.
_AI-generated reply on behalf of atiaomar1978-hub_
##########
components/camel-alibaba/camel-alibaba-oss/src/main/java/org/apache/camel/component/alibaba/oss/OSSProducer.java:
##########
@@ -0,0 +1,377 @@
+/*
+ * 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.alibaba.oss;
+
+import java.io.File;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.aliyun.sdk.service.oss2.OSSClient;
+import com.aliyun.sdk.service.oss2.models.BucketSummary;
+import com.aliyun.sdk.service.oss2.models.CopyObjectRequest;
+import com.aliyun.sdk.service.oss2.models.CopyObjectResult;
+import com.aliyun.sdk.service.oss2.models.DeleteObjectRequest;
+import com.aliyun.sdk.service.oss2.models.DeleteObjectResult;
+import com.aliyun.sdk.service.oss2.models.GetObjectRequest;
+import com.aliyun.sdk.service.oss2.models.GetObjectResult;
+import com.aliyun.sdk.service.oss2.models.HeadObjectRequest;
+import com.aliyun.sdk.service.oss2.models.HeadObjectResult;
+import com.aliyun.sdk.service.oss2.models.ListBucketsRequest;
+import com.aliyun.sdk.service.oss2.models.ListBucketsResult;
+import com.aliyun.sdk.service.oss2.models.ListObjectsRequest;
+import com.aliyun.sdk.service.oss2.models.ListObjectsResult;
+import com.aliyun.sdk.service.oss2.models.ObjectSummary;
+import com.aliyun.sdk.service.oss2.models.PutObjectRequest;
+import com.aliyun.sdk.service.oss2.models.PutObjectResult;
+import com.aliyun.sdk.service.oss2.transport.BinaryData;
+import com.google.gson.Gson;
+import org.apache.camel.Exchange;
+import org.apache.camel.WrappedFile;
+import org.apache.camel.component.alibaba.oss.constants.OSSOperations;
+import org.apache.camel.component.alibaba.oss.constants.OSSProperties;
+import org.apache.camel.component.alibaba.oss.models.ClientConfigurations;
+import org.apache.camel.support.DefaultProducer;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class OSSProducer extends DefaultProducer {
+ private static final Logger LOG = LoggerFactory.getLogger(OSSProducer.class);
+
+ private final OSSEndpoint endpoint;
+ private OSSClient ossClient;
+ private Gson gson;
+
+ public OSSProducer(OSSEndpoint endpoint) {
+ super(endpoint);
+ this.endpoint = endpoint;
+ }
+
+ @Override
+ protected void doInit() throws Exception {
+ super.doInit();
+ this.gson = new Gson();
+ }
+
+ @Override
+ public void process(Exchange exchange) throws Exception {
+ ClientConfigurations clientConfigurations = new ClientConfigurations();
+
+ if (ossClient == null) {
+ this.ossClient = endpoint.initClient();
+ }
+
Review Comment:
Fixed in `eb936edc` — runtime overrides are resolved in `OSSUtils.createClientConfigurations()`, which checks message **headers** first, then exchange properties as fallback, then endpoint/URI defaults. Tests and docs updated to use headers.
_AI-generated reply on behalf of atiaomar1978-hub_
##########
components/camel-alibaba/camel-alibaba-oss/src/main/java/org/apache/camel/component/alibaba/oss/OSSProducer.java:
##########
@@ -0,0 +1,377 @@
+/*
+ * 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.alibaba.oss;
+
+import java.io.File;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.aliyun.sdk.service.oss2.OSSClient;
+import com.aliyun.sdk.service.oss2.models.BucketSummary;
+import com.aliyun.sdk.service.oss2.models.CopyObjectRequest;
+import com.aliyun.sdk.service.oss2.models.CopyObjectResult;
+import com.aliyun.sdk.service.oss2.models.DeleteObjectRequest;
+import com.aliyun.sdk.service.oss2.models.DeleteObjectResult;
+import com.aliyun.sdk.service.oss2.models.GetObjectRequest;
+import com.aliyun.sdk.service.oss2.models.GetObjectResult;
+import com.aliyun.sdk.service.oss2.models.HeadObjectRequest;
+import com.aliyun.sdk.service.oss2.models.HeadObjectResult;
+import com.aliyun.sdk.service.oss2.models.ListBucketsRequest;
+import com.aliyun.sdk.service.oss2.models.ListBucketsResult;
+import com.aliyun.sdk.service.oss2.models.ListObjectsRequest;
+import com.aliyun.sdk.service.oss2.models.ListObjectsResult;
+import com.aliyun.sdk.service.oss2.models.ObjectSummary;
+import com.aliyun.sdk.service.oss2.models.PutObjectRequest;
+import com.aliyun.sdk.service.oss2.models.PutObjectResult;
+import com.aliyun.sdk.service.oss2.transport.BinaryData;
+import com.google.gson.Gson;
+import org.apache.camel.Exchange;
+import org.apache.camel.WrappedFile;
+import org.apache.camel.component.alibaba.oss.constants.OSSOperations;
+import org.apache.camel.component.alibaba.oss.constants.OSSProperties;
+import org.apache.camel.component.alibaba.oss.models.ClientConfigurations;
+import org.apache.camel.support.DefaultProducer;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class OSSProducer extends DefaultProducer {
+ private static final Logger LOG = LoggerFactory.getLogger(OSSProducer.class);
+
+ private final OSSEndpoint endpoint;
+ private OSSClient ossClient;
+ private Gson gson;
+
+ public OSSProducer(OSSEndpoint endpoint) {
+ super(endpoint);
+ this.endpoint = endpoint;
+ }
+
+ @Override
+ protected void doInit() throws Exception {
+ super.doInit();
+ this.gson = new Gson();
+ }
+
Review Comment:
Fixed in `eb936edc` — Gson was removed. Producer operations now return structured `Map<String, Object>` or `List<Map<String, Object>>` bodies. Tests assert on map entries instead of JSON strings.
_AI-generated reply on behalf of atiaomar1978-hub_
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@camel.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] CAMEL-24373: Add camel-alibaba MVP (common, OSS, MNS) — phase 1 [camel]
Posted by "atiaomar1978-hub (via GitHub)" <gi...@apache.org>.
atiaomar1978-hub commented on PR #25433:
URL: https://github.com/apache/camel/pull/25433#issuecomment-5269719701
@davsclaus please re-trigger the CI . thanks
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@camel.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] CAMEL-24373: Add camel-alibaba MVP (common, OSS, MNS) — phase 1 [camel]
Posted by "atiaomar1978-hub (via GitHub)" <gi...@apache.org>.
atiaomar1978-hub commented on code in PR #25433:
URL: https://github.com/apache/camel/pull/25433#discussion_r3768032349
##########
components/camel-alibaba/camel-alibaba-mns/src/main/java/org/apache/camel/component/alibaba/mns/MNSEndpoint.java:
##########
@@ -0,0 +1,261 @@
+/*
+ * 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.alibaba.mns;
+
+import com.aliyun.mns.client.MNSClient;
+import org.apache.camel.Category;
+import org.apache.camel.Consumer;
+import org.apache.camel.Processor;
+import org.apache.camel.Producer;
+import org.apache.camel.component.alibaba.common.models.ServiceKeys;
+import org.apache.camel.component.alibaba.mns.constants.MNSHeaders;
+import org.apache.camel.component.alibaba.mns.constants.MNSOperations;
+import org.apache.camel.spi.Metadata;
+import org.apache.camel.spi.UriEndpoint;
+import org.apache.camel.spi.UriParam;
+import org.apache.camel.spi.UriPath;
+import org.apache.camel.support.ScheduledPollEndpoint;
+
+/**
+ * Send and receive messages to/from Alibaba Cloud Message Service (MNS).
+ */
+@UriEndpoint(firstVersion = "4.23.0", scheme = "alibaba-mns", title = "Alibaba Message Service (MNS)",
+ syntax = "alibaba-mns:queueName", category = { Category.CLOUD, Category.MESSAGING },
+ headersClass = MNSHeaders.class)
+public class MNSEndpoint extends ScheduledPollEndpoint {
+
+ @UriPath(description = "Queue name, or topic name when using the topic URI syntax", displayName = "Queue Name")
+ @Metadata(required = true)
+ private String queueName;
+
+ @UriParam(description = "Operation to perform", displayName = "Operation",
+ enums = "sendMessage,receiveMessage,deleteMessage,publishMessage")
+ private String operation;
+
+ @UriParam(description = "Alibaba Cloud region", displayName = "Region")
+ @Metadata(required = true)
+ private String region;
+
+ @UriParam(description = "MNS account endpoint, for example https://123456.mns.cn-hangzhou.aliyuncs.com",
+ displayName = "Account Endpoint")
+ @Metadata(required = true)
+ private String accountEndpoint;
+
+ @UriParam(description = "Access key for the cloud user", displayName = "Access Key", secret = true)
+ private String accessKey;
+
+ @UriParam(description = "Secret key for the cloud user", displayName = "Secret Key", secret = true)
+ private String secretKey;
+
+ @UriParam(description = "Configuration object for cloud service authentication", displayName = "Service Keys",
+ security = "secret")
+ private ServiceKeys serviceKeys;
Review Comment:
Fixed in `eb936edc` — MNS credentials now match OSS: `accessKey`, `secretKey`, and `serviceKeys` all use `secret = true`, `security = "secret"`, and `label = "security"`.
_AI-generated reply on behalf of atiaomar1978-hub_
##########
components/camel-alibaba/camel-alibaba-mns/src/main/java/org/apache/camel/component/alibaba/mns/constants/MNSProperties.java:
##########
@@ -0,0 +1,32 @@
+/*
+ * 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.alibaba.mns.constants;
+
+public final class MNSProperties {
+
+ public static final String OPERATION = "CamelAlibabaMnsOperation";
+ public static final String QUEUE_NAME = "CamelAlibabaMnsQueueName";
+ public static final String TOPIC_NAME = "CamelAlibabaMnsTopicName";
+ public static final String RECEIPT_HANDLE = "CamelAlibabaMnsReceiptHandle";
+
+ public static final String MESSAGE_ID = "CamelAlibabaMnsMessageId";
+ public static final String REQUEST_ID = "CamelAlibabaMnsRequestId";
Review Comment:
Fixed in `eb936edc` — removed `RECEIPT_HANDLE`, `MESSAGE_ID`, and `MESSAGE_BODY_MD5` from `MNSProperties`. `MNSUtils.resolveReceiptHandle()` and `MNSProducer` now use `MNSHeaders` constants exclusively.
_AI-generated reply on behalf of atiaomar1978-hub_
##########
components/camel-alibaba/camel-alibaba-oss/src/main/java/org/apache/camel/component/alibaba/oss/OSSEndpoint.java:
##########
@@ -0,0 +1,240 @@
+/*
+ * 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.alibaba.oss;
+
+import com.aliyun.sdk.service.oss2.OSSClient;
+import org.apache.camel.Category;
+import org.apache.camel.Consumer;
+import org.apache.camel.Processor;
+import org.apache.camel.Producer;
+import org.apache.camel.component.alibaba.common.models.ServiceKeys;
+import org.apache.camel.component.alibaba.oss.constants.OSSHeaders;
+import org.apache.camel.spi.Metadata;
+import org.apache.camel.spi.UriEndpoint;
+import org.apache.camel.spi.UriParam;
+import org.apache.camel.spi.UriPath;
+import org.apache.camel.support.ScheduledPollEndpoint;
+
+/**
+ * Alibaba Cloud Object Storage Service (OSS) component
+ */
+@UriEndpoint(firstVersion = "4.23.0", scheme = "alibaba-oss", title = "Alibaba Object Storage Service (OSS)",
+ syntax = "alibaba-oss:operation",
+ category = { Category.CLOUD }, headersClass = OSSHeaders.class)
Review Comment:
Fixed in `eb936edc` — URI syntax is now `alibaba-oss:bucketName?operation=putObject&...`. The bucket name is the URI path; `operation` is a query parameter. Docs, tests, and catalog metadata updated.
_AI-generated reply on behalf of atiaomar1978-hub_
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@camel.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] CAMEL-24373: Add camel-alibaba MVP (common, OSS, MNS) — phase 1 [camel]
Posted by "davsclaus (via GitHub)" <gi...@apache.org>.
davsclaus commented on code in PR #25433:
URL: https://github.com/apache/camel/pull/25433#discussion_r3764854376
##########
bom/camel-bom/pom.xml:
##########
@@ -66,6 +66,21 @@
<artifactId>camel-ai-tool</artifactId>
<version>4.23.0-SNAPSHOT</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-alibaba-common</artifactId>
+ <version>4.22.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-alibaba-mns</artifactId>
+ <version>4.22.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-alibaba-oss</artifactId>
+ <version>4.22.0-SNAPSHOT</version>
+ </dependency>
Review Comment:
**Blocking:** The three new BOM entries hardcode `4.22.0-SNAPSHOT` instead of `4.23.0-SNAPSHOT`. The `parent/pom.xml` and all module `pom.xml` files correctly use `4.23.0-SNAPSHOT`. This version mismatch will break dependency management for any project importing the Camel BOM.
Note: the Camel BOM uses hardcoded versions (not `${project.version}`), so these must match the current project version.
```suggestion
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-alibaba-common</artifactId>
<version>4.23.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-alibaba-mns</artifactId>
<version>4.23.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-alibaba-oss</artifactId>
<version>4.23.0-SNAPSHOT</version>
</dependency>
```
##########
components/camel-alibaba/camel-alibaba-oss/src/main/java/org/apache/camel/component/alibaba/oss/OSSProducer.java:
##########
@@ -0,0 +1,377 @@
+/*
+ * 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.alibaba.oss;
+
+import java.io.File;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.aliyun.sdk.service.oss2.OSSClient;
+import com.aliyun.sdk.service.oss2.models.BucketSummary;
+import com.aliyun.sdk.service.oss2.models.CopyObjectRequest;
+import com.aliyun.sdk.service.oss2.models.CopyObjectResult;
+import com.aliyun.sdk.service.oss2.models.DeleteObjectRequest;
+import com.aliyun.sdk.service.oss2.models.DeleteObjectResult;
+import com.aliyun.sdk.service.oss2.models.GetObjectRequest;
+import com.aliyun.sdk.service.oss2.models.GetObjectResult;
+import com.aliyun.sdk.service.oss2.models.HeadObjectRequest;
+import com.aliyun.sdk.service.oss2.models.HeadObjectResult;
+import com.aliyun.sdk.service.oss2.models.ListBucketsRequest;
+import com.aliyun.sdk.service.oss2.models.ListBucketsResult;
+import com.aliyun.sdk.service.oss2.models.ListObjectsRequest;
+import com.aliyun.sdk.service.oss2.models.ListObjectsResult;
+import com.aliyun.sdk.service.oss2.models.ObjectSummary;
+import com.aliyun.sdk.service.oss2.models.PutObjectRequest;
+import com.aliyun.sdk.service.oss2.models.PutObjectResult;
+import com.aliyun.sdk.service.oss2.transport.BinaryData;
+import com.google.gson.Gson;
+import org.apache.camel.Exchange;
+import org.apache.camel.WrappedFile;
+import org.apache.camel.component.alibaba.oss.constants.OSSOperations;
+import org.apache.camel.component.alibaba.oss.constants.OSSProperties;
+import org.apache.camel.component.alibaba.oss.models.ClientConfigurations;
+import org.apache.camel.support.DefaultProducer;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class OSSProducer extends DefaultProducer {
+ private static final Logger LOG = LoggerFactory.getLogger(OSSProducer.class);
+
+ private final OSSEndpoint endpoint;
+ private OSSClient ossClient;
+ private Gson gson;
+
+ public OSSProducer(OSSEndpoint endpoint) {
+ super(endpoint);
+ this.endpoint = endpoint;
+ }
+
+ @Override
+ protected void doInit() throws Exception {
+ super.doInit();
+ this.gson = new Gson();
+ }
+
+ @Override
+ public void process(Exchange exchange) throws Exception {
+ ClientConfigurations clientConfigurations = new ClientConfigurations();
+
+ if (ossClient == null) {
+ this.ossClient = endpoint.initClient();
+ }
+
Review Comment:
**Important — exchange properties vs headers:** The `updateClientConfigs()` method reads runtime overrides from `exchange.getProperty(OSSProperties.*)`, but the Camel convention is to use **message headers** (`exchange.getIn().getHeader(...)`) for dynamic parameter overrides. Exchange properties are for internal exchange metadata.
The docs table in `alibaba-oss-component.adoc` has the column header "Header" but the code reads from properties — users following the documentation will call `setHeader("CamelAlibabaOssOperation", ...)` and the producer will silently ignore it.
Recommendation: change `OSSProperties` to be used as header constants (like `OSSHeaders` already is for the consumer), and read from `exchange.getIn().getHeader(...)` instead of `exchange.getProperty(...)`.
##########
components/camel-alibaba/camel-alibaba-oss/src/main/java/org/apache/camel/component/alibaba/oss/OSSProducer.java:
##########
@@ -0,0 +1,377 @@
+/*
+ * 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.alibaba.oss;
+
+import java.io.File;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.aliyun.sdk.service.oss2.OSSClient;
+import com.aliyun.sdk.service.oss2.models.BucketSummary;
+import com.aliyun.sdk.service.oss2.models.CopyObjectRequest;
+import com.aliyun.sdk.service.oss2.models.CopyObjectResult;
+import com.aliyun.sdk.service.oss2.models.DeleteObjectRequest;
+import com.aliyun.sdk.service.oss2.models.DeleteObjectResult;
+import com.aliyun.sdk.service.oss2.models.GetObjectRequest;
+import com.aliyun.sdk.service.oss2.models.GetObjectResult;
+import com.aliyun.sdk.service.oss2.models.HeadObjectRequest;
+import com.aliyun.sdk.service.oss2.models.HeadObjectResult;
+import com.aliyun.sdk.service.oss2.models.ListBucketsRequest;
+import com.aliyun.sdk.service.oss2.models.ListBucketsResult;
+import com.aliyun.sdk.service.oss2.models.ListObjectsRequest;
+import com.aliyun.sdk.service.oss2.models.ListObjectsResult;
+import com.aliyun.sdk.service.oss2.models.ObjectSummary;
+import com.aliyun.sdk.service.oss2.models.PutObjectRequest;
+import com.aliyun.sdk.service.oss2.models.PutObjectResult;
+import com.aliyun.sdk.service.oss2.transport.BinaryData;
+import com.google.gson.Gson;
+import org.apache.camel.Exchange;
+import org.apache.camel.WrappedFile;
+import org.apache.camel.component.alibaba.oss.constants.OSSOperations;
+import org.apache.camel.component.alibaba.oss.constants.OSSProperties;
+import org.apache.camel.component.alibaba.oss.models.ClientConfigurations;
+import org.apache.camel.support.DefaultProducer;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class OSSProducer extends DefaultProducer {
+ private static final Logger LOG = LoggerFactory.getLogger(OSSProducer.class);
+
+ private final OSSEndpoint endpoint;
+ private OSSClient ossClient;
+ private Gson gson;
+
+ public OSSProducer(OSSEndpoint endpoint) {
+ super(endpoint);
+ this.endpoint = endpoint;
+ }
+
+ @Override
+ protected void doInit() throws Exception {
+ super.doInit();
+ this.gson = new Gson();
+ }
+
Review Comment:
**Important — JSON serialization via Gson:** All producer operations serialize results to JSON strings using `gson.toJson(...)`. This is non-standard in Camel:
1. Most components return the SDK result object or typed `Map<String, Object>` as the body, letting Camel's type converter system handle serialization.
2. Users who want to work with the structured data must parse JSON back, defeating the purpose of an integration framework.
3. This introduces a hard runtime dependency on Gson when Jackson is already ubiquitous in the Camel ecosystem.
Consider returning the `Map<String, Object>` directly (or the SDK result objects). Users can convert to JSON themselves if needed via Camel's data format system.
##########
components/camel-alibaba/camel-alibaba-oss/src/main/java/org/apache/camel/component/alibaba/oss/OSSEndpoint.java:
##########
@@ -0,0 +1,240 @@
+/*
+ * 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.alibaba.oss;
+
+import com.aliyun.sdk.service.oss2.OSSClient;
+import org.apache.camel.Category;
+import org.apache.camel.Consumer;
+import org.apache.camel.Processor;
+import org.apache.camel.Producer;
+import org.apache.camel.component.alibaba.common.models.ServiceKeys;
+import org.apache.camel.component.alibaba.oss.constants.OSSHeaders;
+import org.apache.camel.spi.Metadata;
+import org.apache.camel.spi.UriEndpoint;
+import org.apache.camel.spi.UriParam;
+import org.apache.camel.spi.UriPath;
+import org.apache.camel.support.ScheduledPollEndpoint;
+
+/**
+ * Alibaba Cloud Object Storage Service (OSS) component
+ */
+@UriEndpoint(firstVersion = "4.23.0", scheme = "alibaba-oss", title = "Alibaba Object Storage Service (OSS)",
+ syntax = "alibaba-oss:operation",
+ category = { Category.CLOUD }, headersClass = OSSHeaders.class)
+public class OSSEndpoint extends ScheduledPollEndpoint {
+
+ @UriPath(description = "Operation to be performed", displayName = "Operation", label = "producer")
+ @Metadata(required = true)
+ private String operation;
+
+ @UriParam(description = "OSS service region", displayName = "Service region")
+ @Metadata(required = true)
+ private String region;
+
+ @UriParam(description = "OSS endpoint URL. Carries higher precedence than region based client initialization",
+ displayName = "Endpoint url")
+ private String endpoint;
+
+ @UriParam(description = "Configuration object for cloud service authentication", displayName = "Service Configuration",
+ security = "secret", label = "security")
+ private ServiceKeys serviceKeys;
+
+ @UriParam(description = "Access key for the cloud user", displayName = "API access key (AK)",
+ security = "secret", label = "security")
+ @Metadata(required = true)
+ private String accessKey;
Review Comment:
**Important:** Missing `secret = true` on `@UriParam`. The `security = "secret"` attribute controls the security *policy* framework (e.g., `camel.main.profile = prod`), but it does **not** mask the value in logs, JMX, and management APIs. For that, `secret = true` is required.
Per CLAUDE.md: *"Mark sensitive parameters with `secret = true` on `@UriParam` or `@Metadata` (passwords, tokens, API keys)"*.
The MNS module correctly uses `secret = true` — this module should do the same. Apply the same fix to the `secretKey` and `serviceKeys` fields below.
```suggestion
@UriParam(description = "Access key for the cloud user", displayName = "API access key (AK)",
secret = true, security = "secret", label = "security")
@Metadata(required = true)
private String accessKey;
```
##########
components/camel-alibaba/camel-alibaba-mns/src/main/java/org/apache/camel/component/alibaba/mns/MNSEndpoint.java:
##########
@@ -0,0 +1,261 @@
+/*
+ * 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.alibaba.mns;
+
+import com.aliyun.mns.client.MNSClient;
+import org.apache.camel.Category;
+import org.apache.camel.Consumer;
+import org.apache.camel.Processor;
+import org.apache.camel.Producer;
+import org.apache.camel.component.alibaba.common.models.ServiceKeys;
+import org.apache.camel.component.alibaba.mns.constants.MNSHeaders;
+import org.apache.camel.component.alibaba.mns.constants.MNSOperations;
+import org.apache.camel.spi.Metadata;
+import org.apache.camel.spi.UriEndpoint;
+import org.apache.camel.spi.UriParam;
+import org.apache.camel.spi.UriPath;
+import org.apache.camel.support.ScheduledPollEndpoint;
+
+/**
+ * Send and receive messages to/from Alibaba Cloud Message Service (MNS).
+ */
+@UriEndpoint(firstVersion = "4.23.0", scheme = "alibaba-mns", title = "Alibaba Message Service (MNS)",
+ syntax = "alibaba-mns:queueName", category = { Category.CLOUD, Category.MESSAGING },
+ headersClass = MNSHeaders.class)
+public class MNSEndpoint extends ScheduledPollEndpoint {
+
+ @UriPath(description = "Queue name, or topic name when using the topic URI syntax", displayName = "Queue Name")
+ @Metadata(required = true)
+ private String queueName;
+
+ @UriParam(description = "Operation to perform", displayName = "Operation",
+ enums = "sendMessage,receiveMessage,deleteMessage,publishMessage")
+ private String operation;
+
+ @UriParam(description = "Alibaba Cloud region", displayName = "Region")
+ @Metadata(required = true)
+ private String region;
+
+ @UriParam(description = "MNS account endpoint, for example https://123456.mns.cn-hangzhou.aliyuncs.com",
+ displayName = "Account Endpoint")
+ @Metadata(required = true)
+ private String accountEndpoint;
+
+ @UriParam(description = "Access key for the cloud user", displayName = "Access Key", secret = true)
+ private String accessKey;
+
+ @UriParam(description = "Secret key for the cloud user", displayName = "Secret Key", secret = true)
+ private String secretKey;
+
+ @UriParam(description = "Configuration object for cloud service authentication", displayName = "Service Keys",
+ security = "secret")
+ private ServiceKeys serviceKeys;
Review Comment:
**Moderate — inconsistent annotation style:** MNS correctly uses `secret = true` here, but is missing `label = "security"` for catalog grouping (which OSS has). For consistency across the two modules, both endpoints should use `secret = true` (for masking) AND `label = "security"` (for catalog grouping).
```suggestion
@UriParam(description = "Access key for the cloud user", displayName = "Access Key",
secret = true, label = "security")
private String accessKey;
```
Apply the same to the `secretKey` and `serviceKeys` fields.
##########
components/camel-alibaba/camel-alibaba-mns/src/main/java/org/apache/camel/component/alibaba/mns/constants/MNSProperties.java:
##########
@@ -0,0 +1,32 @@
+/*
+ * 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.alibaba.mns.constants;
+
+public final class MNSProperties {
+
+ public static final String OPERATION = "CamelAlibabaMnsOperation";
+ public static final String QUEUE_NAME = "CamelAlibabaMnsQueueName";
+ public static final String TOPIC_NAME = "CamelAlibabaMnsTopicName";
+ public static final String RECEIPT_HANDLE = "CamelAlibabaMnsReceiptHandle";
+
+ public static final String MESSAGE_ID = "CamelAlibabaMnsMessageId";
+ public static final String REQUEST_ID = "CamelAlibabaMnsRequestId";
Review Comment:
**Minor:** `MNSProperties.RECEIPT_HANDLE` and `MNSHeaders.RECEIPT_HANDLE` both resolve to `"CamelAlibabaMnsReceiptHandle"`. In `MNSUtils.resolveReceiptHandle()`, the method checks 3 different sources (property by `MNSProperties.RECEIPT_HANDLE`, header by `MNSProperties.RECEIPT_HANDLE`, header by `MNSHeaders.RECEIPT_HANDLE`) — but the last two are identical. Consider removing the duplicate constant or consolidating the lookup.
##########
components/camel-alibaba/camel-alibaba-oss/src/main/java/org/apache/camel/component/alibaba/oss/OSSEndpoint.java:
##########
@@ -0,0 +1,240 @@
+/*
+ * 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.alibaba.oss;
+
+import com.aliyun.sdk.service.oss2.OSSClient;
+import org.apache.camel.Category;
+import org.apache.camel.Consumer;
+import org.apache.camel.Processor;
+import org.apache.camel.Producer;
+import org.apache.camel.component.alibaba.common.models.ServiceKeys;
+import org.apache.camel.component.alibaba.oss.constants.OSSHeaders;
+import org.apache.camel.spi.Metadata;
+import org.apache.camel.spi.UriEndpoint;
+import org.apache.camel.spi.UriParam;
+import org.apache.camel.spi.UriPath;
+import org.apache.camel.support.ScheduledPollEndpoint;
+
+/**
+ * Alibaba Cloud Object Storage Service (OSS) component
+ */
+@UriEndpoint(firstVersion = "4.23.0", scheme = "alibaba-oss", title = "Alibaba Object Storage Service (OSS)",
+ syntax = "alibaba-oss:operation",
+ category = { Category.CLOUD }, headersClass = OSSHeaders.class)
Review Comment:
**Moderate — URI design for consumer use:** The syntax `alibaba-oss:operation` requires an operation as the URI path, but this component supports both producer and consumer. When used as a consumer (`from("alibaba-oss:listObjects?bucketName=...")`), the user must provide an operation name that is meaningless for consumers.
Consider using `bucketName` as the path parameter (similar to `camel-aws2-s3`) and making `operation` a query parameter, e.g.:
```
syntax = "alibaba-oss:bucketName"
```
This would make the consumer URI more natural: `from("alibaba-oss:my-bucket?deleteAfterRead=true")`.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@camel.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] CAMEL-24373: Add camel-alibaba MVP (common, OSS, MNS) — phase 1 [camel]
Posted by "davsclaus (via GitHub)" <gi...@apache.org>.
davsclaus commented on PR #25433:
URL: https://github.com/apache/camel/pull/25433#issuecomment-5269726992
triggered
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@camel.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] CAMEL-24373: Add camel-alibaba MVP (common, OSS, MNS) — phase 1 [camel]
Posted by "atiaomar1978-hub (via GitHub)" <gi...@apache.org>.
atiaomar1978-hub commented on PR #25433:
URL: https://github.com/apache/camel/pull/25433#issuecomment-5249808289
## Bugbot / Grok follow-up (commit `15349b7`)
Additional fixes pushed after automated review:
| Severity | Issue | Fix |
|----------|-------|-----|
| Significant | OSS credential resolution ignored endpoint AK/SK when empty `ServiceKeys` bean present | Match MNS/Huawei pattern: prefer endpoint params, then non-empty `ServiceKeys` |
| Significant | MNS client never closed on shutdown | Added `doStop()` + `autowiredMnsClient` flag (mirrors OSS) |
| Moderate | `listObjects` ignored `maxKeys` and scanned entire bucket | Cap collected results at `maxKeys` |
**Bugbot verdict:** Approve for phase 1 MVP after these commits.
**Grok verdict:** Request changes resolved — remaining items are non-blocking (Gson JSON bodies, OSS doc property vs header wording, optional integration tests).
All 33 unit tests still passing locally.
_AI-generated comment on behalf of atiaomar1978-hub_
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@camel.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] CAMEL-24373: Add camel-alibaba MVP (common, OSS, MNS) — phase 1 [camel]
Posted by "davsclaus (via GitHub)" <gi...@apache.org>.
davsclaus commented on PR #25433:
URL: https://github.com/apache/camel/pull/25433#issuecomment-5253405188
okay so main is now ready for 4.23.0-SNAPSHOT and this PR needs to be rebased on top and update its versions
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@camel.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] CAMEL-24373: Add camel-alibaba MVP (common, OSS, MNS) — phase 1 [camel]
Posted by "github-actions[bot] (via GitHub)" <gi...@apache.org>.
github-actions[bot] commented on PR #25433:
URL: https://github.com/apache/camel/pull/25433#issuecomment-5271360030
<!-- ci-tested-modules -->
:test_tube: **CI tested the following changed modules:**
- `bom/camel-bom`
- `catalog/camel-allcomponents`
- `catalog/camel-catalog`
- `components`
- `components/camel-alibaba`
- `components/camel-alibaba/camel-alibaba-common`
- `components/camel-alibaba/camel-alibaba-mns`
- `components/camel-alibaba/camel-alibaba-oss`
- `core/camel-main`
- `coverage`
- `docs`
- `dsl/camel-componentdsl`
- `dsl/camel-endpointdsl`
- `dsl/camel-kamelet-main`
- `parent`
- `tooling/maven/camel-package-maven-plugin`
> :information_source: Dependent modules were not tested because the total number of affected modules exceeded the threshold (50). Use the `test-dependents` label to force testing all dependents.
:white_check_mark: **POM dependency changes: targeted tests included**
Changed properties: alibabacloud-oss-version,aliyun-sdk-mns-version
<details><summary>Modules affected by dependency changes (2)</summary>
- `:camel-alibaba-oss`
- `:camel-alibaba-mns`
</details>
---
<details><summary>:microscope: Scalpel shadow comparison — Scalpel: 587 tested, 22 compile-only — current: 76 all tested</summary>
[Maveniverse Scalpel](https://github.com/maveniverse/scalpel) detected **609 affected modules** (current approach: 76).
<details><summary>:warning: Modules only in Scalpel (609)</summary>
- `apache-camel`
- `archetypes`
- `camel-a2a`
- `camel-activemq`
- `camel-activemq6`
- `camel-ai-parent`
- `camel-ai-tool`
- `camel-alibaba-common`
- `camel-alibaba-mns`
- `camel-alibaba-oss`
- `camel-alibaba-parent`
- `camel-allcomponents`
- `camel-amqp`
- `camel-api`
- `camel-api-component-maven-plugin`
- `camel-arangodb`
- `camel-archetype-api-component`
- `camel-archetype-component`
- `camel-archetype-dataformat`
- `camel-archetype-java`
- `camel-archetype-main`
- `camel-archetype-spring`
- `camel-as2`
- `camel-as2-api`
- `camel-as2-parent`
- `camel-asn1`
- `camel-asterisk`
- `camel-atmosphere-websocket`
- `camel-atom`
- `camel-attachments`
- `camel-avro`
- `camel-avro-rpc`
- `camel-avro-rpc-jetty`
- `camel-avro-rpc-parent`
- `camel-avro-rpc-spi`
- `camel-aws-bedrock`
- `camel-aws-cloudtrail`
- `camel-aws-common`
- `camel-aws-config`
- `camel-aws-parameter-store`
- `camel-aws-parent`
- `camel-aws-secrets-manager`
- `camel-aws-security-hub`
- `camel-aws2-athena`
- `camel-aws2-comprehend`
- `camel-aws2-cw`
- `camel-aws2-ddb`
- `camel-aws2-ec2`
- `camel-aws2-ecs`
- `camel-aws2-eks`
- `camel-aws2-eventbridge`
- `camel-aws2-iam`
- `camel-aws2-kinesis`
- `camel-aws2-kms`
- `camel-aws2-lambda`
- `camel-aws2-mq`
- `camel-aws2-msk`
- `camel-aws2-polly`
- `camel-aws2-redshift`
- `camel-aws2-rekognition`
- `camel-aws2-s3`
- `camel-aws2-s3-vectors`
- `camel-aws2-ses`
- `camel-aws2-sns`
- `camel-aws2-sqs`
- `camel-aws2-step-functions`
- `camel-aws2-sts`
- `camel-aws2-textract`
- `camel-aws2-timestream`
- `camel-aws2-transcribe`
- `camel-aws2-translate`
- `camel-azure-common`
- `camel-azure-cosmosdb`
- `camel-azure-eventgrid`
- `camel-azure-eventhubs`
- `camel-azure-files`
- `camel-azure-functions`
- `camel-azure-key-vault`
- `camel-azure-parent`
- `camel-azure-schema-registry`
- `camel-azure-servicebus`
- `camel-azure-storage-blob`
- `camel-azure-storage-datalake`
- `camel-azure-storage-queue`
- `camel-barcode`
- `camel-base`
- `camel-base-engine`
- `camel-base64`
- `camel-bean`
- `camel-bean-validator`
- `camel-beanio`
- `camel-bindy`
- `camel-bom`
- `camel-bonita`
- `camel-box`
- `camel-box-api`
- `camel-box-parent`
- `camel-braintree`
- `camel-browse`
- `camel-caffeine`
- `camel-camunda`
- `camel-cassandraql`
- `camel-catalog`
- `camel-catalog-common`
- `camel-catalog-console`
- `camel-catalog-lucene`
- `camel-catalog-maven`
- `camel-catalog-suggest`
- `camel-cbor`
- `camel-chatscript`
- `camel-chunk`
- `camel-cli-connector`
- `camel-cli-debug`
- `camel-clickhouse`
- `camel-clickup`
- `camel-cloudevents`
- `camel-cluster`
- `camel-cm-sms`
- `camel-coap`
- `camel-cometd`
- `camel-component-maven-plugin`
- `camel-componentdsl`
- `camel-console`
- `camel-consul`
- `camel-controlbus`
- `camel-core`
- `camel-core-all`
- `camel-core-catalog`
- `camel-core-engine`
- `camel-core-languages`
- `camel-core-model`
- `camel-core-processor`
- `camel-core-reifier`
- `camel-core-xml`
- `camel-couchbase`
- `camel-couchdb`
- `camel-cron`
- `camel-crypto`
- `camel-crypto-pgp`
- `camel-csimple-joor`
- `camel-csimple-maven-plugin`
- `camel-csv`
- `camel-cxf-common`
- `camel-cxf-parent`
- `camel-cxf-rest`
- `camel-cxf-soap`
- `camel-cxf-spring-common`
- `camel-cxf-spring-rest`
- `camel-cxf-spring-soap`
- `camel-cxf-spring-transport`
- `camel-cxf-transport`
- `camel-cyberark-vault`
- `camel-dapr`
- `camel-dataformat`
- `camel-dataset`
- `camel-datasonnet`
- `camel-dataweave`
- `camel-debezium-common`
- `camel-debezium-common-parent`
- `camel-debezium-db2`
- `camel-debezium-maven-plugin`
- `camel-debezium-mongodb`
- `camel-debezium-mysql`
- `camel-debezium-oracle`
- `camel-debezium-parent`
- `camel-debezium-postgres`
- `camel-debezium-sqlserver`
- `camel-debug`
- `camel-dependencies`
- `camel-dfdl`
- `camel-dhis2`
- `camel-dhis2-api`
- `camel-dhis2-parent`
- `camel-diagram`
- `camel-digitalocean`
- `camel-direct`
- `camel-disruptor`
- `camel-djl`
- `camel-dns`
- `camel-docker`
- `camel-docling`
- `camel-drill`
- `camel-dropbox`
- `camel-dsl-modeline`
- `camel-dsl-support`
- `camel-duckdb`
- `camel-dynamic-router`
- `camel-ehcache`
- `camel-eip-documentation-enricher-maven-plugin`
- `camel-elasticsearch`
- `camel-elasticsearch-rest-client`
- `camel-endpointdsl`
- `camel-endpointdsl-support`
- `camel-event`
- `camel-exec`
- `camel-fastjson`
- `camel-fhir`
- `camel-fhir-api`
- `camel-fhir-parent`
- `camel-file`
- `camel-file-watch`
- `camel-flatpack`
- `camel-flink`
- `camel-flowable`
- `camel-fop`
- `camel-fory`
- `camel-freemarker`
- `camel-ftp`
- `camel-ftp-common`
- `camel-geocoder`
- `camel-git`
- `camel-github2`
- `camel-google-bigquery`
- `camel-google-calendar`
- `camel-google-common`
- `camel-google-drive`
- `camel-google-firestore`
- `camel-google-functions`
- `camel-google-mail`
- `camel-google-parent`
- `camel-google-pubsub`
- `camel-google-secret-manager`
- `camel-google-sheets`
- `camel-google-speech-to-text`
- `camel-google-storage`
- `camel-google-text-to-speech`
- `camel-google-vertexai`
- `camel-google-vision`
- `camel-graphql`
- `camel-grok`
- `camel-groovy`
- `camel-grpc`
- `camel-gson`
- `camel-hashicorp-vault`
- `camel-hazelcast`
- `camel-headersmap`
- `camel-health`
- `camel-hl7`
- `camel-http`
- `camel-http-base`
- `camel-http-common`
- `camel-huawei-parent`
- `camel-huaweicloud-common`
- `camel-huaweicloud-dms`
- `camel-huaweicloud-frs`
- `camel-huaweicloud-functiongraph`
- `camel-huaweicloud-iam`
- `camel-huaweicloud-imagerecognition`
- `camel-huaweicloud-obs`
- `camel-huaweicloud-smn`
- `camel-huggingface`
- `camel-ibm-cos`
- `camel-ibm-parent`
- `camel-ibm-secrets-manager`
- `camel-ibm-watson-discovery`
- `camel-ibm-watson-language`
- `camel-ibm-watson-speech-to-text`
- `camel-ibm-watson-text-to-speech`
- `camel-ibm-watsonx-ai`
- `camel-ibm-watsonx-data`
- `camel-ical`
- `camel-iec60870`
- `camel-iggy`
- `camel-ignite`
- `camel-infinispan`
- `camel-infinispan-common`
- `camel-infinispan-embedded`
- `camel-infinispan-parent`
- `camel-influxdb`
- `camel-influxdb2`
- `camel-irc`
- `camel-ironmq`
- `camel-iso8583`
- `camel-itest`
- `camel-jackson`
- `camel-jackson-avro`
- `camel-jackson-protobuf`
- `camel-jackson3`
- `camel-jackson3-avro`
- `camel-jackson3-protobuf`
- `camel-jackson3xml`
- `camel-jacksonxml`
- `camel-jactl`
- `camel-jandex`
- `camel-jasypt`
- `camel-java-io`
- `camel-java-joor-dsl`
- `camel-javascript`
- `camel-jaxb`
- `camel-jbang-console`
- `camel-jbang-core`
- `camel-jbang-it`
- `camel-jbang-main`
- `camel-jbang-mcp`
- `camel-jbang-parent`
- `camel-jbang-plugin-edit`
- `camel-jbang-plugin-generate`
- `camel-jbang-plugin-kubernetes`
- `camel-jbang-plugin-mcp`
- `camel-jbang-plugin-route-parser`
- `camel-jbang-plugin-test`
- `camel-jbang-plugin-tui`
- `camel-jbang-plugin-validate`
- `camel-jcache`
- `camel-jcr`
- `camel-jdbc`
- `camel-jetty`
- `camel-jetty-common`
- `camel-jfr`
- `camel-jgroups`
- `camel-jgroups-raft`
- `camel-jira`
- `camel-jms`
- `camel-jmx`
- `camel-jolt`
- `camel-jooq`
- `camel-joor`
- `camel-jpa`
- `camel-jq`
- `camel-jsch`
- `camel-jslt`
- `camel-json-patch`
- `camel-json-validator`
- `camel-jsonapi`
- `camel-jsonata`
- `camel-jsonb`
- `camel-jsonpath`
- `camel-jsoup`
- `camel-jt400`
- `camel-jta`
- `camel-jte`
- `camel-kafka`
- `camel-kamelet`
- `camel-kamelet-main`
- `camel-kamelet-main-support`
- `camel-keycloak`
- `camel-knative`
- `camel-knative-api`
- `camel-knative-http`
- `camel-knative-parent`
- `camel-kserve`
- `camel-kubernetes`
- `camel-kudu`
- `camel-langchain4j-agent`
- `camel-langchain4j-agent-api`
- `camel-langchain4j-chat`
- `camel-langchain4j-core`
- `camel-langchain4j-embeddings`
- `camel-langchain4j-embeddingstore`
- `camel-langchain4j-embeddingstore-api`
- `camel-langchain4j-tokenizer`
- `camel-langchain4j-tools`
- `camel-langchain4j-web-search`
- `camel-language`
- `camel-launcher`
- `camel-launcher-container`
- `camel-ldap`
- `camel-ldif`
- `camel-leveldb`
- `camel-log`
- `camel-lra`
- `camel-lucene`
- `camel-lumberjack`
- `camel-lzf`
- `camel-mail`
- `camel-mail-microsoft-oauth`
- `camel-main`
- `camel-management`
- `camel-management-api`
- `camel-mapstruct`
- `camel-master`
- `camel-maven-plugin`
- `camel-mcp-server`
- `camel-mcp-server-api`
- `camel-mdc`
- `camel-metrics`
- `camel-micrometer`
- `camel-micrometer-observability`
- `camel-micrometer-prometheus`
- `camel-microprofile-config`
- `camel-microprofile-fault-tolerance`
- `camel-microprofile-health`
- `camel-microprofile-parent`
- `camel-milo`
- `camel-milvus`
- `camel-mina`
- `camel-mina-sftp`
- `camel-minio`
- `camel-mllp`
- `camel-mock`
- `camel-mongodb`
- `camel-mongodb-gridfs`
- `camel-mustache`
- `camel-mvel`
- `camel-mybatis`
- `camel-nats`
- `camel-neo4j`
- `camel-netty`
- `camel-netty-http`
- `camel-oaipmh`
- `camel-oauth`
- `camel-observability-services`
- `camel-observation`
- `camel-ocsf`
- `camel-ognl`
- `camel-olingo2`
- `camel-olingo2-api`
- `camel-olingo2-parent`
- `camel-olingo4`
- `camel-olingo4-api`
- `camel-olingo4-parent`
- `camel-once`
- `camel-openai`
- `camel-openapi-java`
- `camel-openapi-rest-dsl-generator`
- `camel-openapi-validator`
- `camel-opensearch`
- `camel-openstack`
- `camel-opentelemetry`
- `camel-opentelemetry-metrics`
- `camel-opentelemetry2`
- `camel-optaplanner`
- `camel-package-maven-plugin`
- `camel-paho`
- `camel-paho-mqtt5`
- `camel-parquet-avro`
- `camel-pdf`
- `camel-pg-replication-slot`
- `camel-pgevent`
- `camel-pgvector`
- `camel-pinecone`
- `camel-platform-http`
- `camel-platform-http-jolokia`
- `camel-platform-http-main`
- `camel-platform-http-vertx`
- `camel-plc4x`
- `camel-pqc`
- `camel-printer`
- `camel-protobuf`
- `camel-pubnub`
- `camel-pulsar`
- `camel-python`
- `camel-qdrant`
- `camel-quartz`
- `camel-quickfix`
- `camel-reactive-executor-tomcat`
- `camel-reactive-executor-vertx`
- `camel-reactive-streams`
- `camel-reactor`
- `camel-redis`
- `camel-ref`
- `camel-report-maven-plugin`
- `camel-resilience4j`
- `camel-resilience4j-micrometer`
- `camel-resourceresolver-github`
- `camel-rest`
- `camel-rest-openapi`
- `camel-rest-postman`
- `camel-restdsl-openapi-plugin`
- `camel-robotframework`
- `camel-rocketmq`
- `camel-route-parser`
- `camel-rss`
- `camel-rxjava`
- `camel-saga`
- `camel-salesforce`
- `camel-salesforce-codegen`
- `camel-salesforce-maven-plugin`
- `camel-salesforce-parent`
- `camel-sap-netweaver`
- `camel-saxon`
- `camel-scheduler`
- `camel-schematron`
- `camel-seda`
- `camel-servicenow`
- `camel-servicenow-maven-plugin`
- `camel-servicenow-parent`
- `camel-servlet`
- `camel-shell`
- `camel-shiro`
- `camel-sjms`
- `camel-sjms2`
- `camel-slack`
- `camel-smb`
- `camel-smooks`
- `camel-smpp`
- `camel-snakeyaml`
- `camel-snmp`
- `camel-soap`
- `camel-solr`
- `camel-splunk`
- `camel-splunk-hec`
- `camel-spring`
- `camel-spring-ai-chat`
- `camel-spring-ai-embeddings`
- `camel-spring-ai-image`
- `camel-spring-ai-parent`
- `camel-spring-ai-vector-store`
- `camel-spring-batch`
- `camel-spring-cloud-config`
- `camel-spring-jdbc`
- `camel-spring-ldap`
- `camel-spring-main`
- `camel-spring-parent`
- `camel-spring-rabbitmq`
- `camel-spring-redis`
- `camel-spring-security`
- `camel-spring-ws`
- `camel-spring-xml`
- `camel-sql`
- `camel-ssh`
- `camel-stax`
- `camel-stitch`
- `camel-stream`
- `camel-streamcaching-test`
- `camel-stringtemplate`
- `camel-stripe`
- `camel-stub`
- `camel-support`
- `camel-swift`
- `camel-syslog`
- `camel-tahu`
- `camel-tarfile`
- `camel-telegram`
- `camel-telemetry`
- `camel-telemetry-dev`
- `camel-tensorflow-serving`
- `camel-test-infra-all`
- `camel-test-infra-artemis`
- `camel-test-infra-cli`
- `camel-test-infra-core`
- `camel-test-infra-jetty`
- `camel-test-infra-qdrant`
- `camel-test-infra-smb`
- `camel-test-junit5`
- `camel-test-junit6`
- `camel-test-main-junit5`
- `camel-test-main-junit6`
- `camel-test-parent`
- `camel-test-spring-junit5`
- `camel-test-spring-junit6`
- `camel-threadpoolfactory-vertx`
- `camel-thrift`
- `camel-thymeleaf`
- `camel-tika`
- `camel-timer`
- `camel-tooling-maven`
- `camel-tracing`
- `camel-twilio`
- `camel-twitter`
- `camel-ubl`
- `camel-undertow`
- `camel-undertow-spring-security`
- `camel-univocity-parsers`
- `camel-util`
- `camel-validator`
- `camel-velocity`
- `camel-vertx`
- `camel-vertx-common`
- `camel-vertx-http`
- `camel-vertx-parent`
- `camel-vertx-websocket`
- `camel-wal`
- `camel-wasm`
- `camel-weather`
- `camel-weaviate`
- `camel-web3j`
- `camel-webhook`
- `camel-whatsapp`
- `camel-wordpress`
- `camel-workday`
- `camel-xchange`
- `camel-xj`
- `camel-xml-io`
- `camel-xml-io-dsl`
- `camel-xml-io-util`
- `camel-xml-jaxb`
- `camel-xml-jaxb-dsl`
- `camel-xml-jaxb-dsl-test`
- `camel-xml-jaxb-dsl-test-definition`
- `camel-xml-jaxb-dsl-test-spring`
- `camel-xml-jaxp`
- `camel-xml-jaxp-util`
- `camel-xmlsecurity`
- `camel-xmpp`
- `camel-xpath`
- `camel-xslt`
- `camel-xslt-saxon`
- `camel-yaml-dsl`
- `camel-yaml-dsl-common`
- `camel-yaml-dsl-deserializers`
- `camel-yaml-dsl-maven-plugin`
- `camel-yaml-dsl-parent`
- `camel-yaml-dsl-validator`
- `camel-yaml-dsl-validator-maven-plugin`
- `camel-yaml-io`
- `camel-zeebe`
- `camel-zendesk`
- `camel-zip-deflater`
- `camel-zipfile`
- `camel-zookeeper`
- `camel-zookeeper-master`
- `components`
- `core`
- `coverage`
- `docs`
- `dsl`
- `dummy-component`
- `sync-properties-maven-plugin`
</details>
<details><summary>Modules only in current approach (76)</summary>
- `[ERROR]`
- `[ERROR]`
- `[ERROR] Command execution failed.`
- `[ERROR] Failed to execute goal org.codehaus.mojo:exec-maven-plugin:3.6.3:exec (default-cli) on project camel-package-maven-plugin: Command execution failed. Process exited with an error: 127 (Exit value: 127) -> [Help 1]`
- `[ERROR] For more information about the errors and possible solutions, please read the following articles:`
- `[ERROR] Re-run Maven using the -X switch to enable full debug logging.`
- `[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.`
- `[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException`
- `at com.gradle.maven.cache.extension.c.a.a (SourceFile:46)`
- `at com.gradle.maven.cache.extension.c.a.a (SourceFile:46)`
- `at com.gradle.maven.cache.extension.c.b.a (SourceFile:62)`
- `at com.gradle.maven.cache.extension.c.b.c (SourceFile:118)`
- `at com.gradle.maven.cache.extension.c.c.a (SourceFile:26)`
- `at com.gradle.maven.cache.extension.c.d.a (SourceFile:27)`
- `at com.gradle.maven.cache.extension.c.g.a (SourceFile:27)`
- `at com.gradle.maven.cache.extension.c.h$1.run (SourceFile:35)`
- `at com.gradle.maven.cache.extension.c.h.a (SourceFile:31)`
- `at com.gradle.maven.cache.extension.c.j.a (SourceFile:28)`
- `at com.gradle.maven.cache.extension.c.m.a (SourceFile:80)`
- `at com.gradle.maven.cache.extension.c.n.a (SourceFile:53)`
- `at com.gradle.maven.cache.extension.c.o.a (SourceFile:18)`
- `at com.gradle.maven.cache.extension.c.p.a (SourceFile:27)`
- `at com.gradle.maven.cache.extension.c.q.a (SourceFile:23)`
- `at com.gradle.maven.cache.extension.g.b.lambda$createProxy$0 (SourceFile:77)`
- `at com.gradle.maven.scan.extension.internal.e.b.executeMojo (SourceFile:116)`
- `at java.lang.reflect.Method.invoke (Method.java:569)`
- `at java.lang.reflect.Method.invoke (Method.java:569)`
- `at java.lang.reflect.Method.invoke (Method.java:569)`
- `at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)`
- `at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)`
- `at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)`
- `at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77)`
- `at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77)`
- `at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77)`
- `at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)`
- `at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)`
- `at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)`
- `at jdk.proxy5.$Proxy69.execute (Unknown Source)`
- `at org.apache.commons.exec.DefaultExecutor.execute (DefaultExecutor.java:306)`
- `at org.apache.commons.exec.DefaultExecutor.executeInternal (DefaultExecutor.java:408)`
- `at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:173)`
- `at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:261)`
- `at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:101)`
- `at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:285)`
- `at org.apache.maven.cli.MavenCli.execute (MavenCli.java:919)`
- `at org.apache.maven.cli.MavenCli.main (MavenCli.java:207)`
- `at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:105)`
- `at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:73)`
- `at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:118)`
- `at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:162)`
- `at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:75)`
- `at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:316)`
- `at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:328)`
- `at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:159)`
- `at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:174)`
- `at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:212)`
- `at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:53)`
- `at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute (DefaultMojosExecutionStrategy.java:39)`
- `at org.apache.maven.wrapper.BootstrapMainStarter.start (BootstrapMainStarter.java:52)`
- `at org.apache.maven.wrapper.MavenWrapperMain.main (MavenWrapperMain.java:73)`
- `at org.apache.maven.wrapper.WrapperExecutor.execute (WrapperExecutor.java:161)`
- `at org.codehaus.mojo.exec.ExecMojo.execute (ExecMojo.java:464)`
- `at org.codehaus.mojo.exec.ExecMojo.executeCommandLine (ExecMojo.java:873)`
- `at org.codehaus.mojo.exec.ExecMojo.executeCommandLine (ExecMojo.java:913)`
- `at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:201)`
- `at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:255)`
- `at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:314)`
- `at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:362)`
- `at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute (SourceFile:27)`
- `at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute (SourceFile:30)`
- `at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute (SourceFile:60)`
- `at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute (SourceFile:67)`
- `at org.gradle.internal.operations.DefaultBuildOperationRunner.execute (SourceFile:167)`
- `at org.gradle.internal.operations.DefaultBuildOperationRunner.execute (SourceFile:60)`
- `at org.gradle.internal.operations.DefaultBuildOperationRunner.run (SourceFile:48)`
- `org.apache.commons.exec.ExecuteException: Process exited with an error: 127 (Exit value: 127)`
</details>
Changed properties: aliyun-sdk-mns-version, alibabacloud-oss-version
Changed managed dependencies: org.apache.camel:camel-alibaba-common, org.apache.camel:camel-alibaba-mns, org.apache.camel:camel-alibaba-oss
**Skip-tests mode would test 587 modules** (14 direct + 573 downstream), **skip tests for 22** (generated code, meta-modules)
<details><summary>Modules Scalpel would test (587)</summary>
- `archetypes`
- `camel-a2a`
- `camel-activemq`
- `camel-activemq6`
- `camel-ai-parent`
- `camel-ai-tool`
- `camel-alibaba-common`
- `camel-alibaba-mns`
- `camel-alibaba-oss`
- `camel-alibaba-parent`
- `camel-allcomponents`
- `camel-amqp`
- `camel-api`
- `camel-api-component-maven-plugin`
- `camel-arangodb`
- `camel-archetype-api-component`
- `camel-archetype-component`
- `camel-archetype-dataformat`
- `camel-archetype-java`
- `camel-archetype-main`
- `camel-archetype-spring`
- `camel-as2`
- `camel-as2-api`
- `camel-as2-parent`
- `camel-asn1`
- `camel-asterisk`
- `camel-atmosphere-websocket`
- `camel-atom`
- `camel-attachments`
- `camel-avro`
- `camel-avro-rpc`
- `camel-avro-rpc-jetty`
- `camel-avro-rpc-parent`
- `camel-avro-rpc-spi`
- `camel-aws-bedrock`
- `camel-aws-cloudtrail`
- `camel-aws-common`
- `camel-aws-config`
- `camel-aws-parameter-store`
- `camel-aws-parent`
- `camel-aws-secrets-manager`
- `camel-aws-security-hub`
- `camel-aws2-athena`
- `camel-aws2-comprehend`
- `camel-aws2-cw`
- `camel-aws2-ddb`
- `camel-aws2-ec2`
- `camel-aws2-ecs`
- `camel-aws2-eks`
- `camel-aws2-eventbridge`
- `camel-aws2-iam`
- `camel-aws2-kinesis`
- `camel-aws2-kms`
- `camel-aws2-lambda`
- `camel-aws2-mq`
- `camel-aws2-msk`
- `camel-aws2-polly`
- `camel-aws2-redshift`
- `camel-aws2-rekognition`
- `camel-aws2-s3`
- `camel-aws2-s3-vectors`
- `camel-aws2-ses`
- `camel-aws2-sns`
- `camel-aws2-sqs`
- `camel-aws2-step-functions`
- `camel-aws2-sts`
- `camel-aws2-textract`
- `camel-aws2-timestream`
- `camel-aws2-transcribe`
- `camel-aws2-translate`
- `camel-azure-common`
- `camel-azure-cosmosdb`
- `camel-azure-eventgrid`
- `camel-azure-eventhubs`
- `camel-azure-files`
- `camel-azure-functions`
- `camel-azure-key-vault`
- `camel-azure-parent`
- `camel-azure-schema-registry`
- `camel-azure-servicebus`
- `camel-azure-storage-blob`
- `camel-azure-storage-datalake`
- `camel-azure-storage-queue`
- `camel-barcode`
- `camel-base`
- `camel-base-engine`
- `camel-base64`
- `camel-bean`
- `camel-bean-validator`
- `camel-beanio`
- `camel-bindy`
- `camel-bom`
- `camel-bonita`
- `camel-box`
- `camel-box-api`
- `camel-box-parent`
- `camel-braintree`
- `camel-browse`
- `camel-caffeine`
- `camel-camunda`
- `camel-cassandraql`
- `camel-catalog`
- `camel-catalog-common`
- `camel-cbor`
- `camel-chatscript`
- `camel-chunk`
- `camel-cli-connector`
- `camel-cli-debug`
- `camel-clickhouse`
- `camel-clickup`
- `camel-cloudevents`
- `camel-cluster`
- `camel-cm-sms`
- `camel-coap`
- `camel-cometd`
- `camel-component-maven-plugin`
- `camel-componentdsl`
- `camel-console`
- `camel-consul`
- `camel-controlbus`
- `camel-core`
- `camel-core-all`
- `camel-core-catalog`
- `camel-core-engine`
- `camel-core-languages`
- `camel-core-model`
- `camel-core-processor`
- `camel-core-reifier`
- `camel-core-xml`
- `camel-couchbase`
- `camel-couchdb`
- `camel-cron`
- `camel-crypto`
- `camel-crypto-pgp`
- `camel-csimple-joor`
- `camel-csv`
- `camel-cxf-common`
- `camel-cxf-parent`
- `camel-cxf-rest`
- `camel-cxf-soap`
- `camel-cxf-spring-common`
- `camel-cxf-spring-rest`
- `camel-cxf-spring-soap`
- `camel-cxf-spring-transport`
- `camel-cxf-transport`
- `camel-cyberark-vault`
- `camel-dapr`
- `camel-dataformat`
- `camel-dataset`
- `camel-datasonnet`
- `camel-dataweave`
- `camel-debezium-common`
- `camel-debezium-common-parent`
- `camel-debezium-db2`
- `camel-debezium-maven-plugin`
- `camel-debezium-mongodb`
- `camel-debezium-mysql`
- `camel-debezium-oracle`
- `camel-debezium-parent`
- `camel-debezium-postgres`
- `camel-debezium-sqlserver`
- `camel-debug`
- `camel-dependencies`
- `camel-dfdl`
- `camel-dhis2`
- `camel-dhis2-api`
- `camel-dhis2-parent`
- `camel-diagram`
- `camel-digitalocean`
- `camel-direct`
- `camel-disruptor`
- `camel-djl`
- `camel-dns`
- `camel-docker`
- `camel-docling`
- `camel-drill`
- `camel-dropbox`
- `camel-dsl-modeline`
- `camel-dsl-support`
- `camel-duckdb`
- `camel-dynamic-router`
- `camel-ehcache`
- `camel-eip-documentation-enricher-maven-plugin`
- `camel-elasticsearch`
- `camel-elasticsearch-rest-client`
- `camel-endpointdsl`
- `camel-event`
- `camel-exec`
- `camel-fastjson`
- `camel-fhir`
- `camel-fhir-api`
- `camel-fhir-parent`
- `camel-file`
- `camel-file-watch`
- `camel-flatpack`
- `camel-flink`
- `camel-flowable`
- `camel-fop`
- `camel-fory`
- `camel-freemarker`
- `camel-ftp`
- `camel-ftp-common`
- `camel-geocoder`
- `camel-git`
- `camel-github2`
- `camel-google-bigquery`
- `camel-google-calendar`
- `camel-google-common`
- `camel-google-drive`
- `camel-google-firestore`
- `camel-google-functions`
- `camel-google-mail`
- `camel-google-parent`
- `camel-google-pubsub`
- `camel-google-secret-manager`
- `camel-google-sheets`
- `camel-google-speech-to-text`
- `camel-google-storage`
- `camel-google-text-to-speech`
- `camel-google-vertexai`
- `camel-google-vision`
- `camel-graphql`
- `camel-grok`
- `camel-groovy`
- `camel-grpc`
- `camel-gson`
- `camel-hashicorp-vault`
- `camel-hazelcast`
- `camel-headersmap`
- `camel-health`
- `camel-hl7`
- `camel-http`
- `camel-http-base`
- `camel-http-common`
- `camel-huawei-parent`
- `camel-huaweicloud-common`
- `camel-huaweicloud-dms`
- `camel-huaweicloud-frs`
- `camel-huaweicloud-functiongraph`
- `camel-huaweicloud-iam`
- `camel-huaweicloud-imagerecognition`
- `camel-huaweicloud-obs`
- `camel-huaweicloud-smn`
- `camel-huggingface`
- `camel-ibm-cos`
- `camel-ibm-parent`
- `camel-ibm-secrets-manager`
- `camel-ibm-watson-discovery`
- `camel-ibm-watson-language`
- `camel-ibm-watson-speech-to-text`
- `camel-ibm-watson-text-to-speech`
- `camel-ibm-watsonx-ai`
- `camel-ibm-watsonx-data`
- `camel-ical`
- `camel-iec60870`
- `camel-iggy`
- `camel-ignite`
- `camel-infinispan`
- `camel-infinispan-common`
- `camel-infinispan-embedded`
- `camel-infinispan-parent`
- `camel-influxdb`
- `camel-influxdb2`
- `camel-irc`
- `camel-ironmq`
- `camel-iso8583`
- `camel-jackson`
- `camel-jackson-avro`
- `camel-jackson-protobuf`
- `camel-jackson3`
- `camel-jackson3-avro`
- `camel-jackson3-protobuf`
- `camel-jackson3xml`
- `camel-jacksonxml`
- `camel-jactl`
- `camel-jandex`
- `camel-jasypt`
- `camel-java-io`
- `camel-java-joor-dsl`
- `camel-javascript`
- `camel-jaxb`
- `camel-jbang-console`
- `camel-jbang-mcp`
- `camel-jbang-parent`
- `camel-jbang-plugin-mcp`
- `camel-jbang-plugin-route-parser`
- `camel-jbang-plugin-tui`
- `camel-jbang-plugin-validate`
- `camel-jcache`
- `camel-jcr`
- `camel-jdbc`
- `camel-jetty`
- `camel-jetty-common`
- `camel-jfr`
- `camel-jgroups`
- `camel-jgroups-raft`
- `camel-jira`
- `camel-jms`
- `camel-jmx`
- `camel-jolt`
- `camel-jooq`
- `camel-joor`
- `camel-jpa`
- `camel-jq`
- `camel-jsch`
- `camel-jslt`
- `camel-json-patch`
- `camel-json-validator`
- `camel-jsonapi`
- `camel-jsonata`
- `camel-jsonb`
- `camel-jsonpath`
- `camel-jsoup`
- `camel-jt400`
- `camel-jta`
- `camel-jte`
- `camel-kafka`
- `camel-kamelet`
- `camel-kamelet-main`
- `camel-kamelet-main-support`
- `camel-keycloak`
- `camel-knative`
- `camel-knative-api`
- `camel-knative-http`
- `camel-knative-parent`
- `camel-kserve`
- `camel-kubernetes`
- `camel-kudu`
- `camel-langchain4j-agent`
- `camel-langchain4j-agent-api`
- `camel-langchain4j-chat`
- `camel-langchain4j-core`
- `camel-langchain4j-embeddings`
- `camel-langchain4j-embeddingstore`
- `camel-langchain4j-embeddingstore-api`
- `camel-langchain4j-tokenizer`
- `camel-langchain4j-tools`
- `camel-langchain4j-web-search`
- `camel-language`
- `camel-launcher-container`
- `camel-ldap`
- `camel-ldif`
- `camel-leveldb`
- `camel-log`
- `camel-lra`
- `camel-lucene`
- `camel-lumberjack`
- `camel-lzf`
- `camel-mail`
- `camel-mail-microsoft-oauth`
- `camel-main`
- `camel-management`
- `camel-management-api`
- `camel-mapstruct`
- `camel-master`
- `camel-maven-plugin`
- `camel-mcp-server`
- `camel-mcp-server-api`
- `camel-mdc`
- `camel-metrics`
- `camel-micrometer`
- `camel-micrometer-observability`
- `camel-micrometer-prometheus`
- `camel-microprofile-config`
- `camel-microprofile-fault-tolerance`
- `camel-microprofile-health`
- `camel-microprofile-parent`
- `camel-milo`
- `camel-milvus`
- `camel-mina`
- `camel-mina-sftp`
- `camel-minio`
- `camel-mllp`
- `camel-mock`
- `camel-mongodb`
- `camel-mongodb-gridfs`
- `camel-mustache`
- `camel-mvel`
- `camel-mybatis`
- `camel-nats`
- `camel-neo4j`
- `camel-netty`
- `camel-netty-http`
- `camel-oaipmh`
- `camel-oauth`
- `camel-observability-services`
- `camel-observation`
- `camel-ocsf`
- `camel-ognl`
- `camel-olingo2`
- `camel-olingo2-api`
- `camel-olingo2-parent`
- `camel-olingo4`
- `camel-olingo4-api`
- `camel-olingo4-parent`
- `camel-once`
- `camel-openai`
- `camel-openapi-java`
- `camel-openapi-rest-dsl-generator`
- `camel-openapi-validator`
- `camel-opensearch`
- `camel-openstack`
- `camel-opentelemetry`
- `camel-opentelemetry-metrics`
- `camel-opentelemetry2`
- `camel-optaplanner`
- `camel-package-maven-plugin`
- `camel-paho`
- `camel-paho-mqtt5`
- `camel-parquet-avro`
- `camel-pdf`
- `camel-pg-replication-slot`
- `camel-pgevent`
- `camel-pgvector`
- `camel-pinecone`
- `camel-platform-http`
- `camel-platform-http-jolokia`
- `camel-platform-http-main`
- `camel-platform-http-vertx`
- `camel-plc4x`
- `camel-pqc`
- `camel-printer`
- `camel-protobuf`
- `camel-pubnub`
- `camel-pulsar`
- `camel-python`
- `camel-qdrant`
- `camel-quartz`
- `camel-quickfix`
- `camel-reactive-executor-tomcat`
- `camel-reactive-executor-vertx`
- `camel-reactive-streams`
- `camel-reactor`
- `camel-redis`
- `camel-ref`
- `camel-resilience4j`
- `camel-resilience4j-micrometer`
- `camel-resourceresolver-github`
- `camel-rest`
- `camel-rest-openapi`
- `camel-rest-postman`
- `camel-restdsl-openapi-plugin`
- `camel-robotframework`
- `camel-rocketmq`
- `camel-rss`
- `camel-rxjava`
- `camel-saga`
- `camel-salesforce`
- `camel-salesforce-codegen`
- `camel-salesforce-maven-plugin`
- `camel-salesforce-parent`
- `camel-sap-netweaver`
- `camel-saxon`
- `camel-scheduler`
- `camel-schematron`
- `camel-seda`
- `camel-servicenow`
- `camel-servicenow-maven-plugin`
- `camel-servicenow-parent`
- `camel-servlet`
- `camel-shell`
- `camel-shiro`
- `camel-sjms`
- `camel-sjms2`
- `camel-slack`
- `camel-smb`
- `camel-smooks`
- `camel-smpp`
- `camel-snakeyaml`
- `camel-snmp`
- `camel-soap`
- `camel-solr`
- `camel-splunk`
- `camel-splunk-hec`
- `camel-spring`
- `camel-spring-ai-chat`
- `camel-spring-ai-embeddings`
- `camel-spring-ai-image`
- `camel-spring-ai-parent`
- `camel-spring-ai-vector-store`
- `camel-spring-batch`
- `camel-spring-cloud-config`
- `camel-spring-jdbc`
- `camel-spring-ldap`
- `camel-spring-main`
- `camel-spring-parent`
- `camel-spring-rabbitmq`
- `camel-spring-redis`
- `camel-spring-security`
- `camel-spring-ws`
- `camel-spring-xml`
- `camel-sql`
- `camel-ssh`
- `camel-stax`
- `camel-stitch`
- `camel-stream`
- `camel-streamcaching-test`
- `camel-stringtemplate`
- `camel-stripe`
- `camel-stub`
- `camel-support`
- `camel-swift`
- `camel-syslog`
- `camel-tahu`
- `camel-tarfile`
- `camel-telegram`
- `camel-telemetry`
- `camel-telemetry-dev`
- `camel-tensorflow-serving`
- `camel-test-infra-all`
- `camel-test-infra-artemis`
- `camel-test-infra-cli`
- `camel-test-infra-core`
- `camel-test-infra-jetty`
- `camel-test-infra-qdrant`
- `camel-test-infra-smb`
- `camel-test-junit5`
- `camel-test-junit6`
- `camel-test-main-junit5`
- `camel-test-main-junit6`
- `camel-test-parent`
- `camel-test-spring-junit5`
- `camel-test-spring-junit6`
- `camel-threadpoolfactory-vertx`
- `camel-thrift`
- `camel-thymeleaf`
- `camel-tika`
- `camel-timer`
- `camel-tooling-maven`
- `camel-tracing`
- `camel-twilio`
- `camel-twitter`
- `camel-ubl`
- `camel-undertow`
- `camel-undertow-spring-security`
- `camel-univocity-parsers`
- `camel-util`
- `camel-validator`
- `camel-velocity`
- `camel-vertx`
- `camel-vertx-common`
- `camel-vertx-http`
- `camel-vertx-parent`
- `camel-vertx-websocket`
- `camel-wal`
- `camel-wasm`
- `camel-weather`
- `camel-weaviate`
- `camel-web3j`
- `camel-webhook`
- `camel-whatsapp`
- `camel-wordpress`
- `camel-workday`
- `camel-xchange`
- `camel-xj`
- `camel-xml-io`
- `camel-xml-io-dsl`
- `camel-xml-io-util`
- `camel-xml-jaxb`
- `camel-xml-jaxb-dsl`
- `camel-xml-jaxb-dsl-test`
- `camel-xml-jaxb-dsl-test-definition`
- `camel-xml-jaxb-dsl-test-spring`
- `camel-xml-jaxp`
- `camel-xml-jaxp-util`
- `camel-xmlsecurity`
- `camel-xmpp`
- `camel-xpath`
- `camel-xslt`
- `camel-xslt-saxon`
- `camel-yaml-dsl-common`
- `camel-yaml-dsl-parent`
- `camel-yaml-dsl-validator`
- `camel-yaml-dsl-validator-maven-plugin`
- `camel-yaml-io`
- `camel-zeebe`
- `camel-zendesk`
- `camel-zip-deflater`
- `camel-zipfile`
- `camel-zookeeper`
- `camel-zookeeper-master`
- `components`
- `core`
- `coverage`
- `docs`
- `dsl`
- `sync-properties-maven-plugin`
</details>
<details><summary>Modules with tests skipped (22)</summary>
- `apache-camel`
- `camel-catalog-console`
- `camel-catalog-lucene`
- `camel-catalog-maven`
- `camel-catalog-suggest`
- `camel-csimple-maven-plugin`
- `camel-endpointdsl-support`
- `camel-itest`
- `camel-jbang-core`
- `camel-jbang-it`
- `camel-jbang-main`
- `camel-jbang-plugin-edit`
- `camel-jbang-plugin-generate`
- `camel-jbang-plugin-kubernetes`
- `camel-jbang-plugin-test`
- `camel-launcher`
- `camel-report-maven-plugin`
- `camel-route-parser`
- `camel-yaml-dsl`
- `camel-yaml-dsl-deserializers`
- `camel-yaml-dsl-maven-plugin`
- `dummy-component`
</details>
> :information_source: Shadow mode — Scalpel observes but does not affect test execution. [Learn more](https://github.com/maveniverse/scalpel)
</details>
:warning: **Some tests are disabled on GitHub Actions** (`@DisabledIfSystemProperty(named = "ci.env.name")`) and require manual verification:
- `components`: 103 test(s) disabled on GitHub Actions
<details><summary>Build reactor — dependencies compiled but only changed modules were tested (609 modules)</summary>
- Camel :: AI :: A2A
- Camel :: AI :: ChatScript
- Camel :: AI :: Deep Java Library
- Camel :: AI :: Docling
- Camel :: AI :: Hugging Face
- Camel :: AI :: KServe
- Camel :: AI :: LangChain4j :: Agent
- Camel :: AI :: LangChain4j :: Agent :: API
- Camel :: AI :: LangChain4j :: Chat
- Camel :: AI :: LangChain4j :: Core
- Camel :: AI :: LangChain4j :: Embedding
- Camel :: AI :: LangChain4j :: Embedding Store :: API
- Camel :: AI :: LangChain4j :: EmbeddingStore
- Camel :: AI :: LangChain4j :: Tokenizer
- Camel :: AI :: LangChain4j :: Tools (deprecated)
- Camel :: AI :: LangChain4j :: Web Search
- Camel :: AI :: MCP Server
- Camel :: AI :: MCP Server API
- Camel :: AI :: Milvus
- Camel :: AI :: Neo4j
- Camel :: AI :: OpenAI
- Camel :: AI :: PGVector
- Camel :: AI :: Parent
- Camel :: AI :: Pinecone
- Camel :: AI :: Qdrant
- Camel :: AI :: TensorFlow Serving
- Camel :: AI :: Tool
- Camel :: AI :: Weaviate
- Camel :: AMQP
- Camel :: API
- Camel :: AS2 :: API
- Camel :: AS2 :: Component
- Camel :: AS2 :: Parent
- Camel :: ASN.1
- Camel :: AWS :: Common
- Camel :: AWS :: Parent
- Camel :: AWS CloudTrail
- Camel :: AWS Config
- Camel :: AWS Redshift Data
- Camel :: AWS Rekognition
- Camel :: AWS Security Hub
- Camel :: AWS Step Functions
- Camel :: AWS Timestream
- Camel :: AWS2 :: Transcribe
- Camel :: AWS2 Athena
- Camel :: AWS2 Bedrock
- Camel :: AWS2 CW
- Camel :: AWS2 Comprehend
- Camel :: AWS2 DDB
- Camel :: AWS2 EC2
- Camel :: AWS2 ECS
- Camel :: AWS2 EKS
- Camel :: AWS2 Eventbridge
- Camel :: AWS2 IAM
- Camel :: AWS2 KMS
- Camel :: AWS2 Kinesis
- Camel :: AWS2 Lambda
- Camel :: AWS2 MQ
- Camel :: AWS2 MSK
- Camel :: AWS2 Parameter Store
- Camel :: AWS2 Polly
- Camel :: AWS2 S3
- Camel :: AWS2 S3 Vectors
- Camel :: AWS2 SES
- Camel :: AWS2 SNS
- Camel :: AWS2 SQS
- Camel :: AWS2 STS
- Camel :: AWS2 Secrets Manager
- Camel :: AWS2 Textract
- Camel :: AWS2 Translate
- Camel :: ActiveMQ 5.x
- Camel :: ActiveMQ 6.x
- Camel :: Alibaba Cloud :: Common
- Camel :: Alibaba Cloud :: Message Service (MNS)
- Camel :: Alibaba Cloud :: OSS
- Camel :: Alibaba Cloud :: Parent
- Camel :: All Components Sync point
- Camel :: All Core Sync point
- Camel :: ArangoDB
- Camel :: Archetypes
- Camel :: Archetypes :: API Component
- Camel :: Archetypes :: Component
- Camel :: Archetypes :: Data Format
- Camel :: Archetypes :: Java Router
- Camel :: Archetypes :: Main
- Camel :: Archetypes :: Spring XML Based Router (deprecated)
- Camel :: Assembly
- Camel :: Asterisk
- Camel :: Atmosphere WebSocket Servlet
- Camel :: Atom
- Camel :: Attachments
- Camel :: Avro
- Camel :: Avro RPC
- Camel :: Avro RPC :: Jetty
- Camel :: Avro RPC :: Parent
- Camel :: Avro RPC :: Spi
- Camel :: Azure :: Common
- Camel :: Azure :: CosmosDB
- Camel :: Azure :: Event Grid
- Camel :: Azure :: Event Hubs
- Camel :: Azure :: Files
- Camel :: Azure :: Functions
- Camel :: Azure :: Key Vault
- Camel :: Azure :: Parent
- Camel :: Azure :: Schema Registry
- Camel :: Azure :: ServiceBus
- Camel :: Azure :: Storage Blob
- Camel :: Azure :: Storage Datalake
- Camel :: Azure :: Storage Queue
- Camel :: BOM
- Camel :: Barcode
- Camel :: Base
- Camel :: Base Engine
- Camel :: Base64
- Camel :: Bean
- Camel :: Bean validator
- Camel :: BeanIO
- Camel :: Bindy
- Camel :: Bonita
- Camel :: Box :: API
- Camel :: Box :: Component
- Camel :: Box :: Parent
- Camel :: Braintree
- Camel :: Browse
- Camel :: CBOR
- Camel :: CM SMS
- Camel :: CSV
- Camel :: CXF :: Common
- Camel :: CXF :: Common :: Spring
- Camel :: CXF :: Parent
- Camel :: CXF :: REST
- Camel :: CXF :: REST :: Spring
- Camel :: CXF :: SOAP
- Camel :: CXF :: SOAP :: Spring
- Camel :: CXF :: Transport
- Camel :: CXF :: Transport :: Spring
- Camel :: Caffeine
- Camel :: Camunda
- Camel :: Cassandra CQL
- Camel :: Catalog :: CSimple Maven Plugin (deprecated)
- Camel :: Catalog :: Camel Catalog
- Camel :: Catalog :: Camel Report Maven Plugin
- Camel :: Catalog :: Camel Route Parser
- Camel :: Catalog :: Common
- Camel :: Catalog :: Console
- Camel :: Catalog :: Dummy Component
- Camel :: Catalog :: Lucene (deprecated)
- Camel :: Catalog :: Maven
- Camel :: Catalog :: Suggest
- Camel :: Chunk
- Camel :: ClickHouse
- Camel :: ClickUp
- Camel :: CloudEvents
- Camel :: Cluster
- Camel :: CoAP
- Camel :: Cometd
- Camel :: Common Telemetry
- Camel :: Common Tracing (deprecated)
- Camel :: Component DSL
- Camel :: Components
- Camel :: Console
- Camel :: Consul
- Camel :: Controlbus
- Camel :: Core
- Camel :: Core Catalog
- Camel :: Core Engine
- Camel :: Core Languages
- Camel :: Core Model
- Camel :: Core Modules
- Camel :: Core Processor
- Camel :: Core Reifier
- Camel :: Core XML
- Camel :: CouchDB
- Camel :: Couchbase
- Camel :: Coverage
- Camel :: Cron
- Camel :: Crypto
- Camel :: Crypto PGP
- Camel :: CyberArk Vault
- Camel :: DFDL
- Camel :: DHIS2
- Camel :: DHIS2 :: Parent
- Camel :: DHIS2 API
- Camel :: DNS
- Camel :: DSL :: CLI Connector
- Camel :: DSL :: CLI Debug
- Camel :: DSL :: Modeline
- Camel :: DSL :: Parent
- Camel :: DSL :: Support
- Camel :: Dapr
- Camel :: DataSet
- Camel :: DataSonnet
- Camel :: DataWeave
- Camel :: Dataformat
- Camel :: Debezium :: Common
- Camel :: Debezium :: Common :: Parent
- Camel :: Debezium :: DB2
- Camel :: Debezium :: Maven Plugin
- Camel :: Debezium :: MongoDB
- Camel :: Debezium :: MySQL
- Camel :: Debezium :: Oracle
- Camel :: Debezium :: Parent
- Camel :: Debezium :: PostgreSQL
- Camel :: Debezium :: SQL Server
- Camel :: Debugging
- Camel :: Dependencies
- Camel :: Diagram
- Camel :: DigitalOcean (deprecated)
- Camel :: Direct
- Camel :: Disruptor
- Camel :: Docker
- Camel :: Docs
- Camel :: Drill
- Camel :: Dropbox
- Camel :: DuckDB
- Camel :: Dynamic Router
- Camel :: Ehcache
- Camel :: ElasticSearch Rest Client
- Camel :: Elasticsearch Java API Client
- Camel :: Endpoint DSL
- Camel :: Endpoint DSL :: Support
- Camel :: Event
- Camel :: Exec
- Camel :: FHIR
- Camel :: FHIR :: API
- Camel :: FHIR :: Parent
- Camel :: FOP
- Camel :: FTP
- Camel :: FTP Common
- Camel :: Fastjson
- Camel :: File
- Camel :: File Watch
- Camel :: FlatPack
- Camel :: Flink
- Camel :: Flowable
- Camel :: Fory
- Camel :: Freemarker
- Camel :: Geocoder
- Camel :: Git
- Camel :: GitHub2
- Camel :: Google :: BigQuery
- Camel :: Google :: Calendar
- Camel :: Google :: Common
- Camel :: Google :: Drive
- Camel :: Google :: Firestore
- Camel :: Google :: Functions
- Camel :: Google :: Mail
- Camel :: Google :: Parent
- Camel :: Google :: PubSub
- Camel :: Google :: Secret Manager
- Camel :: Google :: Sheets
- Camel :: Google :: Speech To Text
- Camel :: Google :: Storage
- Camel :: Google :: Text To Speech
- Camel :: Google :: Vertex AI
- Camel :: Google :: Vision
- Camel :: GraphQL
- Camel :: Grok
- Camel :: Groovy
- Camel :: Gson
- Camel :: HL7
- Camel :: HTTP
- Camel :: HTTP :: Base
- Camel :: HTTP :: Common
- Camel :: HashiCorp :: Key Vault
- Camel :: HazelCast
- Camel :: Headers Map (deprecated)
- Camel :: Health
- Camel :: Huawei Cloud :: Common
- Camel :: Huawei Cloud :: DMS
- Camel :: Huawei Cloud :: FaceRecognition
- Camel :: Huawei Cloud :: FunctionGraph
- Camel :: Huawei Cloud :: IAM
- Camel :: Huawei Cloud :: ImageRecognition
- Camel :: Huawei Cloud :: OBS
- Camel :: Huawei Cloud :: Parent
- Camel :: Huawei Cloud :: SimpleNotification
- Camel :: IBM :: Cloud Object Storage
- Camel :: IBM :: Parent
- Camel :: IBM :: Secrets Manager
- Camel :: IBM :: Watson Discovery
- Camel :: IBM :: Watson Language
- Camel :: IBM :: Watson Speech to Text
- Camel :: IBM :: Watson Text to Speech
- Camel :: IBM :: watsonx.ai
- Camel :: IBM :: watsonx.data
- Camel :: IEC 60870 (deprecated)
- Camel :: IRC (deprecated)
- Camel :: ISO-8583
- Camel :: Iggy
- Camel :: Ignite
- Camel :: Infinispan :: Common
- Camel :: Infinispan :: Embedded
- Camel :: Infinispan :: Parent
- Camel :: Infinispan :: Remote
- Camel :: InfluxDB
- Camel :: InfluxDB2
- Camel :: Integration Tests
- Camel :: Integration Tests :: Stream Caching Tests
- Camel :: IronMQ
- Camel :: JAXB
- Camel :: JBang :: Console
- Camel :: JBang :: Core
- Camel :: JBang :: Integration tests
- Camel :: JBang :: MCP
- Camel :: JBang :: Main
- Camel :: JBang :: Parent
- Camel :: JBang :: Plugin :: Edit
- Camel :: JBang :: Plugin :: Generate
- Camel :: JBang :: Plugin :: Kubernetes
- Camel :: JBang :: Plugin :: MCP
- Camel :: JBang :: Plugin :: Route Parser
- Camel :: JBang :: Plugin :: TUI
- Camel :: JBang :: Plugin :: Testing
- Camel :: JBang :: Plugin :: Validate
- Camel :: JCR
- Camel :: JCache
- Camel :: JDBC
- Camel :: JGroups
- Camel :: JGroups Raft
- Camel :: JIRA
- Camel :: JMS
- Camel :: JMX
- Camel :: JOOQ
- Camel :: JPA
- Camel :: JQ
- Camel :: JSON validator
- Camel :: JSON-B
- Camel :: JSONATA
- Camel :: JSon Path
- Camel :: JSonApi
- Camel :: JSoup
- Camel :: JTA
- Camel :: Jackson
- Camel :: Jackson 3
- Camel :: Jackson 3 Avro
- Camel :: Jackson 3 Protobuf
- Camel :: Jackson 3 XML
- Camel :: Jackson Avro
- Camel :: Jackson Protobuf
- Camel :: Jackson XML
- Camel :: Jactl
- Camel :: Jandex
- Camel :: Jasypt
- Camel :: Java DSL IO
- Camel :: Java DSL with jOOR
- Camel :: Java Flight Recorder
- Camel :: Java Template Engine
- Camel :: Java Toolbox for IBM i
- Camel :: JavaScript
- Camel :: Jetty
- Camel :: Jetty :: Common
- Camel :: Jolt
- Camel :: Jsch
- Camel :: Jslt
- Camel :: JsonPatch (deprecated)
- Camel :: Kafka
- Camel :: Kamelet
- Camel :: Kamelet Main
- Camel :: Kamelet Main :: Support
- Camel :: Keycloak
- Camel :: Knative :: Parent
- Camel :: Knative API
- Camel :: Knative Component
- Camel :: Knative HTTP
- Camel :: Kubernetes
- Camel :: Kudu
- Camel :: LDAP
- Camel :: LDIF
- Camel :: LZF
- Camel :: Language
- Camel :: Launcher
- Camel :: Launcher :: Container
- Camel :: LevelDB (deprecated)
- Camel :: Log
- Camel :: Long-Running-Action
- Camel :: Lucene
- Camel :: Lumberjack
- Camel :: MDC
- Camel :: MINA
- Camel :: MINA SFTP
- Camel :: MLLP
- Camel :: MVEL
- Camel :: Mail
- Camel :: Mail :: Microsoft OAuth
- Camel :: Main
- Camel :: Management
- Camel :: Management API
- Camel :: MapStruct
- Camel :: Master
- Camel :: Maven Plugins :: Camel API Component Plugin
- Camel :: Maven Plugins :: Camel Maven Component
- Camel :: Maven Plugins :: Camel Maven Package
- Camel :: Maven Plugins :: Camel Maven Plugin
- Camel :: Maven Plugins :: OpenApi REST DSL Generator
- Camel :: Maven Plugins :: Sync Properties
- Camel :: Maven Plugins :: XML DSL Doc Enricher
- Camel :: Metrics
- Camel :: MicroProfile :: Config
- Camel :: MicroProfile :: Fault Tolerance
- Camel :: MicroProfile :: Health
- Camel :: MicroProfile :: Parent
- Camel :: Micrometer
- Camel :: Micrometer :: Observability 2
- Camel :: Micrometer :: Observation (deprecated)
- Camel :: Micrometer :: Prometheus
- Camel :: Milo
- Camel :: MinIO
- Camel :: Mock
- Camel :: MongoDB
- Camel :: MongoDB GridFS
- Camel :: Mustache
- Camel :: MyBatis
- Camel :: Nats
- Camel :: Netty
- Camel :: Netty HTTP
- Camel :: OAIPMH
- Camel :: OAuth
- Camel :: OCSF
- Camel :: OGNL (deprecated)
- Camel :: Observability Services
- Camel :: Olingo2 (Deprecated) :: API
- Camel :: Olingo2 (Deprecated) :: Component
- Camel :: Olingo2 (Deprecated) :: Parent
- Camel :: Olingo4 (Deprecated) :: API
- Camel :: Olingo4 (Deprecated) :: Component
- Camel :: Olingo4 (Deprecated) :: Parent
- Camel :: Once
- Camel :: OpenAPI :: Validator
- Camel :: OpenApi Java
- Camel :: OpenSearch Java API Client
- Camel :: OpenStack
- Camel :: OpenTelemetry (deprecated)
- Camel :: Opentelemetry 2
- Camel :: Opentelemetry Metrics
- Camel :: OptaPlanner
- Camel :: PDF
- Camel :: PLC4X
- Camel :: PQC
- Camel :: Paho (deprecated)
- Camel :: Paho MQTT 5
- Camel :: Parent
- Camel :: Parquet Avro
- Camel :: PgEvent
- Camel :: PgReplicationSlot
- Camel :: Platform HTTP
- Camel :: Platform HTTP :: Jolokia
- Camel :: Platform HTTP :: Main
- Camel :: Platform HTTP :: Vert.x
- Camel :: Printer
- Camel :: Protobuf
- Camel :: PubNub
- Camel :: Pulsar
- Camel :: Python
- Camel :: Quartz
- Camel :: QuickFIX/J
- Camel :: REST
- Camel :: REST OpenApi
- Camel :: REST Postman
- Camel :: RSS
- Camel :: Reactive Executor :: Tomcat (deprecated)
- Camel :: Reactive Executor :: Vert.x (deprecated)
- Camel :: Reactive Streams
- Camel :: Reactor
- Camel :: Redis
- Camel :: Ref
- Camel :: Resilience4j
- Camel :: Resilience4j :: Micrometer
- Camel :: ResourceResolver GitHub
- Camel :: RobotFramework
- Camel :: RocketMQ
- Camel :: RxJava
- Camel :: SAP NetWeaver
- Camel :: SMB
- Camel :: SMPP
- Camel :: SNMP
- Camel :: SOAP
- Camel :: SQL
- Camel :: SSH
- Camel :: SWIFT
- Camel :: Saga
- Camel :: Salesforce
- Camel :: Salesforce :: CodeGen
- Camel :: Salesforce :: Maven Plugin
- Camel :: Salesforce :: Parent
- Camel :: Saxon
- Camel :: Scheduler
- Camel :: Schematron
- Camel :: Seda
- Camel :: ServiceNow :: Component
- Camel :: ServiceNow :: Maven Plugin
- Camel :: ServiceNow :: Parent
- Camel :: Servlet
- Camel :: Shell
- Camel :: Shiro
- Camel :: Simple JMS
- Camel :: Simple JMS2
- Camel :: Slack
- Camel :: Smooks :: Parent
- Camel :: SnakeYAML
- Camel :: Solr
- Camel :: Splunk (deprecated)
- Camel :: Splunk HEC
- Camel :: Spring
- Camel :: Spring :: Parent
- Camel :: Spring AI :: Chat
- Camel :: Spring AI :: Embeddings
- Camel :: Spring AI :: Image
- Camel :: Spring AI :: Parent
- Camel :: Spring AI :: Vector Store
- Camel :: Spring Batch
- Camel :: Spring Cloud Config
- Camel :: Spring JDBC
- Camel :: Spring LDAP
- Camel :: Spring Main
- Camel :: Spring RabbitMQ
- Camel :: Spring Redis
- Camel :: Spring Security
- Camel :: Spring Web Services
- Camel :: Spring XML
- Camel :: StAX
- Camel :: Stitch
- Camel :: Stream
- Camel :: StringTemplate
- Camel :: Stripe
- Camel :: Stub
- Camel :: Support
- Camel :: Syslog
- Camel :: Tahu
- Camel :: Tar File
- Camel :: Telegram
- Camel :: Telemetry :: Dev
- Camel :: Test :: JUnit5
- Camel :: Test :: JUnit6
- Camel :: Test :: Main :: JUnit5
- Camel :: Test :: Main :: JUnit6
- Camel :: Test :: Parent
- Camel :: Test :: Spring :: JUnit5
- Camel :: Test Infra :: All test services
- Camel :: Test Infra :: Artemis
- Camel :: Test Infra :: Cli (Camel CLI)
- Camel :: Test Infra :: Core
- Camel :: Test Infra :: Jetty
- Camel :: Test Infra :: Server Message Block
- Camel :: Test Infra :: qdrant
- Camel :: Thread Pool Factory :: Vert.x (deprecated)
- Camel :: Thrift
- Camel :: Thymeleaf
- Camel :: Tika
- Camel :: Timer
- Camel :: Tooling :: Maven
- Camel :: Tooling :: OpenApi REST DSL Generator
- Camel :: Twilio
- Camel :: Twitter
- Camel :: UBL
- Camel :: Undertow
- Camel :: Undertow Spring Security
- Camel :: UniVocity Parsers
- Camel :: Util
- Camel :: Validator
- Camel :: Velocity
- Camel :: Vert.x :: Common
- Camel :: Vert.x :: HTTP
- Camel :: Vert.x :: Parent
- Camel :: Vert.x :: WebSocket
- Camel :: Vertx
- Camel :: WAL
- Camel :: Wasm
- Camel :: Weather
- Camel :: Web3j
- Camel :: Webhook
- Camel :: Whatsapp
- Camel :: Wordpress
- Camel :: Workday
- Camel :: XChange
- Camel :: XJ
- Camel :: XML DSL Jaxb :: Test :: Definition
- Camel :: XML DSL Jaxb :: Test :: Spring
- Camel :: XML DSL Jaxb :: Tests
- Camel :: XML DSL with camel-xml-io
- Camel :: XML DSL with camel-xml-jaxb
- Camel :: XML IO
- Camel :: XML IO Util
- Camel :: XML JAXB
- Camel :: XML JAXP
- Camel :: XML JAXP Util
- Camel :: XML Security
- Camel :: XMPP
- Camel :: XPath
- Camel :: XSLT
- Camel :: XSLT Saxon
- Camel :: YAML DSL
- Camel :: YAML DSL :: Common
- Camel :: YAML DSL :: Deserializers
- Camel :: YAML DSL :: Maven Plugins
- Camel :: YAML DSL :: Parent
- Camel :: YAML DSL :: Validator
- Camel :: YAML DSL :: Validator Maven Plugin
- Camel :: YAML IO
- Camel :: Zeebe (deprecated)
- Camel :: Zendesk
- Camel :: Zip Deflater
- Camel :: Zip File
- Camel :: Zookeeper
- Camel :: Zookeeper Master
- Camel :: csimple jOOR (deprecated)
- Camel :: gRPC
- Camel :: iCal
- Camel :: jOOR
</details>
---
:gear: [View full build and test results](https://github.com/apache/camel/actions/runs/31619041401)
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@camel.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] CAMEL-24373: Add camel-alibaba MVP (common, OSS, MNS) — phase 1 [camel]
Posted by "atiaomar1978-hub (via GitHub)" <gi...@apache.org>.
atiaomar1978-hub commented on PR #25433:
URL: https://github.com/apache/camel/pull/25433#issuecomment-5244026595
## Bugbot / Grok Review — CAMEL-24373 Phase 1 MVP
**Verdict:** Approve (fixes applied before upstream PR)
### Findings addressed
| Severity | Issue | Fix |
|----------|-------|-----|
| High | MNS queue producer defaulted to `receiveMessage` | Default changed to `sendMessage`; added `SendMessageDefaultOperationTest` |
| High | OSS `putObject` skipped bucket validation for File bodies | Bucket name validated before all body handling |
| Medium | OSS consumer advanced continuationToken before successful delivery | Token updated only after successful batch |
| Medium | Catalog JSON not regenerated | Regenerated `alibaba-oss.json`, `alibaba-mns.json`, docs |
| Medium | MNS docs referenced non-existent starter | Spring Boot starter section removed |
### Tests (33 passing)
```bash
./mvnw -pl components/camel-alibaba/camel-alibaba-common,components/camel-alibaba/camel-alibaba-oss,components/camel-alibaba/camel-alibaba-mns test
```
### Follow-ups (non-blocking)
- Presigned URLs, multipart upload (OSS); message attributes (MNS)
- Wire `AlibabaClientRegistry` into endpoint lifecycle
- STS/RAM token support; integration tests; Spring Boot starters
_AI-generated review on behalf of atiaomar1978-hub_
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@camel.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] CAMEL-24373: Add camel-alibaba MVP (common, OSS, MNS) — phase 1 [camel]
Posted by "davsclaus (via GitHub)" <gi...@apache.org>.
davsclaus commented on code in PR #25433:
URL: https://github.com/apache/camel/pull/25433#discussion_r3755606046
##########
components/camel-alibaba/camel-alibaba-common/pom.xml:
##########
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ 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.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-alibaba-parent</artifactId>
+ <version>4.22.0-SNAPSHOT</version>
+ </parent>
+
+ <properties>
+ <firstVersion>4.22.0</firstVersion>
+ </properties>
+
+ <artifactId>camel-alibaba-common</artifactId>
+ <packaging>jar</packaging>
+ <name>Camel :: Alibaba Cloud :: Common</name>
+ <description>Common utilities for Camel Alibaba Cloud components</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-support</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>com.aliyun</groupId>
Review Comment:
The `alibabacloud-oss-v2` SDK dependency is OSS-specific but lives in the common module. This means `camel-alibaba-mns` (which depends on common) transitively pulls in the entire OSS SDK.
Consider moving `AlibabaClientBuilderUtil` (the only class that uses this SDK) into `camel-alibaba-oss` and removing this dependency from common. The common module should only contain `ServiceKeys`, `AlibabaClientRegistry`, and other truly shared code.
##########
parent/pom.xml:
##########
@@ -80,7 +80,13 @@
<avro-ipc-jetty-version>1.12.1</avro-ipc-jetty-version>
<avro-ipc-netty-version>1.12.1</avro-ipc-netty-version>
<awaitility-version>4.3.0</awaitility-version>
+<<<<<<< HEAD
Review Comment:
**Blocker:** Unresolved merge conflict markers. The branch needs to be rebased on current `main`.
```
<<<<<<< HEAD
<aws-java-sdk2-version>2.50.3</aws-java-sdk2-version>
=======
...
>>>>>>> 23fa869e949
```
After rebasing, the resolved version should keep the new `alibabacloud-oss-version` and `aliyun-sdk-mns-version` properties and use the latest `aws-java-sdk2-version` from `main`.
##########
components/camel-alibaba/camel-alibaba-oss/src/main/java/org/apache/camel/component/alibaba/oss/OSSComponent.java:
##########
@@ -0,0 +1,33 @@
+/*
+ * 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.alibaba.oss;
+
+import java.util.Map;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.spi.annotations.Component;
+import org.apache.camel.support.HealthCheckComponent;
+
+@Component("alibaba-oss")
+public class OSSComponent extends HealthCheckComponent {
+
+ protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
Review Comment:
Missing `@Override` annotation (the MNS component has it).
```suggestion
@Override
protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
```
##########
components/camel-alibaba/camel-alibaba-oss/src/main/java/org/apache/camel/component/alibaba/oss/OSSEndpoint.java:
##########
@@ -0,0 +1,240 @@
+/*
+ * 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.alibaba.oss;
+
+import com.aliyun.sdk.service.oss2.OSSClient;
+import org.apache.camel.Category;
+import org.apache.camel.Consumer;
+import org.apache.camel.Processor;
+import org.apache.camel.Producer;
+import org.apache.camel.component.alibaba.common.AlibabaClientBuilderUtil;
+import org.apache.camel.component.alibaba.common.models.ServiceKeys;
+import org.apache.camel.component.alibaba.oss.constants.OSSHeaders;
+import org.apache.camel.spi.Metadata;
+import org.apache.camel.spi.UriEndpoint;
+import org.apache.camel.spi.UriParam;
+import org.apache.camel.spi.UriPath;
+import org.apache.camel.support.ScheduledPollEndpoint;
+import org.apache.camel.util.ObjectHelper;
+
+/**
+ * Alibaba Cloud Object Storage Service (OSS) component
+ */
+@UriEndpoint(firstVersion = "4.22.0", scheme = "alibaba-oss", title = "Alibaba Object Storage Service (OSS)",
+ syntax = "alibaba-oss:operation",
+ category = { Category.CLOUD }, headersClass = OSSHeaders.class)
+public class OSSEndpoint extends ScheduledPollEndpoint {
+
+ @UriPath(description = "Operation to be performed", displayName = "Operation", label = "producer")
+ @Metadata(required = true)
+ private String operation;
+
+ @UriParam(description = "OSS service region", displayName = "Service region")
+ @Metadata(required = true)
+ private String region;
+
+ @UriParam(description = "OSS endpoint URL. Carries higher precedence than region based client initialization",
+ displayName = "Endpoint url")
+ private String endpoint;
+
+ @UriParam(description = "Configuration object for cloud service authentication", displayName = "Service Configuration",
+ security = "secret", label = "security")
+ private ServiceKeys serviceKeys;
+
+ @UriParam(description = "Access key for the cloud user", displayName = "API access key (AK)",
+ security = "secret", label = "security")
+ @Metadata(required = true)
+ private String accessKey;
+
+ @UriParam(description = "Secret key for the cloud user", displayName = "API secret key (SK)",
+ security = "secret", label = "security")
+ @Metadata(required = true)
+ private String secretKey;
+
+ @UriParam(description = "Name of bucket to perform operation on", displayName = "Bucket Name", endpointIdentity = true)
+ private String bucketName;
+
+ @UriParam(description = "Name of object to perform operation with", displayName = "Object Name")
+ private String objectName;
+
+ @UriParam(description = "The object name prefix used for filtering objects to be listed", displayName = "Prefix",
+ label = "consumer")
+ private String prefix;
+
+ @UriParam(description = "The maximum number of keys returned when listing objects", displayName = "Max Keys",
+ label = "consumer,producer")
+ private Integer maxKeys;
+
+ @UriParam(description = "Determines if objects should be deleted after they have been retrieved",
+ displayName = "Delete after read", defaultValue = "false", label = "consumer")
+ private boolean deleteAfterRead;
+
+ @UriParam(description = "The maximum number of messages to poll at each polling", displayName = "Maximum messages per poll",
+ defaultValue = "10", label = "consumer")
+ private int maxMessagesPerPoll = 10;
+
+ @UriParam(description = "An autowired OSS client", displayName = "OSS Client", label = "advanced")
+ @Metadata(autowired = true)
+ private OSSClient ossClient;
+
+ public OSSEndpoint() {
+ }
+
+ public OSSEndpoint(String uri, String operation, OSSComponent component) {
+ super(uri, component);
+ this.operation = operation;
+ }
+
+ public Producer createProducer() throws Exception {
+ return new OSSProducer(this);
+ }
+
+ public Consumer createConsumer(Processor processor) throws Exception {
+ OSSConsumer consumer = new OSSConsumer(this, processor);
+ configureConsumer(consumer);
+ consumer.setMaxMessagesPerPoll(maxMessagesPerPoll);
+ return consumer;
+ }
+
+ /**
+ * Initialize and return an OSS client
+ */
+ public OSSClient initClient() {
+ if (ossClient != null) {
+ return ossClient;
+ }
+
+ if (ObjectHelper.isEmpty(getServiceKeys()) && ObjectHelper.isEmpty(getAccessKey())) {
+ throw new IllegalArgumentException("Authentication parameter 'access key (AK)' not found");
+ }
+ if (ObjectHelper.isEmpty(getServiceKeys()) && ObjectHelper.isEmpty(getSecretKey())) {
+ throw new IllegalArgumentException("Authentication parameter 'secret key (SK)' not found");
+ }
+ if (ObjectHelper.isEmpty(getRegion()) && ObjectHelper.isEmpty(getEndpoint())) {
+ throw new IllegalArgumentException("Region/endpoint not found");
+ }
+
+ String auth = getServiceKeys() != null ? getServiceKeys().getAccessKey() : getAccessKey();
+ String secret = getServiceKeys() != null ? getServiceKeys().getSecretKey() : getSecretKey();
+
Review Comment:
The created client is returned but never assigned to `this.ossClient`, so `getOssClient()` always returns null after initialization and a new client is created on every call.
```suggestion
this.ossClient = AlibabaClientBuilderUtil.createOssClient(auth, secret, region, endpoint);
return ossClient;
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@camel.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] CAMEL-24373: Add camel-alibaba MVP (common, OSS, MNS) — phase 1 [camel]
Posted by "atiaomar1978-hub (via GitHub)" <gi...@apache.org>.
atiaomar1978-hub commented on PR #25433:
URL: https://github.com/apache/camel/pull/25433#issuecomment-5268993084
## Review feedback addressed (@davsclaus)
Thanks for the follow-up review. The latest commit (`eb936edc`) addresses all remaining items:
| # | Severity | Issue | Fix |
|---|----------|-------|-----|
| 1 | **Blocking** | BOM hardcoded `4.22.0-SNAPSHOT` | Updated alibaba modules to `4.23.0-SNAPSHOT` in `bom/camel-bom/pom.xml` |
| 2 | **Important** | OSS `accessKey`/`secretKey` missing `secret = true` | Added `secret = true`, `security = \"secret\"`, `label = \"security\"` on OSS and MNS credentials |
| 3 | **Important** | OSS producer read runtime overrides from properties | `OSSUtils.createClientConfigurations()` resolves headers first, then properties, then endpoint |
| 4 | **Important** | OSS producer serialized results to Gson JSON | Producer returns structured `Map`/`List<Map>`; Gson dependency removed |
| 5 | **Moderate** | Inconsistent MNS credential annotations | MNS endpoint credentials now match OSS (`secret`, `security`, `label`) |
| 6 | **Moderate** | `operation` as `@UriPath` | URI is now `alibaba-oss:bucketName?operation=...`; bucket in path, operation as query param |
| 7 | **Minor** | Duplicate receipt-handle constants | Removed `RECEIPT_HANDLE`, `MESSAGE_ID`, `MESSAGE_BODY_MD5` from `MNSProperties`; use `MNSHeaders` |
Docs, tests, component metadata, and catalog JSON updated accordingly.
### Tests
All alibaba module unit tests passing locally:
```bash
./mvnw -pl components/camel-alibaba/camel-alibaba-common,components/camel-alibaba/camel-alibaba-oss,components/camel-alibaba/camel-alibaba-mns -am test -Dtest='org.apache.camel.component.alibaba.**' -Dsurefire.failIfNoSpecifiedTests=false
```
Ready for re-review once CI is green.
_AI-generated comment on behalf of atiaomar1978-hub_
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@camel.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] CAMEL-24373: Add camel-alibaba MVP (common, OSS, MNS) — phase 1 [camel]
Posted by "atiaomar1978-hub (via GitHub)" <gi...@apache.org>.
atiaomar1978-hub commented on PR #25433:
URL: https://github.com/apache/camel/pull/25433#issuecomment-5256116640
## Rebased on main for 4.23.0-SNAPSHOT (@davsclaus)
Addressed the latest review comment:
- Rebased `feature/CAMEL-24373-alibaba-phase1` on current `main` (`4.23.0-SNAPSHOT`)
- Updated `firstVersion` from **4.22.0** → **4.23.0** across alibaba modules, docs, and catalog
- Resolved `parent/pom.xml` conflicts; kept `aws-java-sdk2-version` **2.51.3** from main
- Placed `alibabacloud-oss-version` / `aliyun-sdk-mns-version` in alphabetical order after `allegro-converter`
- Regenerated component metadata and catalog JSON/docs
### Tests
All alibaba module unit tests passing locally:
```bash
./mvnw -pl components/camel-alibaba/camel-alibaba-common,components/camel-alibaba/camel-alibaba-oss,components/camel-alibaba/camel-alibaba-mns -am test
```
Commit: `9d890ace93c`
Ready for re-review once CI is green.
_AI-generated comment on behalf of atiaomar1978-hub_
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@camel.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] CAMEL-24373: Add camel-alibaba MVP (common, OSS, MNS) — phase 1 [camel]
Posted by "atiaomar1978-hub (via GitHub)" <gi...@apache.org>.
atiaomar1978-hub commented on PR #25433:
URL: https://github.com/apache/camel/pull/25433#issuecomment-5249737219
## Review feedback addressed (@davsclaus)
Thanks for the thorough review! The following items have been fixed in commits `08dd1a2` and `1ddf05a`:
| Severity | Issue | Fix |
|----------|-------|-----|
| **Blocking** | Unresolved merge conflict in `parent/pom.xml` | Conflict resolved; branch rebased on current `main` |
| **Significant** | `camel-alibaba-common` depended on OSS SDK | OSS client builder moved to `OSSUtils.createClient()` in `camel-alibaba-oss`; common module now only contains `ServiceKeys` |
| **Significant** | `OSSEndpoint.initClient()` didn't cache client | Client assigned to `this.ossClient`; closed in `doStop()` when not autowired |
| **Significant** | `AlibabaClientRegistry` unused | Removed from common module |
| **Moderate** | OSS `Content-Length`/`Content-Type` headers collide with HTTP headers | Renamed to `CamelAlibabaOssContentLength` / `CamelAlibabaOssContentType` |
| **Moderate** | Missing `@Override` on `OSSComponent.createEndpoint()` | Added |
| **Question** | MNS deprecation | Added NOTE in MNS docs recommending RocketMQ for greenfield projects |
### Tests (33 passing)
```bash
./mvnw -pl components/camel-alibaba/camel-alibaba-common,components/camel-alibaba/camel-alibaba-oss,components/camel-alibaba/camel-alibaba-mns test
```
### Follow-ups (non-blocking, unchanged)
- OSS producer JSON serialization via Gson (consider structured headers in future)
- Integration tests with testcontainers
- Spring Boot starters
---
## Bugbot / Grok Review
**Verdict:** Approve — prior blocking/significant review items addressed.
Remaining non-blocking observations:
- OSS producer still serializes SDK responses to JSON (future improvement)
- Switch style inconsistency between OSS/MNS (cosmetic)
- Integration tests deferred to follow-up PR
_AI-generated comment on behalf of atiaomar1978-hub_
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@camel.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] CAMEL-24373: Add camel-alibaba MVP (common, OSS, MNS) — phase 1 [camel]
Posted by "davsclaus (via GitHub)" <gi...@apache.org>.
davsclaus merged PR #25433:
URL: https://github.com/apache/camel/pull/25433
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@camel.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] CAMEL-24373: Add camel-alibaba MVP (common, OSS, MNS) — phase 1 [camel]
Posted by "github-actions[bot] (via GitHub)" <gi...@apache.org>.
github-actions[bot] commented on PR #25433:
URL: https://github.com/apache/camel/pull/25433#issuecomment-5264045927
:star2: Thank you for your contribution to the Apache Camel project! :star2:
:robot: CI automation will test this PR automatically.
:camel: Apache Camel Committers, please review the following items:
* First-time contributors **require MANUAL approval** for the GitHub Actions to run
* You can use the command `/component-test (camel-)component-name1 (camel-)component-name2..` to request a test from the test bot although they are normally detected and executed by CI.
* You can label PRs using `skip-tests` and `test-dependents` to fine-tune the checks executed by this PR.
* Build and test logs are available in the summary page. **Only** [Apache Camel committers](https://camel.apache.org/community/team/#committers) have access to the summary.
:warning: Be careful when sharing logs. Review their contents before sharing them publicly.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@camel.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org