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);
}