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

acosentino pushed a commit to branch camel-4.10.x
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/camel-4.10.x by this push:
     new f40c8881195 CAMEL-21926 camel-attachment: remove ATTACHMENTS trait 
when last attachment is removed (#17657)
f40c8881195 is described below

commit f40c88811954d9bd3df2ac4e73fc2588f37b65c5
Author: anirudh-04 <100948748+anirudh...@users.noreply.github.com>
AuthorDate: Thu Apr 3 20:06:25 2025 +0530

    CAMEL-21926 camel-attachment: remove ATTACHMENTS trait when last attachment 
is removed (#17657)
---
 .../camel/attachment/DefaultAttachmentMessage.java |  6 +-
 .../camel/attachment/AttachmentRemovalTest.java    | 65 ++++++++++++++++++++++
 2 files changed, 70 insertions(+), 1 deletion(-)

diff --git 
a/components/camel-attachments/src/main/java/org/apache/camel/attachment/DefaultAttachmentMessage.java
 
b/components/camel-attachments/src/main/java/org/apache/camel/attachment/DefaultAttachmentMessage.java
index fb31dfb2837..4b23a906eee 100644
--- 
a/components/camel-attachments/src/main/java/org/apache/camel/attachment/DefaultAttachmentMessage.java
+++ 
b/components/camel-attachments/src/main/java/org/apache/camel/attachment/DefaultAttachmentMessage.java
@@ -212,7 +212,11 @@ public final class DefaultAttachmentMessage implements 
AttachmentMessage {
 
     @Override
     public void removeAttachment(String id) {
-        getAttachmentsMap().remove(id);
+        Map<String, Object> attachmentsMap = getAttachmentsMap();
+        attachmentsMap.remove(id);
+        if (attachmentsMap.isEmpty()) {
+            removeTrait(MessageTrait.ATTACHMENTS);
+        }
     }
 
     @Override
diff --git 
a/components/camel-attachments/src/test/java/org/apache/camel/attachment/AttachmentRemovalTest.java
 
b/components/camel-attachments/src/test/java/org/apache/camel/attachment/AttachmentRemovalTest.java
new file mode 100644
index 00000000000..08a9bb8a86f
--- /dev/null
+++ 
b/components/camel-attachments/src/test/java/org/apache/camel/attachment/AttachmentRemovalTest.java
@@ -0,0 +1,65 @@
+/*
+ * 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.attachment;
+
+import jakarta.activation.DataHandler;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+public class AttachmentRemovalTest extends CamelTestSupport {
+
+    @Test
+    public void testRemoval() throws Exception {
+        getMockEndpoint("mock:result").expectedMessageCount(1);
+
+        template.sendBody("direct:start", "");
+
+        MockEndpoint.assertIsSatisfied(context);
+
+        Exchange e1 = 
getMockEndpoint("mock:result").getReceivedExchanges().get(0);
+
+        AttachmentMessage am1 = e1.getMessage(AttachmentMessage.class);
+
+        Assertions.assertFalse(am1.hasAttachments());
+        Assertions.assertEquals(0, am1.getAttachmentNames().size());
+    }
+
+    @Override
+    protected RouteBuilder createRouteBuilder() {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("direct:start")
+                        .process(exchange -> {
+                            AttachmentMessage message = 
exchange.getMessage(AttachmentMessage.class);
+                            byte[] data = 
exchange.getMessage().getBody(byte[].class);
+                            String attachmentName = "myfile.txt";
+                            String mimeType = "text/plain";
+                            DataHandler dataHandler = new DataHandler(data, 
mimeType);
+                            message.addAttachment(attachmentName, dataHandler);
+                            message.removeAttachment(attachmentName);
+                        })
+                        .to("mock:result");
+            }
+        };
+    }
+}

Reply via email to