You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2018/06/06 06:47:21 UTC
[camel] branch master updated: [CAMEL-11257] Added test for
Asynchronous MDN contruction
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/master by this push:
new f86c496 [CAMEL-11257] Added test for Asynchronous MDN contruction
f86c496 is described below
commit f86c4963673fa20851bf4796424c9f4fea1c43c6
Author: William Collins <pu...@gmail.com>
AuthorDate: Tue Jun 5 11:12:39 2018 -0400
[CAMEL-11257] Added test for Asynchronous MDN contruction
---
.../component/as2/api/AS2ServerConnection.java | 2 +
.../AS2MessageDispositionNotificationEntity.java | 3 +-
.../component/as2/api/util/HttpMessageUtils.java | 14 ++++--
.../camel/component/as2/api/AS2MessageTest.java | 52 +++++++++++++++++++---
4 files changed, 61 insertions(+), 10 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 3b383fe..e9f340d 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
@@ -140,6 +140,8 @@ public class AS2ServerConnection {
while (!Thread.interrupted()) {
this.httpService.handleRequest(this.serverConnection, context);
+
+ // Send asynchronous MDN if any.
}
} catch (final ConnectionClosedException ex) {
diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/AS2MessageDispositionNotificationEntity.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/AS2MessageDispositionNotificationEntity.java
index dd933d0..1f984ba 100644
--- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/AS2MessageDispositionNotificationEntity.java
+++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/AS2MessageDispositionNotificationEntity.java
@@ -219,8 +219,7 @@ public class AS2MessageDispositionNotificationEntity extends MimeEntity {
if (dispositionModifier != null) {
as2Disposition = as2Disposition + "/" + dispositionModifier.toString();
}
- Header as2DispositionField = new BasicHeader(AS2_DISPOSITION,
- dispositionMode.toString() + ";" + dispositionType.toString());
+ Header as2DispositionField = new BasicHeader(AS2_DISPOSITION, as2Disposition);
canonicalOutstream.writeln(as2DispositionField.toString());
if (failureFields != null) {
diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/util/HttpMessageUtils.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/util/HttpMessageUtils.java
index 133de6b..1563c7a 100644
--- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/util/HttpMessageUtils.java
+++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/util/HttpMessageUtils.java
@@ -23,6 +23,7 @@ import org.apache.http.HttpEntity;
import org.apache.http.HttpEntityEnclosingRequest;
import org.apache.http.HttpException;
import org.apache.http.HttpMessage;
+import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.io.SessionInputBuffer;
import org.apache.http.util.Args;
@@ -48,12 +49,19 @@ public final class HttpMessageUtils {
}
}
- public static <T> T getEntity(HttpMessage request, Class<T> type) {
- if (request instanceof HttpEntityEnclosingRequest) {
- HttpEntity entity = ((HttpEntityEnclosingRequest)request).getEntity();
+ public static <T> T getEntity(HttpMessage message, Class<T> type) {
+ Args.notNull(message, "message");
+ Args.notNull(type, "type");
+ if (message instanceof HttpEntityEnclosingRequest) {
+ HttpEntity entity = ((HttpEntityEnclosingRequest)message).getEntity();
if (entity != null && type.isInstance(entity)) {
return type.cast(entity);
}
+ } else if (message instanceof HttpResponse) {
+ HttpEntity entity = ((HttpResponse)message).getEntity();
+ if (entity != null && type.isInstance(entity)) {
+ type.cast(entity);
+ }
}
return null;
}
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 78ec28a..533018f 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
@@ -24,9 +24,13 @@ import java.security.Security;
import java.security.cert.Certificate;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
+import org.apache.camel.component.as2.api.entity.AS2DispositionModifier;
import org.apache.camel.component.as2.api.entity.AS2DispositionType;
+import org.apache.camel.component.as2.api.entity.AS2MessageDispositionNotificationEntity;
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;
@@ -34,8 +38,11 @@ import org.apache.camel.component.as2.api.entity.DispositionMode;
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.camel.component.as2.api.entity.TextPlainEntity;
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.MicUtils;
+import org.apache.camel.component.as2.api.util.MicUtils.ReceivedContentMic;
import org.apache.http.HttpEntity;
import org.apache.http.HttpEntityEnclosingRequest;
import org.apache.http.HttpException;
@@ -70,6 +77,7 @@ import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
@@ -117,7 +125,9 @@ public class AS2MessageTest {
private static final String FROM = "mrAS@example.org";
private static final String CLIENT_FQDN = "client.example.org";
private static final String SERVER_FQDN = "server.example.org";
+ private static final String REPORTING_UA = "Server Responding with MDN";
private static final String DISPOSITION_NOTIFICATION_TO = "mrAS@example.org";
+ 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 HttpDateGenerator DATE_GENERATOR = new HttpDateGenerator();
@@ -407,25 +417,57 @@ public class AS2MessageTest {
AS2AsynchronousMDNManager mdnManager = new AS2AsynchronousMDNManager(AS2_VERSION, USER_AGENT, CLIENT_FQDN,
certList.toArray(new X509Certificate[0]), signingKP.getPrivate());
- // Create plain edi request message
+ // Create plain edi request message to acknowledge
ApplicationEDIEntity ediEntity = EntityUtils.createEDIEntity(EDI_MESSAGE,
ContentType.create(AS2MediaType.APPLICATION_EDIFACT, AS2Charset.US_ASCII), null, false);
HttpEntityEnclosingRequest request = new BasicHttpEntityEnclosingRequest("POST", REQUEST_URI);
HttpMessageUtils.setHeaderValue(request, AS2Header.AS2_TO, AS2_NAME);
+ String originalMessageId = Util.createMessageId(SERVER_FQDN);
+ HttpMessageUtils.setHeaderValue(request, AS2Header.MESSAGE_ID, originalMessageId);
+ HttpMessageUtils.setHeaderValue(request, AS2Header.DISPOSITION_NOTIFICATION_OPTIONS, DISPOSITION_NOTIFICATION_OPTIONS);
EntityUtils.setMessageEntity(request, ediEntity);
+ // Create response for MDN creation.
HttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1, 200, "OK");
String httpdate = DATE_GENERATOR.getCurrentDate();
response.setHeader(HTTP.DATE_HEADER, httpdate);
+ response.setHeader(AS2Header.SERVER, REPORTING_UA);
// Create a receipt for edi message
+ Map<String, String> extensionFields = new HashMap<String, String>();
+ extensionFields.put("Original-Recipient", "rfc822;" + AS2_NAME);
+ AS2DispositionModifier dispositionModifier = AS2DispositionModifier.createWarning("AS2 is cool!");
+ String[] failureFields = new String[] {"failure-field-1" };
+ String[] errorFields = new String[] {"error-field-1"};
+ String[] warningFields = new String[] {"warning-field-1"};
DispositionNotificationMultipartReportEntity mdn = new DispositionNotificationMultipartReportEntity(request,
- response, DispositionMode.AUTOMATIC_ACTION_MDN_SENT_AUTOMATICALLY, AS2DispositionType.PROCESSED, null,
- null, null, null, null, null, "boundary", true);
+ response, DispositionMode.AUTOMATIC_ACTION_MDN_SENT_AUTOMATICALLY, AS2DispositionType.PROCESSED, dispositionModifier,
+ failureFields, errorFields, warningFields,
+ extensionFields, null, "boundary", true);
// Send MDN
- mdnManager.send(mdn, TARGET_HOST, TARGET_PORT, REQUEST_URI, SUBJECT, FROM, AS2_NAME, AS2_NAME);
-
+ HttpCoreContext httpContext = mdnManager.send(mdn, TARGET_HOST, TARGET_PORT, REQUEST_URI, SUBJECT, FROM, AS2_NAME, AS2_NAME);
+ HttpRequest mndRequest = httpContext.getRequest();
+ DispositionNotificationMultipartReportEntity reportEntity = HttpMessageUtils.getEntity(mndRequest, DispositionNotificationMultipartReportEntity.class);
+ assertNotNull("Request does not contain resport", reportEntity);
+ assertEquals("Report entity contains invalid number of parts", 2, reportEntity.getPartCount());
+ assertTrue("Report first part is not text entity", reportEntity.getPart(0) instanceof TextPlainEntity);
+ assertTrue("Report second part is not MDN entity", reportEntity.getPart(1) instanceof AS2MessageDispositionNotificationEntity);
+ AS2MessageDispositionNotificationEntity mdnEntity = (AS2MessageDispositionNotificationEntity) reportEntity.getPart(1);
+ assertEquals("Unexpected value for Reporting UA", REPORTING_UA, mdnEntity.getReportingUA());
+ assertEquals("Unexpected value for Final Recipient", AS2_NAME, mdnEntity.getFinalRecipient());
+ assertEquals("Unexpected value for Original Message ID", originalMessageId, mdnEntity.getOriginalMessageId());
+ assertEquals("Unexpected value for Disposition Mode", DispositionMode.AUTOMATIC_ACTION_MDN_SENT_AUTOMATICALLY, mdnEntity.getDispositionMode());
+ assertEquals("Unexpected value for Disposition Type", AS2DispositionType.PROCESSED, mdnEntity.getDispositionType());
+ assertEquals("Unexpected value for Disposition Modifier", dispositionModifier, mdnEntity.getDispositionModifier());
+ assertArrayEquals("Unexpected value for Failure Fields", failureFields, mdnEntity.getFailureFields());
+ assertArrayEquals("Unexpected value for Error Fields", errorFields, mdnEntity.getErrorFields());
+ assertArrayEquals("Unexpected value for Warning Fields", warningFields, mdnEntity.getWarningFields());
+ assertEquals("Unexpected value for Extension Fields", extensionFields, mdnEntity.getExtensionFields());
+ ReceivedContentMic expectedMic = MicUtils.createReceivedContentMic(request);
+ ReceivedContentMic mdnMic = mdnEntity.getReceivedContentMic();
+ assertEquals("Unexpected value for Recieved Content Mic", expectedMic.getEncodedMessageDigest(), mdnMic.getEncodedMessageDigest());
+ LOG.debug(Util.printMessage(mndRequest));
}
}
--
To stop receiving notification emails like this one, please contact
davsclaus@apache.org.