This is an automated email from the ASF dual-hosted git repository.
zbendhiba pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new 32acb7d5bcd3 CAMEL-23219 - google-mail-stream: Expose threadId,
Message-ID and lab… (#22116)
32acb7d5bcd3 is described below
commit 32acb7d5bcd382b65ff3af7862716afb660530e6
Author: Zineb BENDHIBA <[email protected]>
AuthorDate: Fri Mar 20 14:23:22 2026 +0100
CAMEL-23219 - google-mail-stream: Expose threadId, Message-ID and lab…
(#22116)
* CAMEL-23219 - google-mail-stream: Expose threadId, Message-ID and
labelIds as exchange headers
* fix regen
---
.../catalog/components/google-mail-stream.json | 5 +-
.../google/mail/stream/google-mail-stream.json | 5 +-
.../mail/stream/GoogleMailStreamConstants.java | 6 +
.../mail/stream/GoogleMailStreamConsumer.java | 5 +
.../GoogleMailStreamConsumerHeadersTest.java | 171 +++++++++++++++++++++
.../GoogleMailStreamEndpointBuilderFactory.java | 36 +++++
6 files changed, 226 insertions(+), 2 deletions(-)
diff --git
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-mail-stream.json
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-mail-stream.json
index c020dc005f6e..c4277dfe5012 100644
---
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-mail-stream.json
+++
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-mail-stream.json
@@ -50,7 +50,10 @@
"CamelGoogleMailStreamCc": { "index": 2, "kind": "header", "displayName":
"", "group": "consumer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The carbon copy of the message", "constantName":
"org.apache.camel.component.google.mail.stream.GoogleMailStreamConstants#MAIL_CC"
},
"CamelGoogleMailStreamBcc": { "index": 3, "kind": "header", "displayName":
"", "group": "consumer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The blind carbon cpoy of the message", "constantName":
"org.apache.camel.component.google.mail.stream.GoogleMailStreamConstants#MAIL_BCC"
},
"CamelGoogleMailStreamSubject": { "index": 4, "kind": "header",
"displayName": "", "group": "consumer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The subject of the message",
"constantName":
"org.apache.camel.component.google.mail.stream.GoogleMailStreamConstants#MAIL_SUBJECT"
},
- "CamelGoogleMailId": { "index": 5, "kind": "header", "displayName": "",
"group": "consumer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The ID of the message", "constantName":
"org.apache.camel.component.google.mail.stream.GoogleMailStreamConstants#MAIL_ID"
}
+ "CamelGoogleMailId": { "index": 5, "kind": "header", "displayName": "",
"group": "consumer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The ID of the message", "constantName":
"org.apache.camel.component.google.mail.stream.GoogleMailStreamConstants#MAIL_ID"
},
+ "CamelGoogleMailStreamThreadId": { "index": 6, "kind": "header",
"displayName": "", "group": "consumer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The thread ID of the message",
"constantName":
"org.apache.camel.component.google.mail.stream.GoogleMailStreamConstants#MAIL_THREAD_ID"
},
+ "CamelGoogleMailStreamMessageId": { "index": 7, "kind": "header",
"displayName": "", "group": "consumer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The Message-ID of the message",
"constantName":
"org.apache.camel.component.google.mail.stream.GoogleMailStreamConstants#MAIL_MESSAGE_ID"
},
+ "CamelGoogleMailStreamLabelIds": { "index": 8, "kind": "header",
"displayName": "", "group": "consumer", "label": "", "required": false,
"javaType": "java.util.List<String>", "deprecated": false, "deprecationNote":
"", "autowired": false, "secret": false, "description": "The label IDs of the
message", "constantName":
"org.apache.camel.component.google.mail.stream.GoogleMailStreamConstants#MAIL_LABEL_IDS"
}
},
"properties": {
"index": { "index": 0, "kind": "path", "displayName": "Index", "group":
"consumer", "label": "", "required": true, "type": "string", "javaType":
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "configurationClass":
"org.apache.camel.component.google.mail.stream.GoogleMailStreamConfiguration",
"configurationField": "configuration", "description": "Currently not in use" },
diff --git
a/components/camel-google/camel-google-mail/src/generated/resources/META-INF/org/apache/camel/component/google/mail/stream/google-mail-stream.json
b/components/camel-google/camel-google-mail/src/generated/resources/META-INF/org/apache/camel/component/google/mail/stream/google-mail-stream.json
index c020dc005f6e..c4277dfe5012 100644
---
a/components/camel-google/camel-google-mail/src/generated/resources/META-INF/org/apache/camel/component/google/mail/stream/google-mail-stream.json
+++
b/components/camel-google/camel-google-mail/src/generated/resources/META-INF/org/apache/camel/component/google/mail/stream/google-mail-stream.json
@@ -50,7 +50,10 @@
"CamelGoogleMailStreamCc": { "index": 2, "kind": "header", "displayName":
"", "group": "consumer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The carbon copy of the message", "constantName":
"org.apache.camel.component.google.mail.stream.GoogleMailStreamConstants#MAIL_CC"
},
"CamelGoogleMailStreamBcc": { "index": 3, "kind": "header", "displayName":
"", "group": "consumer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The blind carbon cpoy of the message", "constantName":
"org.apache.camel.component.google.mail.stream.GoogleMailStreamConstants#MAIL_BCC"
},
"CamelGoogleMailStreamSubject": { "index": 4, "kind": "header",
"displayName": "", "group": "consumer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The subject of the message",
"constantName":
"org.apache.camel.component.google.mail.stream.GoogleMailStreamConstants#MAIL_SUBJECT"
},
- "CamelGoogleMailId": { "index": 5, "kind": "header", "displayName": "",
"group": "consumer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The ID of the message", "constantName":
"org.apache.camel.component.google.mail.stream.GoogleMailStreamConstants#MAIL_ID"
}
+ "CamelGoogleMailId": { "index": 5, "kind": "header", "displayName": "",
"group": "consumer", "label": "", "required": false, "javaType": "String",
"deprecated": false, "deprecationNote": "", "autowired": false, "secret":
false, "description": "The ID of the message", "constantName":
"org.apache.camel.component.google.mail.stream.GoogleMailStreamConstants#MAIL_ID"
},
+ "CamelGoogleMailStreamThreadId": { "index": 6, "kind": "header",
"displayName": "", "group": "consumer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The thread ID of the message",
"constantName":
"org.apache.camel.component.google.mail.stream.GoogleMailStreamConstants#MAIL_THREAD_ID"
},
+ "CamelGoogleMailStreamMessageId": { "index": 7, "kind": "header",
"displayName": "", "group": "consumer", "label": "", "required": false,
"javaType": "String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "description": "The Message-ID of the message",
"constantName":
"org.apache.camel.component.google.mail.stream.GoogleMailStreamConstants#MAIL_MESSAGE_ID"
},
+ "CamelGoogleMailStreamLabelIds": { "index": 8, "kind": "header",
"displayName": "", "group": "consumer", "label": "", "required": false,
"javaType": "java.util.List<String>", "deprecated": false, "deprecationNote":
"", "autowired": false, "secret": false, "description": "The label IDs of the
message", "constantName":
"org.apache.camel.component.google.mail.stream.GoogleMailStreamConstants#MAIL_LABEL_IDS"
}
},
"properties": {
"index": { "index": 0, "kind": "path", "displayName": "Index", "group":
"consumer", "label": "", "required": true, "type": "string", "javaType":
"java.lang.String", "deprecated": false, "deprecationNote": "", "autowired":
false, "secret": false, "configurationClass":
"org.apache.camel.component.google.mail.stream.GoogleMailStreamConfiguration",
"configurationField": "configuration", "description": "Currently not in use" },
diff --git
a/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamConstants.java
b/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamConstants.java
index 7d4bafece368..c5df88b5345a 100644
---
a/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamConstants.java
+++
b/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamConstants.java
@@ -35,6 +35,12 @@ public final class GoogleMailStreamConstants {
public static final String MAIL_SUBJECT = "CamelGoogleMailStreamSubject";
@Metadata(description = "The ID of the message", javaType = "String")
public static final String MAIL_ID = "CamelGoogleMailId";
+ @Metadata(description = "The thread ID of the message", javaType =
"String")
+ public static final String MAIL_THREAD_ID =
"CamelGoogleMailStreamThreadId";
+ @Metadata(description = "The Message-ID of the message", javaType =
"String")
+ public static final String MAIL_MESSAGE_ID =
"CamelGoogleMailStreamMessageId";
+ @Metadata(description = "The label IDs of the message", javaType =
"java.util.List<String>")
+ public static final String MAIL_LABEL_IDS =
"CamelGoogleMailStreamLabelIds";
/**
* Prevent instantiation.
diff --git
a/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamConsumer.java
b/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamConsumer.java
index aba62302a233..1b40dfec21a1 100644
---
a/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamConsumer.java
+++
b/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamConsumer.java
@@ -185,6 +185,8 @@ public class GoogleMailStreamConsumer extends
ScheduledBatchPollingConsumer {
exchange.setPattern(pattern);
org.apache.camel.Message message = exchange.getIn();
exchange.getIn().setHeader(GoogleMailStreamConstants.MAIL_ID,
mail.getId());
+ exchange.getIn().setHeader(GoogleMailStreamConstants.MAIL_THREAD_ID,
mail.getThreadId());
+ exchange.getIn().setHeader(GoogleMailStreamConstants.MAIL_LABEL_IDS,
mail.getLabelIds());
if (getConfiguration().isRaw()) {
message.setBody(mail.getRaw());
} else {
@@ -217,6 +219,9 @@ public class GoogleMailStreamConsumer extends
ScheduledBatchPollingConsumer {
if ("BCC".equalsIgnoreCase(headerName)) {
message.setHeader(GoogleMailStreamConstants.MAIL_BCC,
header.getValue());
}
+ if ("MESSAGE-ID".equalsIgnoreCase(headerName)) {
+ message.setHeader(GoogleMailStreamConstants.MAIL_MESSAGE_ID,
header.getValue());
+ }
}
}
diff --git
a/components/camel-google/camel-google-mail/src/test/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamConsumerHeadersTest.java
b/components/camel-google/camel-google-mail/src/test/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamConsumerHeadersTest.java
new file mode 100644
index 000000000000..48471ee2a2d4
--- /dev/null
+++
b/components/camel-google/camel-google-mail/src/test/java/org/apache/camel/component/google/mail/stream/GoogleMailStreamConsumerHeadersTest.java
@@ -0,0 +1,171 @@
+/*
+ * 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.google.mail.stream;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import com.google.api.services.gmail.model.Message;
+import com.google.api.services.gmail.model.MessagePart;
+import com.google.api.services.gmail.model.MessagePartBody;
+import com.google.api.services.gmail.model.MessagePartHeader;
+import org.apache.camel.CamelContext;
+import org.apache.camel.Exchange;
+import org.apache.camel.ExchangePattern;
+import org.apache.camel.impl.DefaultCamelContext;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+
+public class GoogleMailStreamConsumerHeadersTest {
+
+ private CamelContext camelContext;
+ private GoogleMailStreamConsumer consumer;
+
+ @BeforeEach
+ void setUp() throws Exception {
+ camelContext = new DefaultCamelContext();
+ camelContext.start();
+
+ GoogleMailStreamComponent component = new
GoogleMailStreamComponent(camelContext);
+ camelContext.addComponent("google-mail-stream", component);
+
+ GoogleMailStreamEndpoint endpoint = (GoogleMailStreamEndpoint)
camelContext
+ .getEndpoint(
+
"google-mail-stream://test?clientId=a&clientSecret=b&applicationName=c&accessToken=d&refreshToken=e");
+
+ consumer = new GoogleMailStreamConsumer(endpoint, exchange -> {
+ }, "UNREAD", Collections.emptyList());
+ consumer.start();
+ }
+
+ @AfterEach
+ void tearDown() throws Exception {
+ if (consumer != null) {
+ consumer.stop();
+ }
+ if (camelContext != null) {
+ camelContext.stop();
+ }
+ }
+
+ @Test
+ void testThreadIdHeader() {
+ Message mail = createTestMessage("msg-123", "thread-456");
+ Exchange exchange = consumer.createExchange(ExchangePattern.InOnly,
mail);
+
+ assertEquals("thread-456",
exchange.getIn().getHeader(GoogleMailStreamConstants.MAIL_THREAD_ID));
+ }
+
+ @Test
+ void testMessageIdHeader() {
+ Message mail = createTestMessage("msg-123", "thread-456");
+ addHeader(mail, "Message-ID", "<[email protected]>");
+
+ Exchange exchange = consumer.createExchange(ExchangePattern.InOnly,
mail);
+
+ assertEquals("<[email protected]>",
exchange.getIn().getHeader(GoogleMailStreamConstants.MAIL_MESSAGE_ID));
+ }
+
+ @Test
+ void testAllHeaders() {
+ Message mail = createTestMessage("msg-123", "thread-456");
+ mail.setLabelIds(List.of("INBOX", "UNREAD"));
+ addHeader(mail, "Subject", "Test Subject");
+ addHeader(mail, "To", "[email protected]");
+ addHeader(mail, "From", "[email protected]");
+ addHeader(mail, "Cc", "[email protected]");
+ addHeader(mail, "Bcc", "[email protected]");
+ addHeader(mail, "Message-ID", "<[email protected]>");
+
+ Exchange exchange = consumer.createExchange(ExchangePattern.InOnly,
mail);
+
+ assertEquals("msg-123",
exchange.getIn().getHeader(GoogleMailStreamConstants.MAIL_ID));
+ assertEquals("thread-456",
exchange.getIn().getHeader(GoogleMailStreamConstants.MAIL_THREAD_ID));
+ assertEquals(List.of("INBOX", "UNREAD"),
exchange.getIn().getHeader(GoogleMailStreamConstants.MAIL_LABEL_IDS));
+ assertEquals("Test Subject",
exchange.getIn().getHeader(GoogleMailStreamConstants.MAIL_SUBJECT));
+ assertEquals("[email protected]",
exchange.getIn().getHeader(GoogleMailStreamConstants.MAIL_TO));
+ assertEquals("[email protected]",
exchange.getIn().getHeader(GoogleMailStreamConstants.MAIL_FROM));
+ assertEquals("[email protected]",
exchange.getIn().getHeader(GoogleMailStreamConstants.MAIL_CC));
+ assertEquals("[email protected]",
exchange.getIn().getHeader(GoogleMailStreamConstants.MAIL_BCC));
+ assertEquals("<[email protected]>",
exchange.getIn().getHeader(GoogleMailStreamConstants.MAIL_MESSAGE_ID));
+ }
+
+ @Test
+ void testLabelIdsHeader() {
+ Message mail = createTestMessage("msg-123", "thread-456");
+ List<String> labels = List.of("INBOX", "UNREAD", "CATEGORY_PERSONAL");
+ mail.setLabelIds(labels);
+
+ Exchange exchange = consumer.createExchange(ExchangePattern.InOnly,
mail);
+
+ List<String> result =
exchange.getIn().getHeader(GoogleMailStreamConstants.MAIL_LABEL_IDS,
List.class);
+ assertNotNull(result);
+ assertEquals(3, result.size());
+ assertEquals("INBOX", result.get(0));
+ assertEquals("UNREAD", result.get(1));
+ assertEquals("CATEGORY_PERSONAL", result.get(2));
+ }
+
+ @Test
+ void testNullLabelIdsHeader() {
+ Message mail = createTestMessage("msg-123", "thread-456");
+
+ Exchange exchange = consumer.createExchange(ExchangePattern.InOnly,
mail);
+
+
assertNull(exchange.getIn().getHeader(GoogleMailStreamConstants.MAIL_LABEL_IDS));
+ }
+
+ @Test
+ void testMissingMessageIdHeader() {
+ Message mail = createTestMessage("msg-123", "thread-456");
+
+ Exchange exchange = consumer.createExchange(ExchangePattern.InOnly,
mail);
+
+
assertNull(exchange.getIn().getHeader(GoogleMailStreamConstants.MAIL_MESSAGE_ID));
+ }
+
+ private Message createTestMessage(String id, String threadId) {
+ Message mail = new Message();
+ mail.setId(id);
+ mail.setThreadId(threadId);
+
+ MessagePartBody body = new MessagePartBody();
+ body.setData(null);
+
+ MessagePart payload = new MessagePart();
+ payload.setHeaders(new ArrayList<>());
+ payload.setParts(null);
+ payload.setBody(body);
+
+ mail.setPayload(payload);
+ return mail;
+ }
+
+ private void addHeader(Message mail, String name, String value) {
+ List<MessagePartHeader> headers = mail.getPayload().getHeaders();
+ MessagePartHeader header = new MessagePartHeader();
+ header.setName(name);
+ header.setValue(value);
+ headers.add(header);
+ }
+}
diff --git
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleMailStreamEndpointBuilderFactory.java
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleMailStreamEndpointBuilderFactory.java
index 16e9782664c2..60dbffebc95b 100644
---
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleMailStreamEndpointBuilderFactory.java
+++
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/GoogleMailStreamEndpointBuilderFactory.java
@@ -1079,6 +1079,42 @@ public interface GoogleMailStreamEndpointBuilderFactory {
public String googleMailId() {
return "CamelGoogleMailId";
}
+ /**
+ * The thread ID of the message.
+ *
+ * The option is a: {@code String} type.
+ *
+ * Group: consumer
+ *
+ * @return the name of the header {@code GoogleMailStreamThreadId}.
+ */
+ public String googleMailStreamThreadId() {
+ return "CamelGoogleMailStreamThreadId";
+ }
+ /**
+ * The Message-ID of the message.
+ *
+ * The option is a: {@code String} type.
+ *
+ * Group: consumer
+ *
+ * @return the name of the header {@code GoogleMailStreamMessageId}.
+ */
+ public String googleMailStreamMessageId() {
+ return "CamelGoogleMailStreamMessageId";
+ }
+ /**
+ * The label IDs of the message.
+ *
+ * The option is a: {@code java.util.List<String>} type.
+ *
+ * Group: consumer
+ *
+ * @return the name of the header {@code GoogleMailStreamLabelIds}.
+ */
+ public String googleMailStreamLabelIds() {
+ return "CamelGoogleMailStreamLabelIds";
+ }
}
static GoogleMailStreamEndpointBuilder endpointBuilder(String
componentName, String path) {
class GoogleMailStreamEndpointBuilderImpl extends
AbstractEndpointBuilder implements GoogleMailStreamEndpointBuilder,
AdvancedGoogleMailStreamEndpointBuilder {