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

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


The following commit(s) were added to refs/heads/main by this push:
     new b1e202a2d82 CAMEL-22113 [AS2] Sample changes for new header 
Content-Disposition if the structure is… (#18184)
b1e202a2d82 is described below

commit b1e202a2d82de9effd484d336effcd5c0c4b9a03
Author: Dmitry Kryukov <d...@users.noreply.github.com>
AuthorDate: Wed May 28 08:06:05 2025 +0300

    CAMEL-22113 [AS2] Sample changes for new header Content-Disposition if the 
structure is… (#18184)
    
    * Sample changes for new header Content-Disposition if the structure is 
PLAIN
---
 .../camel/component/as2/api/AS2ClientManager.java  |  7 ++
 .../as2/api/entity/ApplicationEntity.java          |  2 +-
 .../camel/component/as2/AS2ServerManagerIT.java    | 84 ++++++++++++++++++++++
 3 files changed, 92 insertions(+), 1 deletion(-)

diff --git 
a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2ClientManager.java
 
b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2ClientManager.java
index 0aae64f96e6..72b64e6d7f7 100644
--- 
a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2ClientManager.java
+++ 
b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2ClientManager.java
@@ -45,6 +45,9 @@ import org.bouncycastle.cms.CMSCompressedDataGenerator;
 import org.bouncycastle.cms.CMSEnvelopedDataGenerator;
 import org.bouncycastle.operator.OutputCompressor;
 import org.bouncycastle.operator.OutputEncryptor;
+import org.slf4j.helpers.MessageFormatter;
+
+import static 
org.apache.camel.component.as2.api.entity.ApplicationEntity.CONTENT_DISPOSITION_PATTERN;
 
 /**
  * Sends EDI Messages over HTTP
@@ -296,6 +299,10 @@ public class AS2ClientManager {
         switch (as2MessageStructure) {
             case PLAIN: {
                 plain(applicationEntity, request);
+                if (attachedFileName != null && !attachedFileName.isEmpty()) {
+                    request.setHeader(AS2Header.CONTENT_DISPOSITION,
+                            
MessageFormatter.format(CONTENT_DISPOSITION_PATTERN, 
attachedFileName).getMessage());
+                }
                 break;
             }
             case SIGNED: {
diff --git 
a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationEntity.java
 
b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationEntity.java
index 1dad6d652cd..52f008521fa 100644
--- 
a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationEntity.java
+++ 
b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationEntity.java
@@ -34,7 +34,7 @@ import org.slf4j.helpers.MessageFormatter;
 
 public abstract class ApplicationEntity extends MimeEntity {
 
-    protected static final String CONTENT_DISPOSITION_PATTERN = "attachment; 
filename={}";
+    public static final String CONTENT_DISPOSITION_PATTERN = "attachment; 
filename={}";
 
     protected final byte[] ediContent;
 
diff --git 
a/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/AS2ServerManagerIT.java
 
b/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/AS2ServerManagerIT.java
index 5793928696a..b07c7b6f3ec 100644
--- 
a/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/AS2ServerManagerIT.java
+++ 
b/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/AS2ServerManagerIT.java
@@ -56,10 +56,13 @@ import org.bouncycastle.util.io.Streams;
 import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.slf4j.helpers.MessageFormatter;
 
+import static 
org.apache.camel.component.as2.api.entity.ApplicationEntity.CONTENT_DISPOSITION_PATTERN;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
@@ -70,6 +73,8 @@ public class AS2ServerManagerIT extends 
AS2ServerManagerITBase {
 
     protected static final Logger LOG = 
LoggerFactory.getLogger(AS2ServerManagerIT.class);
 
+    private static final String ATTACHED_FILE_NAME = "file_123.txt";
+
     @Test
     public void receivePlainEDIMessageTest() throws Exception {
         receivePlainEDIMessage(EDI_MESSAGE, null);
@@ -130,6 +135,85 @@ public class AS2ServerManagerIT extends 
AS2ServerManagerITBase {
         
assertTrue(request.getFirstHeader(AS2Header.CONTENT_TYPE).getValue().startsWith(AS2MediaType.APPLICATION_EDIFACT),
                 "Unexpected content type for message");
 
+        assertTrue(request instanceof ClassicHttpRequest, "Request does not 
contain entity");
+        HttpEntity entity = ((ClassicHttpRequest) request).getEntity();
+        assertNotNull(entity, "Request does not contain entity");
+        assertTrue(entity instanceof ApplicationEDIFACTEntity, "Unexpected 
request entity type");
+        ApplicationEDIFACTEntity ediEntity = (ApplicationEDIFACTEntity) entity;
+        
assertTrue(ediEntity.getContentType().startsWith(AS2MediaType.APPLICATION_EDIFACT),
+                "Unexpected content type for entity");
+        assertTrue(ediEntity.isMainBody(), "Entity not set as main body of 
request");
+        assertNull(request.getFirstHeader(AS2Header.CONTENT_DISPOSITION));
+
+        ApplicationEntity appEntity = (ApplicationEntity) entity;
+        if (encoding == null) {
+            assertTrue(appEntity.getEdiMessage() instanceof String);
+            String rcvdMessage = ((String) 
appEntity.getEdiMessage()).replaceAll("\r", "");
+            assertEquals(EDI_MESSAGE, rcvdMessage, "EDI message does not 
match");
+        } else if ("base64".equals(encoding)) {
+            assertTrue(appEntity.getEdiMessage() instanceof InputStream);
+            InputStream is = (InputStream) appEntity.getEdiMessage();
+            String rcvdMessage = new String(is.readAllBytes(), 
StandardCharsets.US_ASCII).replaceAll("\r", "");
+            assertEquals(EDI_MESSAGE, rcvdMessage, "EDI message does not 
match");
+        }
+        String rcvdMessageFromBody = message.getBody(String.class);
+        assertEquals(EDI_MESSAGE.replaceAll("[\n\r]", ""), 
rcvdMessageFromBody.replaceAll("[\n\r]", ""),
+                "EDI message does not match");
+    }
+
+    @Test
+    public void receivePlainEDIStreamMessageWithAttachedFileNameTest() throws 
Exception {
+        receivePlainEDIMessageWithAttachedFileName(new 
ByteArrayInputStream(EDI_MESSAGE.getBytes(StandardCharsets.US_ASCII)),
+                null);
+    }
+
+    private void receivePlainEDIMessageWithAttachedFileName(Object msg, String 
encoding) throws Exception {
+        final AS2ClientConnection clientConnection = getAs2ClientConnection();
+        AS2ClientManager clientManager = new 
AS2ClientManager(clientConnection);
+
+        clientManager.send(msg, REQUEST_URI, SUBJECT, FROM, AS2_NAME, 
AS2_NAME, AS2MessageStructure.PLAIN,
+                AS2MediaType.APPLICATION_EDIFACT, null, encoding, null, null, 
null,
+                null, DISPOSITION_NOTIFICATION_TO, 
SIGNED_RECEIPT_MIC_ALGORITHMS, null, null, ATTACHED_FILE_NAME, null,
+                null, null, null);
+
+        MockEndpoint mockEndpoint = getMockEndpoint("mock:as2RcvMsgs");
+        mockEndpoint.expectedMinimumMessageCount(1);
+        mockEndpoint.setResultWaitTime(TimeUnit.MILLISECONDS.convert(30, 
TimeUnit.SECONDS));
+        mockEndpoint.assertIsSatisfied();
+
+        final List<Exchange> exchanges = mockEndpoint.getExchanges();
+        assertNotNull(exchanges, "listen result");
+        assertFalse(exchanges.isEmpty(), "listen result");
+        LOG.debug("poll result: {}", exchanges);
+
+        Exchange exchange = exchanges.get(0);
+        Message message = exchange.getIn();
+        assertNotNull(message, "exchange message");
+
+        HttpCoreContext coreContext = 
exchange.getProperty(AS2Constants.AS2_INTERCHANGE, HttpCoreContext.class);
+        assertNotNull(coreContext, "context");
+        HttpRequest request = coreContext.getRequest();
+        assertNotNull(request, "request");
+        assertEquals(METHOD, request.getMethod(), "Unexpected method value");
+        assertEquals(REQUEST_URI, request.getUri().getPath(), "Unexpected 
request URI value");
+        assertEquals(HttpVersion.HTTP_1_1, request.getVersion(), "Unexpected 
HTTP version value");
+        assertEquals(SUBJECT, 
request.getFirstHeader(AS2Header.SUBJECT).getValue(), "Unexpected subject 
value");
+        assertEquals(FROM, request.getFirstHeader(AS2Header.FROM).getValue(), 
"Unexpected from value");
+        assertEquals(AS2_VERSION, 
request.getFirstHeader(AS2Header.AS2_VERSION).getValue(), "Unexpected AS2 
version value");
+        assertEquals(AS2_NAME, 
request.getFirstHeader(AS2Header.AS2_FROM).getValue(), "Unexpected AS2 from 
value");
+        assertEquals(AS2_NAME, 
request.getFirstHeader(AS2Header.AS2_TO).getValue(), "Unexpected AS2 to value");
+        
assertTrue(request.getFirstHeader(AS2Header.MESSAGE_ID).getValue().endsWith(CLIENT_FQDN
 + ">"),
+                "Unexpected message id value");
+        assertEquals(TARGET_HOST + ":" + TARGET_PORT, 
request.getFirstHeader(AS2Header.TARGET_HOST).getValue(),
+                "Unexpected target host value");
+        assertEquals(USER_AGENT, 
request.getFirstHeader(AS2Header.USER_AGENT).getValue(), "Unexpected user agent 
value");
+        assertNotNull(request.getFirstHeader(AS2Header.DATE), "Date value 
missing");
+        assertNotNull(request.getFirstHeader(AS2Header.CONTENT_LENGTH), 
"Content length value missing");
+        
assertTrue(request.getFirstHeader(AS2Header.CONTENT_TYPE).getValue().startsWith(AS2MediaType.APPLICATION_EDIFACT),
+                "Unexpected content type for message");
+        assertEquals(MessageFormatter.format(CONTENT_DISPOSITION_PATTERN, 
ATTACHED_FILE_NAME).getMessage(),
+                
request.getFirstHeader(AS2Header.CONTENT_DISPOSITION).getValue(), "Unexpected 
user agent value");
+
         assertTrue(request instanceof ClassicHttpRequest, "Request does not 
contain entity");
         HttpEntity entity = ((ClassicHttpRequest) request).getEntity();
         assertNotNull(entity, "Request does not contain entity");

Reply via email to