This is an automated email from the ASF dual-hosted git repository.
zregvart 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 f7a5c43 [CAMEL-12605] Added tests and fixes for compression
f7a5c43 is described below
commit f7a5c43c8c30d19486371801fda8aa29a62b42ac
Author: William Collins <[email protected]>
AuthorDate: Fri Nov 30 14:27:50 2018 -0500
[CAMEL-12605] Added tests and fixes for compression
---
.../camel/component/as2/api/AS2ClientManager.java | 4 +-
.../camel/component/as2/api/AS2MediaType.java | 8 +-
.../ApplicationPkcs7MimeCompressedDataEntity.java | 2 +-
.../ApplicationPkcs7MimeEnvelopedDataEntity.java | 2 +-
.../component/as2/api/entity/EntityParser.java | 50 +++++-
.../camel/component/as2/api/AS2MessageTest.java | 195 +++++++++++++++++++++
6 files changed, 254 insertions(+), 7 deletions(-)
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 8e1905c..915d210 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
@@ -315,7 +315,7 @@ public class AS2ClientManager {
CMSCompressedDataGenerator compressedDataGenerator =
createCompressorGenerator(httpContext);
OutputCompressor compressor = createCompressor(httpContext);
ApplicationPkcs7MimeCompressedDataEntity
pkcs7MimeCompressedDataEntity = new ApplicationPkcs7MimeCompressedDataEntity(
- applicationEDIEntity, compressedDataGenerator, compressor,
AS2TransferEncoding.BASE64, false);
+ applicationEDIEntity, compressedDataGenerator, compressor,
AS2TransferEncoding.BASE64, true);
// Add Compressed Entity to main body of request.
EntityUtils.setMessageEntity(request,
pkcs7MimeCompressedDataEntity);
@@ -331,7 +331,7 @@ public class AS2ClientManager {
CMSCompressedDataGenerator compressedDataGenerator =
createCompressorGenerator(httpContext);
OutputCompressor compressor = createCompressor(httpContext);
ApplicationPkcs7MimeCompressedDataEntity
pkcs7MimeCompressedDataEntity = new ApplicationPkcs7MimeCompressedDataEntity(
- multipartSignedEntity, compressedDataGenerator,
compressor, AS2TransferEncoding.BASE64, false);
+ multipartSignedEntity, compressedDataGenerator,
compressor, AS2TransferEncoding.BASE64, true);
// Add Compressed Entity to main body of request.
EntityUtils.setMessageEntity(request,
pkcs7MimeCompressedDataEntity);
diff --git
a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2MediaType.java
b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2MediaType.java
index d6c4934..1aa3816 100644
---
a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2MediaType.java
+++
b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2MediaType.java
@@ -27,9 +27,13 @@ public interface AS2MediaType {
*/
public static final String APPLICATION_PKCS7_SIGNATURE =
"application/pkcs7-signature; name=smime.p7s; smime-type=signed-data";
/**
- * Media Type for Application PKCS7 Signature
+ * Media Type for Application PKCS7 Enveloped Data
+ */
+ public static final String APPLICATION_PKCS7_MIME_ENVELOPED =
"application/pkcs7-mime; smime-type=enveloped-data; name=smime.p7m";
+ /**
+ * Media Type for Application PKCS7 Compressed Data
*/
- public static final String APPLICATION_PKCS7_MIME =
"application/pkcs7-mime; name=smime.p7m; smime-type=enveloped-data;
name=smime.p7m";
+ public static final String APPLICATION_PKCS7_MIME_COMPRESSED =
"application/pkcs7-mime; smime-type=compressed-data; name=smime.p7z";
/**
* Media Type for Text/Plain Data
*/
diff --git
a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationPkcs7MimeCompressedDataEntity.java
b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationPkcs7MimeCompressedDataEntity.java
index 7a88761..16402e4 100644
---
a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationPkcs7MimeCompressedDataEntity.java
+++
b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationPkcs7MimeCompressedDataEntity.java
@@ -64,7 +64,7 @@ public class ApplicationPkcs7MimeCompressedDataEntity extends
MimeEntity {
public ApplicationPkcs7MimeCompressedDataEntity(byte[] compressedData,
String compressedContentTransferEncoding, boolean isMainBody) {
this.compressedData = Args.notNull(compressedData, "encryptedData");
- setContentType(ContentType.create("application/pkcs7-mime", new
BasicNameValuePair("smime-type", "compressed-datat"),
+ setContentType(ContentType.create("application/pkcs7-mime", new
BasicNameValuePair("smime-type", "compressed-data"),
new BasicNameValuePair("name", "smime.p7z")));
setContentTransferEncoding(compressedContentTransferEncoding);
addHeader(AS2Header.CONTENT_DISPOSITION, CONTENT_DISPOSITION);
diff --git
a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationPkcs7MimeEnvelopedDataEntity.java
b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationPkcs7MimeEnvelopedDataEntity.java
index 4bb9866..d6a9be6 100644
---
a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationPkcs7MimeEnvelopedDataEntity.java
+++
b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationPkcs7MimeEnvelopedDataEntity.java
@@ -64,7 +64,7 @@ public class ApplicationPkcs7MimeEnvelopedDataEntity extends
MimeEntity {
public ApplicationPkcs7MimeEnvelopedDataEntity(byte[] encryptedData,
String encryptedContentTransferEncoding, boolean isMainBody) {
this.encryptedData = Args.notNull(encryptedData, "encryptedData");
- setContentType(ContentType.create("application/pkcs7-mime", new
BasicNameValuePair("smime-type", "enveloped-datat"),
+ setContentType(ContentType.create("application/pkcs7-mime", new
BasicNameValuePair("smime-type", "enveloped-data"),
new BasicNameValuePair("name", "smime.p7m")));
setContentTransferEncoding(encryptedContentTransferEncoding);
addHeader(AS2Header.CONTENT_DISPOSITION, CONTENT_DISPOSITION);
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 5fb23f4..42a4b1b 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
@@ -800,6 +800,20 @@ public final class EntityParser {
entity = parseApplicationPkcs7SignatureEntityBody(inbuffer,
boundary, entityContentType,
contentTransferEncoding);
break;
+ case AS2MimeType.APPLICATION_PKCS7_MIME:
+ switch(entityContentType.getParameter("smime-type")) {
+ case "compressed-data":
+ entity =
parseApplicationPkcs7MimeCompressedDataEntityBody(inbuffer, boundary,
entityContentType,
+ contentTransferEncoding);
+ break;
+ case "enveloped-data":
+ entity =
parseApplicationPkcs7MimeEnvelopedDataEntityBody(inbuffer, boundary,
entityContentType,
+ contentTransferEncoding);
+ break;
+ default:
+ break;
+ }
+ break;
default:
break;
}
@@ -882,7 +896,7 @@ public final class EntityParser {
}
}
- public static ApplicationPkcs7MimeEnvelopedDataEntity
parseApplicationPkcs7MimeEntityBody(AS2SessionInputBuffer inbuffer,
+ public static ApplicationPkcs7MimeEnvelopedDataEntity
parseApplicationPkcs7MimeEnvelopedDataEntityBody(AS2SessionInputBuffer inbuffer,
String boundary,
ContentType contentType,
String contentTransferEncoding)
@@ -915,6 +929,40 @@ public final class EntityParser {
}
}
+ public static ApplicationPkcs7MimeCompressedDataEntity
parseApplicationPkcs7MimeCompressedDataEntityBody(AS2SessionInputBuffer
inbuffer,
+
String boundary,
+
ContentType contentType,
+
String contentTransferEncoding)
+ throws ParseException {
+
+ CharsetDecoder previousDecoder = inbuffer.getCharsetDecoder();
+
+ try {
+ Charset charset = contentType.getCharset();
+ if (charset == null) {
+ charset = Charset.forName(AS2Charset.US_ASCII);
+ }
+ CharsetDecoder charsetDecoder = charset.newDecoder();
+
+ inbuffer.setCharsetDecoder(charsetDecoder);
+
+ String pkcs7CompressedBodyContent = parseBodyPartText(inbuffer,
boundary);
+
+ byte[] compressedContent =
EntityUtils.decode(pkcs7CompressedBodyContent.getBytes(charset),
+ contentTransferEncoding);
+
+ ApplicationPkcs7MimeCompressedDataEntity
applicationPkcs7MimeEntity = new ApplicationPkcs7MimeCompressedDataEntity(
+ compressedContent, contentTransferEncoding, false);
+ return applicationPkcs7MimeEntity;
+ } catch (Exception e) {
+ ParseException parseException = new ParseException("failed to
parse PKCS7 Mime entity");
+ parseException.initCause(e);
+ throw parseException;
+ } finally {
+ inbuffer.setCharsetDecoder(previousDecoder);
+ }
+ }
+
public static String parseBodyPartText(final AS2SessionInputBuffer
inbuffer,
final String boundary)
throws IOException {
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 9a43f10..5b9dc3e 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
@@ -32,6 +32,7 @@ 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.ApplicationPkcs7MimeCompressedDataEntity;
import
org.apache.camel.component.as2.api.entity.ApplicationPkcs7MimeEnvelopedDataEntity;
import
org.apache.camel.component.as2.api.entity.ApplicationPkcs7SignatureEntity;
import org.apache.camel.component.as2.api.entity.DispositionMode;
@@ -70,6 +71,7 @@ import
org.bouncycastle.asn1.smime.SMIMEEncryptionKeyPreferenceAttribute;
import org.bouncycastle.asn1.x500.X500Name;
import org.bouncycastle.cert.jcajce.JcaCertStore;
import org.bouncycastle.cms.jcajce.JcaSimpleSignerInfoGeneratorBuilder;
+import org.bouncycastle.cms.jcajce.ZlibExpanderProvider;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.junit.AfterClass;
import org.junit.Before;
@@ -735,5 +737,198 @@ public class AS2MessageTest {
mdnMic.getEncodedMessageDigest());
LOG.debug("\r\n" + AS2Utils.printMessage(mndRequest));
}
+
+ @Test
+ public void compressedMessageTest() throws Exception {
+ AS2ClientConnection clientConnection = new
AS2ClientConnection(AS2_VERSION, USER_AGENT, CLIENT_FQDN,
+ TARGET_HOST, TARGET_PORT);
+ AS2ClientManager clientManager = new
AS2ClientManager(clientConnection);
+
+ LOG.info("Key Algoritm: " + signingKP.getPrivate().getAlgorithm());
+
+ HttpCoreContext httpContext = clientManager.send(EDI_MESSAGE,
REQUEST_URI, SUBJECT, FROM, AS2_NAME, AS2_NAME,
+ AS2MessageStructure.PLAIN_COMPRESSED,
+ ContentType.create(AS2MediaType.APPLICATION_EDIFACT,
AS2Charset.US_ASCII), null,
+ null, null, null, AS2CompressionAlgorithm.ZLIB,
+ DISPOSITION_NOTIFICATION_TO, SIGNED_RECEIPT_MIC_ALGORITHMS,
null,
+ null, null);
+
+ HttpRequest request = httpContext.getRequest();
+ assertEquals("Unexpected method value", METHOD,
request.getRequestLine().getMethod());
+ assertEquals("Unexpected request URI value", REQUEST_URI,
request.getRequestLine().getUri());
+ assertEquals("Unexpected HTTP version value", HttpVersion.HTTP_1_1,
+ request.getRequestLine().getProtocolVersion());
+
+ assertEquals("Unexpected subject value", SUBJECT,
request.getFirstHeader(AS2Header.SUBJECT).getValue());
+ assertEquals("Unexpected from value", FROM,
request.getFirstHeader(AS2Header.FROM).getValue());
+ assertEquals("Unexpected AS2 version value", AS2_VERSION,
+ request.getFirstHeader(AS2Header.AS2_VERSION).getValue());
+ assertEquals("Unexpected AS2 from value", AS2_NAME,
request.getFirstHeader(AS2Header.AS2_FROM).getValue());
+ assertEquals("Unexpected AS2 to value", AS2_NAME,
request.getFirstHeader(AS2Header.AS2_TO).getValue());
+ assertTrue("Unexpected message id value",
+
request.getFirstHeader(AS2Header.MESSAGE_ID).getValue().endsWith(CLIENT_FQDN +
">"));
+ assertEquals("Unexpected target host value", TARGET_HOST + ":" +
TARGET_PORT,
+ request.getFirstHeader(AS2Header.TARGET_HOST).getValue());
+ assertEquals("Unexpected user agent value", USER_AGENT,
+ request.getFirstHeader(AS2Header.USER_AGENT).getValue());
+ assertNotNull("Date value missing",
request.getFirstHeader(AS2Header.DATE));
+ assertNotNull("Content length value missing",
request.getFirstHeader(AS2Header.CONTENT_LENGTH));
+ assertTrue("Unexpected content type for message",
+
request.getFirstHeader(AS2Header.CONTENT_TYPE).getValue().startsWith(AS2MimeType.APPLICATION_PKCS7_MIME));
+
+ assertTrue("Request does not contain entity", request instanceof
BasicHttpEntityEnclosingRequest);
+ HttpEntity entity = ((BasicHttpEntityEnclosingRequest)
request).getEntity();
+ assertNotNull("Request does not contain entity", entity);
+ assertTrue("Unexpected request entity type", entity instanceof
ApplicationPkcs7MimeCompressedDataEntity);
+ ApplicationPkcs7MimeCompressedDataEntity compressedDataEntity =
(ApplicationPkcs7MimeCompressedDataEntity) entity;
+ assertTrue("Entity not set as main body of request",
compressedDataEntity.isMainBody());
+
+ // Validated compessed part.
+ MimeEntity compressedEntity =
compressedDataEntity.getCompressedEntity(new ZlibExpanderProvider());
+ assertTrue("Enveloped mime part incorrect type ", compressedEntity
instanceof ApplicationEDIFACTEntity);
+ ApplicationEDIFACTEntity ediEntity = (ApplicationEDIFACTEntity)
compressedEntity;
+ assertTrue("Unexpected content type for compressed entity",
+
ediEntity.getContentType().getValue().startsWith(AS2MediaType.APPLICATION_EDIFACT));
+ assertFalse("Compressed entity set as main body of request",
ediEntity.isMainBody());
+
+ }
+
+
+ @Test
+ public void compressedAndSignedMessageTest() throws Exception {
+ AS2ClientConnection clientConnection = new
AS2ClientConnection(AS2_VERSION, USER_AGENT, CLIENT_FQDN,
+ TARGET_HOST, TARGET_PORT);
+ AS2ClientManager clientManager = new
AS2ClientManager(clientConnection);
+
+ LOG.info("Key Algoritm: " + signingKP.getPrivate().getAlgorithm());
+
+ HttpCoreContext httpContext = clientManager.send(EDI_MESSAGE,
REQUEST_URI, SUBJECT, FROM, AS2_NAME, AS2_NAME,
+ AS2MessageStructure.SIGNED_COMPRESSED,
+ ContentType.create(AS2MediaType.APPLICATION_EDIFACT,
AS2Charset.US_ASCII), null,
+ AS2SignatureAlgorithm.SHA256WITHRSA, certList.toArray(new
Certificate[0]), signingKP.getPrivate(), AS2CompressionAlgorithm.ZLIB,
+ DISPOSITION_NOTIFICATION_TO, SIGNED_RECEIPT_MIC_ALGORITHMS,
null,
+ null, null);
+
+ HttpRequest request = httpContext.getRequest();
+ assertEquals("Unexpected method value", METHOD,
request.getRequestLine().getMethod());
+ assertEquals("Unexpected request URI value", REQUEST_URI,
request.getRequestLine().getUri());
+ assertEquals("Unexpected HTTP version value", HttpVersion.HTTP_1_1,
+ request.getRequestLine().getProtocolVersion());
+
+ assertEquals("Unexpected subject value", SUBJECT,
request.getFirstHeader(AS2Header.SUBJECT).getValue());
+ assertEquals("Unexpected from value", FROM,
request.getFirstHeader(AS2Header.FROM).getValue());
+ assertEquals("Unexpected AS2 version value", AS2_VERSION,
+ request.getFirstHeader(AS2Header.AS2_VERSION).getValue());
+ assertEquals("Unexpected AS2 from value", AS2_NAME,
request.getFirstHeader(AS2Header.AS2_FROM).getValue());
+ assertEquals("Unexpected AS2 to value", AS2_NAME,
request.getFirstHeader(AS2Header.AS2_TO).getValue());
+ assertTrue("Unexpected message id value",
+
request.getFirstHeader(AS2Header.MESSAGE_ID).getValue().endsWith(CLIENT_FQDN +
">"));
+ assertEquals("Unexpected target host value", TARGET_HOST + ":" +
TARGET_PORT,
+ request.getFirstHeader(AS2Header.TARGET_HOST).getValue());
+ assertEquals("Unexpected user agent value", USER_AGENT,
+ request.getFirstHeader(AS2Header.USER_AGENT).getValue());
+ assertNotNull("Date value missing",
request.getFirstHeader(AS2Header.DATE));
+ assertNotNull("Content length value missing",
request.getFirstHeader(AS2Header.CONTENT_LENGTH));
+ assertTrue("Unexpected content type for message",
+
request.getFirstHeader(AS2Header.CONTENT_TYPE).getValue().startsWith(AS2MimeType.APPLICATION_PKCS7_MIME));
+
+ assertTrue("Request does not contain entity", request instanceof
BasicHttpEntityEnclosingRequest);
+ HttpEntity entity = ((BasicHttpEntityEnclosingRequest)
request).getEntity();
+ assertNotNull("Request does not contain entity", entity);
+ assertTrue("Unexpected request entity type", entity instanceof
ApplicationPkcs7MimeCompressedDataEntity);
+ ApplicationPkcs7MimeCompressedDataEntity compressedDataEntity =
(ApplicationPkcs7MimeCompressedDataEntity) entity;
+ assertTrue("Entity not set as main body of request",
compressedDataEntity.isMainBody());
+
+ // Validated compressed part.
+ MimeEntity compressedEntity =
compressedDataEntity.getCompressedEntity(new ZlibExpanderProvider());
+ assertTrue("Enveloped mime part incorrect type ", compressedEntity
instanceof MultipartSignedEntity);
+ MultipartSignedEntity multipartSignedEntity = (MultipartSignedEntity)
compressedEntity;
+ assertTrue("Unexpected content type for compressed entity",
+
multipartSignedEntity.getContentType().getValue().startsWith(AS2MediaType.MULTIPART_SIGNED));
+ assertFalse("Multipart signed entity set as main body of request",
multipartSignedEntity.isMainBody());
+ assertTrue("Multipart signed entity contains invalid number of mime
parts",
+ multipartSignedEntity.getPartCount() == 2);
+
+ // Validated first mime part.
+ assertTrue("First mime part incorrect type ",
multipartSignedEntity.getPart(0) instanceof ApplicationEDIFACTEntity);
+ ApplicationEDIFACTEntity ediEntity = (ApplicationEDIFACTEntity)
multipartSignedEntity.getPart(0);
+ assertTrue("Unexpected content type for first mime part",
+
ediEntity.getContentType().getValue().startsWith(AS2MediaType.APPLICATION_EDIFACT));
+ assertFalse("First mime type set as main body of request",
ediEntity.isMainBody());
+
+ // Validate second mime part.
+ assertTrue("Second mime part incorrect type ",
+ multipartSignedEntity.getPart(1) instanceof
ApplicationPkcs7SignatureEntity);
+ ApplicationPkcs7SignatureEntity signatureEntity =
(ApplicationPkcs7SignatureEntity) multipartSignedEntity.getPart(1);
+ assertTrue("Unexpected content type for second mime part",
+
signatureEntity.getContentType().getValue().startsWith(AS2MediaType.APPLICATION_PKCS7_SIGNATURE));
+ assertFalse("First mime type set as main body of request",
signatureEntity.isMainBody());
+ }
+
+ @Test
+ public void envelopedAndCompressedMessageTest() throws Exception {
+ AS2ClientConnection clientConnection = new
AS2ClientConnection(AS2_VERSION, USER_AGENT, CLIENT_FQDN,
+ TARGET_HOST, TARGET_PORT);
+ AS2ClientManager clientManager = new
AS2ClientManager(clientConnection);
+
+ LOG.info("Key Algoritm: " + signingKP.getPrivate().getAlgorithm());
+
+ HttpCoreContext httpContext = clientManager.send(EDI_MESSAGE,
REQUEST_URI, SUBJECT, FROM, AS2_NAME, AS2_NAME,
+ AS2MessageStructure.ENCRYPTED_COMPRESSED,
+ ContentType.create(AS2MediaType.APPLICATION_EDIFACT,
AS2Charset.US_ASCII), null,
+ null, null, null, AS2CompressionAlgorithm.ZLIB,
+ DISPOSITION_NOTIFICATION_TO, SIGNED_RECEIPT_MIC_ALGORITHMS,
AS2EncryptionAlgorithm.AES128_CBC,
+ certList.toArray(new Certificate[0]), signingKP.getPrivate());
+
+ HttpRequest request = httpContext.getRequest();
+ assertEquals("Unexpected method value", METHOD,
request.getRequestLine().getMethod());
+ assertEquals("Unexpected request URI value", REQUEST_URI,
request.getRequestLine().getUri());
+ assertEquals("Unexpected HTTP version value", HttpVersion.HTTP_1_1,
+ request.getRequestLine().getProtocolVersion());
+
+ assertEquals("Unexpected subject value", SUBJECT,
request.getFirstHeader(AS2Header.SUBJECT).getValue());
+ assertEquals("Unexpected from value", FROM,
request.getFirstHeader(AS2Header.FROM).getValue());
+ assertEquals("Unexpected AS2 version value", AS2_VERSION,
+ request.getFirstHeader(AS2Header.AS2_VERSION).getValue());
+ assertEquals("Unexpected AS2 from value", AS2_NAME,
request.getFirstHeader(AS2Header.AS2_FROM).getValue());
+ assertEquals("Unexpected AS2 to value", AS2_NAME,
request.getFirstHeader(AS2Header.AS2_TO).getValue());
+ assertTrue("Unexpected message id value",
+
request.getFirstHeader(AS2Header.MESSAGE_ID).getValue().endsWith(CLIENT_FQDN +
">"));
+ assertEquals("Unexpected target host value", TARGET_HOST + ":" +
TARGET_PORT,
+ request.getFirstHeader(AS2Header.TARGET_HOST).getValue());
+ assertEquals("Unexpected user agent value", USER_AGENT,
+ request.getFirstHeader(AS2Header.USER_AGENT).getValue());
+ assertNotNull("Date value missing",
request.getFirstHeader(AS2Header.DATE));
+ assertNotNull("Content length value missing",
request.getFirstHeader(AS2Header.CONTENT_LENGTH));
+ assertTrue("Unexpected content type for message",
+
request.getFirstHeader(AS2Header.CONTENT_TYPE).getValue().startsWith(AS2MimeType.APPLICATION_PKCS7_MIME));
+
+ assertTrue("Request does not contain entity", request instanceof
BasicHttpEntityEnclosingRequest);
+ HttpEntity entity = ((BasicHttpEntityEnclosingRequest)
request).getEntity();
+ assertNotNull("Request does not contain entity", entity);
+ assertTrue("Unexpected request entity type", entity instanceof
ApplicationPkcs7MimeEnvelopedDataEntity);
+ ApplicationPkcs7MimeEnvelopedDataEntity envelopedEntity =
(ApplicationPkcs7MimeEnvelopedDataEntity) entity;
+ assertTrue("Entity not set as main body of request",
envelopedEntity.isMainBody());
+
+ // Validated enveloped part.
+ MimeEntity encryptedEntity =
envelopedEntity.getEncryptedEntity(signingKP.getPrivate());
+ assertTrue("Enveloped mime part incorrect type ", encryptedEntity
instanceof ApplicationPkcs7MimeCompressedDataEntity);
+ ApplicationPkcs7MimeCompressedDataEntity compressedDataEntity =
(ApplicationPkcs7MimeCompressedDataEntity) encryptedEntity;
+ assertTrue("Unexpected content type for compressed mime part",
+
compressedDataEntity.getContentType().getValue().startsWith(AS2MimeType.APPLICATION_PKCS7_MIME));
+ assertFalse("Enveloped mime type set as main body of request",
compressedDataEntity.isMainBody());
+
+ // Validated compressed part.
+ MimeEntity compressedEntity =
compressedDataEntity.getCompressedEntity(new ZlibExpanderProvider());
+ assertTrue("Enveloped mime part incorrect type ", compressedEntity
instanceof ApplicationEDIFACTEntity);
+ ApplicationEDIFACTEntity ediEntity = (ApplicationEDIFACTEntity)
compressedEntity;
+ assertTrue("Unexpected content type for compressed entity",
+
ediEntity.getContentType().getValue().startsWith(AS2MediaType.APPLICATION_EDIFACT));
+ assertFalse("Compressed entity set as main body of request",
ediEntity.isMainBody());
+ assertEquals("Unexpected content for enveloped mime part",
EDI_MESSAGE.replaceAll("[\n\r]", ""),
+ ediEntity.getEdiMessage().replaceAll("[\n\r]", ""));
+ }
+
+
}