[ 
https://issues.apache.org/jira/browse/CAMEL-11257?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16473427#comment-16473427
 ] 

ASF GitHub Bot commented on CAMEL-11257:
----------------------------------------

davsclaus closed pull request #2336: [CAMEL-11257] Fixed deserialization of 
transfer encoded MIME entities
URL: https://github.com/apache/camel/pull/2336
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git 
a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationEDIEntity.java
 
b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationEDIEntity.java
index 73ec7ff53ba..086e7448d63 100644
--- 
a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationEDIEntity.java
+++ 
b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationEDIEntity.java
@@ -21,6 +21,7 @@
 
 import org.apache.camel.component.as2.api.AS2Charset;
 import org.apache.camel.component.as2.api.CanonicalOutputStream;
+import org.apache.camel.component.as2.api.util.EntityUtils;
 import org.apache.http.Header;
 import org.apache.http.HeaderIterator;
 import org.apache.http.entity.ContentType;
@@ -45,7 +46,8 @@ public String getEdiMessage() {
     @Override
     public void writeTo(OutputStream outstream) throws IOException {
         NoCloseOutputStream ncos = new NoCloseOutputStream(outstream);
-        try (CanonicalOutputStream canonicalOutstream = new 
CanonicalOutputStream(ncos, AS2Charset.US_ASCII)) {
+        try (CanonicalOutputStream canonicalOutstream = new 
CanonicalOutputStream(ncos, AS2Charset.US_ASCII);
+            OutputStream transferEncodedStream = 
EntityUtils.encode(canonicalOutstream, getContentTransferEncodingValue())) {
 
             // Write out mime part headers if this is not the main body of 
message.
             if (!isMainBody()) {
@@ -57,7 +59,9 @@ public void writeTo(OutputStream outstream) throws 
IOException {
                 canonicalOutstream.writeln(); // ensure empty line between 
headers and body; RFC2046 - 5.1.1
             }
 
-            canonicalOutstream.write(ediMessage.getBytes(getCharset()), 0, 
ediMessage.length());
+            transferEncodedStream.write(ediMessage.getBytes(getCharset()), 0, 
ediMessage.length());
+        } catch (Exception e) {
+            throw new IOException("Failed to write to output stream", e);
         }
     }
 
diff --git 
a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationPkcs7SignatureEntity.java
 
b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationPkcs7SignatureEntity.java
index a64db269267..179d82b1854 100644
--- 
a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationPkcs7SignatureEntity.java
+++ 
b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationPkcs7SignatureEntity.java
@@ -100,9 +100,9 @@ public void writeTo(OutputStream outstream) throws 
IOException {
 
         // Write out signed data.
         String transferEncoding = getContentTransferEncoding() == null ? null 
: getContentTransferEncoding().getValue();
-        try (OutputStream trasnsferEncodedStream = EntityUtils.encode(ncos, 
transferEncoding)) {
+        try (OutputStream transferEncodedStream = EntityUtils.encode(ncos, 
transferEncoding)) {
 
-            trasnsferEncodedStream.write(signature);
+            transferEncodedStream.write(signature);
         } catch (Exception e) {
             throw new IOException("Failed to write to output stream", e);
         }
diff --git 
a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/EntityParser.java
 
b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/EntityParser.java
index ce17586c3f5..ff154f2bf13 100644
--- 
a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/EntityParser.java
+++ 
b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/EntityParser.java
@@ -357,7 +357,6 @@ public static MultipartSignedEntity 
parseMultipartSignedEntityBody(AS2SessionInp
                                                                        String 
contentTransferEncoding)
             throws ParseException {
         CharsetDecoder previousDecoder = inbuffer.getCharsetDecoder();
-        String previousContentTransferEncoding = 
inbuffer.getTransferEncoding();
 
         try {
 
@@ -368,7 +367,6 @@ public static MultipartSignedEntity 
parseMultipartSignedEntityBody(AS2SessionInp
             CharsetDecoder charsetDecoder = charset.newDecoder();
 
             inbuffer.setCharsetDecoder(charsetDecoder);
-            inbuffer.setTransferEncoding(contentTransferEncoding);
 
             MultipartSignedEntity multipartSignedEntity = new 
MultipartSignedEntity(boundary, false);
 
@@ -406,7 +404,7 @@ public static MultipartSignedEntity 
parseMultipartSignedEntityBody(AS2SessionInp
             signedEntity.removeAllHeaders();
             signedEntity.setHeaders(headers);
             multipartSignedEntity.addPart(signedEntity);
-
+            
             //
             // End Signed Entity Part
 
@@ -460,7 +458,6 @@ public static MultipartSignedEntity 
parseMultipartSignedEntityBody(AS2SessionInp
             throw parseException;
         } finally {
             inbuffer.setCharsetDecoder(previousDecoder);
-            inbuffer.setTransferEncoding(previousContentTransferEncoding);
         }
     }
 
@@ -470,7 +467,6 @@ public static DispositionNotificationMultipartReportEntity 
parseMultipartReportE
                                                                                
                                  String contentTransferEncoding)
             throws ParseException {
         CharsetDecoder previousDecoder = inbuffer.getCharsetDecoder();
-        String previousContentTransferEncoding = 
inbuffer.getTransferEncoding();
 
         try {
 
@@ -481,7 +477,6 @@ public static DispositionNotificationMultipartReportEntity 
parseMultipartReportE
             CharsetDecoder charsetDecoder = charset.newDecoder();
 
             inbuffer.setCharsetDecoder(charsetDecoder);
-            inbuffer.setTransferEncoding(contentTransferEncoding);
 
             DispositionNotificationMultipartReportEntity 
dispositionNotificationMultipartReportEntity = new 
DispositionNotificationMultipartReportEntity(boundary, false);
 
@@ -578,7 +573,6 @@ public static DispositionNotificationMultipartReportEntity 
parseMultipartReportE
             throw parseException;
         } finally {
             inbuffer.setCharsetDecoder(previousDecoder);
-            inbuffer.setTransferEncoding(previousContentTransferEncoding);
         }
 
     }
@@ -589,7 +583,6 @@ public static TextPlainEntity 
parseTextPlainEntityBody(AS2SessionInputBuffer inb
                                                        String 
contentTransferEncoding)
             throws ParseException {
         CharsetDecoder previousDecoder = inbuffer.getCharsetDecoder();
-        String previousContentTransferEncoding = 
inbuffer.getTransferEncoding();
 
         try {
 
@@ -600,9 +593,11 @@ public static TextPlainEntity 
parseTextPlainEntityBody(AS2SessionInputBuffer inb
             CharsetDecoder charsetDecoder = charset.newDecoder();
 
             inbuffer.setCharsetDecoder(charsetDecoder);
-            inbuffer.setTransferEncoding(contentTransferEncoding);
 
             String text = parseBodyPartText(inbuffer, boundary);
+            if (contentTransferEncoding != null) {
+                text = EntityUtils.decode(text, charset, 
contentTransferEncoding);
+            }
             return new TextPlainEntity(text, charsetName, 
contentTransferEncoding, false);
         } catch (Exception e) {
             ParseException parseException = new ParseException("failed to 
parse text entity");
@@ -610,7 +605,6 @@ public static TextPlainEntity 
parseTextPlainEntityBody(AS2SessionInputBuffer inb
             throw parseException;
         } finally {
             inbuffer.setCharsetDecoder(previousDecoder);
-            inbuffer.setTransferEncoding(previousContentTransferEncoding);
         }
     }
 
@@ -620,7 +614,6 @@ public static AS2MessageDispositionNotificationEntity 
parseMessageDispositionNot
                                                                                
               String contentTransferEncoding)
             throws ParseException {
         CharsetDecoder previousDecoder = inbuffer.getCharsetDecoder();
-        String previousContentTransferEncoding = 
inbuffer.getTransferEncoding();
 
         try {
 
@@ -631,7 +624,6 @@ public static AS2MessageDispositionNotificationEntity 
parseMessageDispositionNot
             CharsetDecoder charsetDecoder = charset.newDecoder();
 
             inbuffer.setCharsetDecoder(charsetDecoder);
-            inbuffer.setTransferEncoding(contentTransferEncoding);
 
             List<CharArrayBuffer> dispositionNotificationFields = 
parseBodyPartFields(inbuffer, boundary,
                     BasicLineParser.INSTANCE, new 
ArrayList<CharArrayBuffer>());
@@ -646,7 +638,6 @@ public static AS2MessageDispositionNotificationEntity 
parseMessageDispositionNot
             throw parseException;
         } finally {
             inbuffer.setCharsetDecoder(previousDecoder);
-            inbuffer.setTransferEncoding(previousContentTransferEncoding);
         }
     }
 
@@ -657,7 +648,6 @@ public static MimeEntity 
parseEntityBody(AS2SessionInputBuffer inbuffer,
                                              Header[] headers)
             throws ParseException {
         CharsetDecoder previousDecoder = inbuffer.getCharsetDecoder();
-        String previousContentTransferEncoding = 
inbuffer.getTransferEncoding();
 
         try {
             Charset charset = entityContentType.getCharset();
@@ -667,7 +657,6 @@ public static MimeEntity 
parseEntityBody(AS2SessionInputBuffer inbuffer,
             CharsetDecoder charsetDecoder = charset.newDecoder();
 
             inbuffer.setCharsetDecoder(charsetDecoder);
-            inbuffer.setTransferEncoding(contentTransferEncoding);
 
             MimeEntity entity = null;
             switch (entityContentType.getMimeType().toLowerCase()) {
@@ -695,7 +684,7 @@ public static MimeEntity 
parseEntityBody(AS2SessionInputBuffer inbuffer,
                 skipToBoundary(inbuffer, boundary);
                 break;
             case AS2MimeType.TEXT_PLAIN:
-                entity = parseTextPlainEntityBody(inbuffer, boundary, 
charset.name(), previousContentTransferEncoding);
+                entity = parseTextPlainEntityBody(inbuffer, boundary, 
charset.name(), contentTransferEncoding);
                 break;
             case AS2MimeType.APPLICATION_PKCS7_SIGNATURE:
                 entity = parseApplicationPkcs7SignatureEntityBody(inbuffer, 
boundary, entityContentType,
@@ -713,7 +702,6 @@ public static MimeEntity 
parseEntityBody(AS2SessionInputBuffer inbuffer,
             throw parseException;
         } finally {
             inbuffer.setCharsetDecoder(previousDecoder);
-            inbuffer.setTransferEncoding(previousContentTransferEncoding);
         }
 
     }
@@ -724,7 +712,6 @@ public static ApplicationEDIEntity 
parseEDIEntityBody(AS2SessionInputBuffer inbu
                                                           String 
contentTransferEncoding)
             throws ParseException {
         CharsetDecoder previousDecoder = inbuffer.getCharsetDecoder();
-        String previousContentTransferEncoding = 
inbuffer.getTransferEncoding();
 
         try {
             Charset charset = ediMessageContentType.getCharset();
@@ -734,9 +721,11 @@ public static ApplicationEDIEntity 
parseEDIEntityBody(AS2SessionInputBuffer inbu
             CharsetDecoder charsetDecoder = charset.newDecoder();
 
             inbuffer.setCharsetDecoder(charsetDecoder);
-            inbuffer.setTransferEncoding(contentTransferEncoding);
 
             String ediMessageBodyPartContent = parseBodyPartText(inbuffer, 
boundary);
+            if (contentTransferEncoding != null) {
+                ediMessageBodyPartContent = 
EntityUtils.decode(ediMessageBodyPartContent, charset, contentTransferEncoding);
+            }
             ApplicationEDIEntity applicationEDIEntity = 
EntityUtils.createEDIEntity(ediMessageBodyPartContent,
                     ediMessageContentType, contentTransferEncoding, false);
 
@@ -747,7 +736,6 @@ public static ApplicationEDIEntity 
parseEDIEntityBody(AS2SessionInputBuffer inbu
             throw parseException;
         } finally {
             inbuffer.setCharsetDecoder(previousDecoder);
-            inbuffer.setTransferEncoding(previousContentTransferEncoding);
         }
     }
 
@@ -757,7 +745,6 @@ public static ApplicationPkcs7SignatureEntity 
parseApplicationPkcs7SignatureEnti
                                                                                
            String contentTransferEncoding) throws ParseException {
 
         CharsetDecoder previousDecoder = inbuffer.getCharsetDecoder();
-        String previousContentTransferEncoding = 
inbuffer.getTransferEncoding();
 
         try {
             Charset charset = contentType.getCharset();
@@ -767,13 +754,14 @@ public static ApplicationPkcs7SignatureEntity 
parseApplicationPkcs7SignatureEnti
             CharsetDecoder charsetDecoder = charset.newDecoder();
 
             inbuffer.setCharsetDecoder(charsetDecoder);
-            inbuffer.setTransferEncoding(contentTransferEncoding);
 
             String pkcs7SignatureBodyContent = parseBodyPartText(inbuffer, 
boundary);
+            
+            byte[] signature = 
EntityUtils.decode(pkcs7SignatureBodyContent.getBytes(charset), 
contentTransferEncoding);
 
             String charsetName = charset.toString();
             ApplicationPkcs7SignatureEntity applicationPkcs7SignatureEntity = 
new ApplicationPkcs7SignatureEntity(
-                    charsetName, contentTransferEncoding, 
pkcs7SignatureBodyContent.getBytes(charset), false);
+                    charsetName, contentTransferEncoding, signature, false);
             return applicationPkcs7SignatureEntity;
         } catch (Exception e) {
             ParseException parseException = new ParseException("failed to 
parse PKCS7 Signature entity");
@@ -781,7 +769,6 @@ public static ApplicationPkcs7SignatureEntity 
parseApplicationPkcs7SignatureEnti
             throw parseException;
         } finally {
             inbuffer.setCharsetDecoder(previousDecoder);
-            inbuffer.setTransferEncoding(previousContentTransferEncoding);
         }
     }
 
@@ -814,10 +801,10 @@ public static String parseBodyPartText(final 
AS2SessionInputBuffer inbuffer,
     public static List<CharArrayBuffer> parseBodyPartFields(final 
AS2SessionInputBuffer inbuffer,
                                                            final String 
boundary,
                                                            final LineParser 
parser,
-                                                           final 
List<CharArrayBuffer> headerLines)
+                                                           final 
List<CharArrayBuffer> fields)
             throws IOException {
         Args.notNull(parser, "parser");
-        Args.notNull(headerLines, "headerLines");
+        Args.notNull(fields, "fields");
         CharArrayBuffer current = null;
         CharArrayBuffer previous = null;
         while (true) {
@@ -854,11 +841,11 @@ public static String parseBodyPartText(final 
AS2SessionInputBuffer inbuffer,
                 // leave current line buffer for reuse for next header
                 current.clear();
             } else {
-                headerLines.add(current);
+                fields.add(current);
                 previous = current;
                 current = null;
             }
         }
-        return headerLines;
+        return fields;
     }
 }
diff --git 
a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/io/AS2SessionInputBuffer.java
 
b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/io/AS2SessionInputBuffer.java
index b4ab8c0d946..630edeb9fa6 100644
--- 
a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/io/AS2SessionInputBuffer.java
+++ 
b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/io/AS2SessionInputBuffer.java
@@ -23,7 +23,6 @@
 import java.nio.charset.CharsetDecoder;
 import java.nio.charset.CoderResult;
 
-import org.apache.camel.component.as2.api.util.EntityUtils;
 import org.apache.http.MessageConstraintException;
 import org.apache.http.config.MessageConstraints;
 import org.apache.http.impl.io.HttpTransportMetricsImpl;
@@ -46,8 +45,6 @@
 
     private CharsetDecoder decoder;
 
-    private String transferEncoding;
-
     private InputStream instream;
     private int bufferpos;
     private int bufferlen;
@@ -79,14 +76,6 @@ public void setCharsetDecoder(CharsetDecoder chardecoder) {
         this.decoder = chardecoder;
     }
 
-    public String getTransferEncoding() {
-        return transferEncoding;
-    }
-
-    public void setTransferEncoding(String transferEncoding) {
-        this.transferEncoding = transferEncoding;
-    }
-
     public void bind(final InputStream instream) {
         this.instream = instream;
     }
@@ -221,11 +210,11 @@ public int readLine(CharArrayBuffer charbuffer) throws 
IOException {
                     return lineFromReadBuffer(charbuffer, pos);
                 }
                 retry = false;
-                addTransferDecodedBytesToLinebuffer(pos);
+                addBytesToLinebuffer(pos);
             } else {
                 // end of line not found
                 if (hasBufferedData()) {
-                    addTransferDecodedBytesToLinebuffer(pos);
+                    addBytesToLinebuffer(pos);
                 }
                 noRead = fillBuffer();
                 if (noRead == -1) {
@@ -280,6 +269,7 @@ private int lineFromLineBuffer(final CharArrayBuffer 
charbuffer) throws IOExcept
                 }
             }
         }
+        
         if (this.decoder == null) {
             charbuffer.append(this.linebuffer, 0, len);
         } else {
@@ -301,6 +291,7 @@ private int lineFromReadBuffer(final CharArrayBuffer 
charbuffer, final int posit
             pos--;
         }
         len = pos - off;
+        
         if (this.decoder == null) {
             charbuffer.append(this.buffer, off, len);
         } else {
@@ -343,7 +334,7 @@ private int handleDecodingResult(final CoderResult result, 
final CharArrayBuffer
         return len;
     }
 
-    private void addTransferDecodedBytesToLinebuffer(int pos) throws 
IOException {
+    private void addBytesToLinebuffer(int pos) throws IOException {
         try {
             int len;
             if (pos != -1) {
@@ -351,10 +342,7 @@ private void addTransferDecodedBytesToLinebuffer(int pos) 
throws IOException {
             } else {
                 len = this.bufferlen - this.bufferpos;
             }
-            byte[] data = new byte[len];
-            System.arraycopy(this.buffer, this.bufferpos, data, 0, 
data.length);
-            data = EntityUtils.decode(data, transferEncoding); //
-            this.linebuffer.append(data, 0, data.length);
+            this.linebuffer.append(this.buffer, this.bufferpos, len);
             this.bufferpos = pos + 1;
         } catch (Exception e) {
             throw new IOException("failed to decode transfer encoding", e);
diff --git 
a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/util/EntityUtils.java
 
b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/util/EntityUtils.java
index 1bfdc70ce19..17b81a915af 100644
--- 
a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/util/EntityUtils.java
+++ 
b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/util/EntityUtils.java
@@ -17,8 +17,10 @@
 package org.apache.camel.component.as2.api.util;
 
 import java.io.ByteArrayOutputStream;
+import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.io.PrintStream;
 import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
 import java.util.concurrent.atomic.AtomicLong;
@@ -78,6 +80,11 @@ public static boolean validateBoundaryValue(String 
boundaryValue) {
     public static String appendParameter(String headerString, String 
parameterName, String parameterValue) {
         return headerString + "; " + parameterName + "=" + parameterValue;
     }
+    
+    public static String encode(String data, Charset charset, String encoding) 
throws Exception {
+        byte[] encoded = encode(data.getBytes(charset), encoding);
+        return new String(encoded, charset);
+    }
 
     public static byte[] encode(byte[] data, String encoding) throws Exception 
{
         Args.notNull(data, "Data");
@@ -125,9 +132,14 @@ public static OutputStream encode(OutputStream os, String 
encoding) throws Excep
             throw new Exception("Unknown encoding: " + encoding);
         }
     }
+    
+    public static String decode(String data, Charset charset, String encoding) 
throws Exception {
+        byte[] decoded = decode(data.getBytes(charset), encoding);
+        return new String(decoded, charset);
+    }
 
     public static byte[] decode(byte[] data, String encoding) throws Exception 
{
-        Args.notNull(data, "Input Stream");
+        Args.notNull(data, "Data");
 
         if (encoding == null) {
             // Identity encoding
@@ -242,6 +254,17 @@ public static void setMessageEntity(HttpMessage message, 
HttpEntity entity) {
 
     }
 
-
-
+    public static void printEntity(PrintStream out, HttpEntity entity) throws 
IOException {
+        entity.writeTo(out);
+    }
+    
+    public static String printEntity(HttpEntity entity) throws IOException {
+        try (ByteArrayOutputStream baos = new ByteArrayOutputStream();
+                PrintStream ps = new PrintStream(baos, true, "utf-8")) {
+            printEntity(ps, entity);
+            String content = new String(baos.toByteArray(), 
StandardCharsets.UTF_8);
+            return content;
+        }
+    }
+    
 }
diff --git 
a/components/camel-as2/camel-as2-api/src/test/java/org/apache/camel/component/as2/api/AS2MessageTest.java
 
b/components/camel-as2/camel-as2-api/src/test/java/org/apache/camel/component/as2/api/AS2MessageTest.java
index 34730dbe4ec..e155028eed2 100644
--- 
a/components/camel-as2/camel-as2-api/src/test/java/org/apache/camel/component/as2/api/AS2MessageTest.java
+++ 
b/components/camel-as2/camel-as2-api/src/test/java/org/apache/camel/component/as2/api/AS2MessageTest.java
@@ -29,14 +29,17 @@
 import org.apache.camel.component.as2.api.entity.ApplicationEDIEntity;
 import org.apache.camel.component.as2.api.entity.ApplicationEDIFACTEntity;
 import 
org.apache.camel.component.as2.api.entity.ApplicationPkcs7SignatureEntity;
+import 
org.apache.camel.component.as2.api.entity.DispositionNotificationMultipartReportEntity;
 import org.apache.camel.component.as2.api.entity.MimeEntity;
 import org.apache.camel.component.as2.api.entity.MultipartSignedEntity;
 import org.apache.http.HttpEntity;
 import org.apache.http.HttpException;
 import org.apache.http.HttpRequest;
 import org.apache.http.HttpResponse;
+import org.apache.http.HttpStatus;
 import org.apache.http.HttpVersion;
 import org.apache.http.entity.ContentType;
+import org.apache.http.impl.EnglishReasonPhraseCatalog;
 import org.apache.http.message.BasicHttpEntityEnclosingRequest;
 import org.apache.http.protocol.HttpContext;
 import org.apache.http.protocol.HttpCoreContext;
@@ -361,10 +364,32 @@ public void mdnMessageTest() throws Exception {
 
         HttpCoreContext httpContext = clientManager.send(EDI_MESSAGE, 
REQUEST_URI, SUBJECT, FROM, AS2_NAME, AS2_NAME,
                 AS2MessageStructure.PLAIN, 
ContentType.create(AS2MediaType.APPLICATION_EDIFACT, AS2Charset.US_ASCII),
-                null, null, null, DISPOSITION_NOTIFICATION_TO, null);
-
-        @SuppressWarnings("unused")
+                null, null, null, DISPOSITION_NOTIFICATION_TO, 
SIGNED_RECEIPT_MIC_ALGORITHMS);
+        
         HttpResponse response = httpContext.getResponse();
+        assertEquals("Unexpected method value", HttpVersion.HTTP_1_1, 
response.getStatusLine().getProtocolVersion());
+        assertEquals("Unexpected method value", HttpStatus.SC_OK, 
response.getStatusLine().getStatusCode());
+        assertEquals("Unexpected method value", 
EnglishReasonPhraseCatalog.INSTANCE.getReason(200, null), 
response.getStatusLine().getReasonPhrase());
+      
+        HttpEntity responseEntity = response.getEntity();
+        assertNotNull("Response entity", responseEntity);
+        assertTrue("Unexpected response entity type", responseEntity 
instanceof MultipartSignedEntity);
+        MultipartSignedEntity responseSignedEntity = (MultipartSignedEntity) 
responseEntity;
+        MimeEntity responseSignedDataEntity = 
responseSignedEntity.getSignedDataEntity();
+        assertTrue("Signed entity wrong type", responseSignedDataEntity 
instanceof DispositionNotificationMultipartReportEntity);
+        DispositionNotificationMultipartReportEntity reportEntity = 
(DispositionNotificationMultipartReportEntity)responseSignedDataEntity;
+        assertEquals("Unexpected number of body parts in report", 2, 
reportEntity.getPartCount());
+        MimeEntity firstPart = reportEntity.getPart(0);
+        assertEquals("Unexpected content type in first body part of report", 
ContentType.create(AS2MimeType.TEXT_PLAIN, AS2Charset.US_ASCII).toString(), 
firstPart.getContentTypeValue());
+        MimeEntity secondPart = reportEntity.getPart(1);
+        assertEquals("Unexpected content type in second body part of report",
+                
ContentType.create(AS2MimeType.MESSAGE_DISPOSITION_NOTIFICATION, 
AS2Charset.US_ASCII).toString(),
+                secondPart.getContentTypeValue());
+        ApplicationPkcs7SignatureEntity signatureEntity = 
responseSignedEntity.getSignatureEntity();
+        assertNotNull("Signature Entity", signatureEntity);
+        
+        // Validate Signature
+        assertTrue("Signature is invalid", responseSignedEntity.isValid());
     }
-
+    
 }


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


> Provide AS2 component to support Business Data Interchange Using HTTP
> ---------------------------------------------------------------------
>
>                 Key: CAMEL-11257
>                 URL: https://issues.apache.org/jira/browse/CAMEL-11257
>             Project: Camel
>          Issue Type: New Feature
>    Affects Versions: 2.19.1
>            Reporter: William Collins
>            Assignee: William Collins
>            Priority: Major
>             Fix For: 2.22.0
>
>
> AS2 Camel component should provide MIME-Based Secure Peer-to-Peer Business 
> Data Interchange Using HTTP as per RFC4120



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to