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 0071287  Do not ignore mdn template from AS2 server configuration 
(#5682)
0071287 is described below

commit 00712879dedc915030659d3e31f372040b46341e
Author: dk2k <[email protected]>
AuthorDate: Thu Jun 17 07:55:43 2021 +0300

    Do not ignore mdn template from AS2 server configuration (#5682)
    
    * Respect the user's intention to send content-type header without appended 
charset:
    "application/edifact"
    
    * AS2 server: currently there is no means to specify custom MDN template
    MDN template from configuration is ignored.
    
    Co-authored-by: Dmitry Kriukov <[email protected]>
---
 .../component/as2/api/AS2ServerConnection.java     | 22 ++++++++++++++--------
 .../component/as2/api/protocol/ResponseMDN.java    | 16 +++++++++++++---
 .../camel/component/as2/api/AS2MessageTest.java    |  3 ++-
 .../as2/internal/AS2ConnectionHelper.java          |  2 +-
 .../camel/component/as2/AS2ClientManagerIT.java    |  4 +++-
 5 files changed, 33 insertions(+), 14 deletions(-)

diff --git 
a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2ServerConnection.java
 
b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2ServerConnection.java
index 4b643f6..48cd101 100644
--- 
a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2ServerConnection.java
+++ 
b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2ServerConnection.java
@@ -67,14 +67,15 @@ public class AS2ServerConnection {
                                      AS2SignatureAlgorithm signatureAlgorithm,
                                      Certificate[] signingCertificateChain,
                                      PrivateKey signingPrivateKey,
-                                     PrivateKey decryptingPrivateKey)
-                                                                      throws 
IOException {
+                                     PrivateKey decryptingPrivateKey,
+                                     String mdnMessageTemplate)
+                                                                throws 
IOException {
             setName(REQUEST_LISTENER_THREAD_NAME_PREFIX + port);
             serversocket = new ServerSocket(port);
 
             // Set up HTTP protocol processor for incoming connections
             final HttpProcessor inhttpproc = initProtocolProcessor(as2Version, 
originServer, serverFqdn, port,
-                    signatureAlgorithm, signingCertificateChain, 
signingPrivateKey, decryptingPrivateKey);
+                    signatureAlgorithm, signingCertificateChain, 
signingPrivateKey, decryptingPrivateKey, mdnMessageTemplate);
 
             reqistry = new UriHttpRequestHandlerMapper();
 
@@ -185,6 +186,7 @@ public class AS2ServerConnection {
     private Certificate[] signingCertificateChain;
     private PrivateKey signingPrivateKey;
     private PrivateKey decryptingPrivateKey;
+    private String mdnMessageTemplate;
 
     public AS2ServerConnection(String as2Version,
                                String originServer,
@@ -193,8 +195,9 @@ public class AS2ServerConnection {
                                AS2SignatureAlgorithm signingAlgorithm,
                                Certificate[] signingCertificateChain,
                                PrivateKey signingPrivateKey,
-                               PrivateKey decryptingPrivateKey)
-                                                                throws 
IOException {
+                               PrivateKey decryptingPrivateKey,
+                               String mdnMessageTemplate)
+                                                          throws IOException {
         this.as2Version = Args.notNull(as2Version, "as2Version");
         this.originServer = Args.notNull(originServer, "userAgent");
         this.serverFqdn = Args.notNull(serverFqdn, "serverFqdn");
@@ -203,11 +206,12 @@ public class AS2ServerConnection {
         this.signingCertificateChain = signingCertificateChain;
         this.signingPrivateKey = signingPrivateKey;
         this.decryptingPrivateKey = decryptingPrivateKey;
+        this.mdnMessageTemplate = mdnMessageTemplate;
 
         listenerThread = new RequestListenerThread(
                 this.as2Version, this.originServer, this.serverFqdn,
                 this.serverPortNumber, this.signingAlgorithm, 
this.signingCertificateChain, this.signingPrivateKey,
-                this.decryptingPrivateKey);
+                this.decryptingPrivateKey, this.mdnMessageTemplate);
         listenerThread.setDaemon(true);
         listenerThread.start();
     }
@@ -257,11 +261,13 @@ public class AS2ServerConnection {
             AS2SignatureAlgorithm signatureAlgorithm,
             Certificate[] signingCertificateChain,
             PrivateKey signingPrivateKey,
-            PrivateKey decryptingPrivateKey) {
+            PrivateKey decryptingPrivateKey,
+            String mdnMessageTemplate) {
         return HttpProcessorBuilder.create().add(new 
ResponseContent(true)).add(new ResponseServer(originServer))
                 .add(new ResponseDate()).add(new 
ResponseConnControl()).add(new ResponseMDN(
                         as2Version, serverFqdn,
-                        signatureAlgorithm, signingCertificateChain, 
signingPrivateKey, decryptingPrivateKey))
+                        signatureAlgorithm, signingCertificateChain, 
signingPrivateKey, decryptingPrivateKey,
+                        mdnMessageTemplate))
                 .build();
     }
 
diff --git 
a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/protocol/ResponseMDN.java
 
b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/protocol/ResponseMDN.java
index 5cfe205..6c4c152 100644
--- 
a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/protocol/ResponseMDN.java
+++ 
b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/protocol/ResponseMDN.java
@@ -44,6 +44,7 @@ import org.apache.camel.component.as2.api.util.AS2Utils;
 import org.apache.camel.component.as2.api.util.EntityUtils;
 import org.apache.camel.component.as2.api.util.HttpMessageUtils;
 import org.apache.camel.component.as2.api.util.SigningUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.http.Header;
 import org.apache.http.HttpEntityEnclosingRequest;
 import org.apache.http.HttpException;
@@ -81,17 +82,26 @@ public class ResponseMDN implements HttpResponseInterceptor 
{
     private Certificate[] signingCertificateChain;
     private PrivateKey signingPrivateKey;
     private PrivateKey decryptingPrivateKey;
+    private String mdnMessageTemplate;
 
     private VelocityEngine velocityEngine;
 
     public ResponseMDN(String as2Version, String serverFQDN, 
AS2SignatureAlgorithm signingAlgorithm,
-                       Certificate[] signingCertificateChain, PrivateKey 
signingPrivateKey, PrivateKey decryptingPrivateKey) {
+                       Certificate[] signingCertificateChain, PrivateKey 
signingPrivateKey, PrivateKey decryptingPrivateKey,
+                       String mdnMessageTemplate) {
         this.as2Version = as2Version;
         this.serverFQDN = serverFQDN;
         this.signingAlgorithm = signingAlgorithm;
         this.signingCertificateChain = signingCertificateChain;
         this.signingPrivateKey = signingPrivateKey;
         this.decryptingPrivateKey = decryptingPrivateKey;
+        // MDN response is to be sent anyway, so empty or null value will be 
treated as if
+        // the user doesn't know how to compose their own template and/or is 
satisfied with default one.
+        if (!StringUtils.isBlank(mdnMessageTemplate)) {
+            this.mdnMessageTemplate = mdnMessageTemplate;
+        } else {
+            this.mdnMessageTemplate = DEFAULT_MDN_MESSAGE_TEMPLATE;
+        }
     }
 
     @Override
@@ -132,7 +142,7 @@ public class ResponseMDN implements HttpResponseInterceptor 
{
             // Return a failed Message Disposition Notification Receipt in 
response body
             String mdnMessage = 
createMdnDescription(httpEntityEnclosingRequest, response,
                     DispositionMode.AUTOMATIC_ACTION_MDN_SENT_AUTOMATICALLY,
-                    AS2DispositionType.FAILED, null, null, null, null, null, 
AS2Charset.US_ASCII, DEFAULT_MDN_MESSAGE_TEMPLATE);
+                    AS2DispositionType.FAILED, null, null, null, null, null, 
AS2Charset.US_ASCII, mdnMessageTemplate);
             multipartReportEntity = new 
DispositionNotificationMultipartReportEntity(
                     httpEntityEnclosingRequest, response, 
DispositionMode.AUTOMATIC_ACTION_MDN_SENT_AUTOMATICALLY,
                     AS2DispositionType.FAILED, null, null, null, null, null, 
AS2Charset.US_ASCII, boundary, true,
@@ -141,7 +151,7 @@ public class ResponseMDN implements HttpResponseInterceptor 
{
             String mdnMessage = 
createMdnDescription(httpEntityEnclosingRequest, response,
                     DispositionMode.AUTOMATIC_ACTION_MDN_SENT_AUTOMATICALLY,
                     AS2DispositionType.PROCESSED, null, null, null, null, 
null, AS2Charset.US_ASCII,
-                    DEFAULT_MDN_MESSAGE_TEMPLATE);
+                    mdnMessageTemplate);
             multipartReportEntity = new 
DispositionNotificationMultipartReportEntity(
                     httpEntityEnclosingRequest, response, 
DispositionMode.AUTOMATIC_ACTION_MDN_SENT_AUTOMATICALLY,
                     AS2DispositionType.PROCESSED, null, null, null, null, 
null, AS2Charset.US_ASCII, boundary, true,
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 a0c2023..571043d 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
@@ -135,6 +135,7 @@ public class AS2MessageTest {
     private static final String DISPOSITION_NOTIFICATION_OPTIONS
             = "signed-receipt-protocol=optional,pkcs7-signature; 
signed-receipt-micalg=optional,sha1";
     private static final String[] SIGNED_RECEIPT_MIC_ALGORITHMS = new String[] 
{ "sha1", "md5" };
+    private static final String MDN_MESSAGE_TEMPLATE = "TBD";
 
     private static final HttpDateGenerator DATE_GENERATOR = new 
HttpDateGenerator();
 
@@ -179,7 +180,7 @@ public class AS2MessageTest {
 
         testServer = new AS2ServerConnection(
                 AS2_VERSION, "MyServer-HTTP/1.1", SERVER_FQDN, TARGET_PORT, 
AS2SignatureAlgorithm.SHA256WITHRSA,
-                certList.toArray(new Certificate[0]), signingKP.getPrivate(), 
decryptingKP.getPrivate());
+                certList.toArray(new Certificate[0]), signingKP.getPrivate(), 
decryptingKP.getPrivate(), MDN_MESSAGE_TEMPLATE);
         testServer.listen("*", new HttpRequestHandler() {
             @Override
             public void handle(HttpRequest request, HttpResponse response, 
HttpContext context)
diff --git 
a/components/camel-as2/camel-as2-component/src/main/java/org/apache/camel/component/as2/internal/AS2ConnectionHelper.java
 
b/components/camel-as2/camel-as2-component/src/main/java/org/apache/camel/component/as2/internal/AS2ConnectionHelper.java
index 153a12a..f221f67 100644
--- 
a/components/camel-as2/camel-as2-component/src/main/java/org/apache/camel/component/as2/internal/AS2ConnectionHelper.java
+++ 
b/components/camel-as2/camel-as2-component/src/main/java/org/apache/camel/component/as2/internal/AS2ConnectionHelper.java
@@ -72,7 +72,7 @@ public final class AS2ConnectionHelper {
                         configuration.getAs2Version(), 
configuration.getServer(),
                         configuration.getServerFqdn(), 
configuration.getServerPortNumber(), configuration.getSigningAlgorithm(),
                         configuration.getSigningCertificateChain(), 
configuration.getSigningPrivateKey(),
-                        configuration.getDecryptingPrivateKey());
+                        configuration.getDecryptingPrivateKey(), 
configuration.getMdnMessageTemplate());
                 serverConnections.put(configuration.getServerPortNumber(), 
serverConnection);
             }
             return serverConnection;
diff --git 
a/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/AS2ClientManagerIT.java
 
b/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/AS2ClientManagerIT.java
index d22717c..987a624 100644
--- 
a/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/AS2ClientManagerIT.java
+++ 
b/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/AS2ClientManagerIT.java
@@ -120,6 +120,7 @@ public class AS2ClientManagerIT extends 
AbstractAS2ITSupport {
 
     private static final String MDN_FROM = "[email protected]";
     private static final String MDN_SUBJECT_PREFIX = "MDN Response:";
+    private static final String MDN_MESSAGE_TEMPLATE = "TBD";
 
     private static final String EDI_MESSAGE = 
"UNB+UNOA:1+005435656:1+006415160:1+060515:1434+00000000000778'\n"
                                               + 
"UNH+00000000000117+INVOIC:D:97B:UN'\n"
@@ -742,7 +743,8 @@ public class AS2ClientManagerIT extends 
AbstractAS2ITSupport {
         serverConnection = new AS2ServerConnection(
                 AS2_VERSION, ORIGIN_SERVER_NAME,
                 SERVER_FQDN, PARTNER_TARGET_PORT, 
AS2SignatureAlgorithm.SHA256WITHRSA,
-                serverCertList.toArray(new Certificate[0]), 
serverSigningKP.getPrivate(), serverSigningKP.getPrivate());
+                serverCertList.toArray(new Certificate[0]), 
serverSigningKP.getPrivate(), serverSigningKP.getPrivate(),
+                MDN_MESSAGE_TEMPLATE);
         requestHandler = new RequestHandler();
         serverConnection.listen("/", requestHandler);
     }

Reply via email to