This is an automated email from the ASF dual-hosted git repository.
orpiske 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 404c6b4 (chores) camel-as2-api: improve NPE handling (#6003)
404c6b4 is described below
commit 404c6b46a62e6a56901d2411889deebed263d3b9
Author: Otavio Rodolfo Piske <[email protected]>
AuthorDate: Sat Aug 28 10:47:34 2021 +0200
(chores) camel-as2-api: improve NPE handling (#6003)
Improve NPE handling and information in some unlikely, but still possible,
situations
---
.../component/as2/api/entity/EntityParser.java | 2 +
.../component/as2/api/util/HttpMessageUtils.java | 70 +++++++++++++++-------
2 files changed, 52 insertions(+), 20 deletions(-)
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 a756ca6..273e0c8 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
@@ -26,6 +26,7 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
+import java.util.Objects;
import org.apache.camel.component.as2.api.AS2Charset;
import org.apache.camel.component.as2.api.AS2Header;
@@ -214,6 +215,7 @@ public final class EntityParser {
}
MimeEntity entity = parseEntityBody(inbuffer, null,
entityContentType, entityContentTransferEncoding, "", headers);
+ Objects.requireNonNull(entity, "Trying to parse entity body
resulted in a null MimeEntity");
entity.removeAllHeaders();
entity.setHeaders(headers);
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 09f2480..a4999f9 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
@@ -17,6 +17,7 @@
package org.apache.camel.component.as2.api.util;
import java.security.PrivateKey;
+import java.util.Objects;
import org.apache.camel.component.as2.api.AS2Header;
import org.apache.camel.component.as2.api.AS2MimeType;
@@ -143,34 +144,17 @@ public final class HttpMessageUtils {
break;
}
case AS2MimeType.MULTIPART_SIGNED: {
- MultipartSignedEntity multipartSignedEntity =
getEntity(message,
- MultipartSignedEntity.class);
- MimeEntity mimeEntity =
multipartSignedEntity.getSignedDataEntity();
- if (mimeEntity instanceof ApplicationEDIEntity) {
- ediEntity = (ApplicationEDIEntity) mimeEntity;
- } else {
- throw new HttpException(
- "Failed to extract EDI payload: invalid content
type '" + mimeEntity.getContentTypeValue()
- + "' for AS2 compressed and signed
message");
- }
+ ediEntity = extractMultipartSigned(message);
break;
}
case AS2MimeType.APPLICATION_PKCS7_MIME: {
switch (contentType.getParameter("smime-type")) {
case "compressed-data": {
- ApplicationPkcs7MimeCompressedDataEntity
compressedDataEntity
- = getEntity(message,
ApplicationPkcs7MimeCompressedDataEntity.class);
- ediEntity =
extractEdiPayloadFromCompressedEntity(compressedDataEntity);
+ ediEntity = extractCompressedData(message);
break;
}
case "enveloped-data": {
- if (privateKey == null) {
- throw new HttpException(
- "Failed to extract EDI payload: private
key can not be null for AS2 enveloped message");
- }
- ApplicationPkcs7MimeEnvelopedDataEntity
envelopedDataEntity
- = getEntity(message,
ApplicationPkcs7MimeEnvelopedDataEntity.class);
- ediEntity =
extractEdiPayloadFromEnvelopedEntity(envelopedDataEntity, privateKey);
+ ediEntity = extractEnvelopedData(message, privateKey);
break;
}
default:
@@ -190,6 +174,52 @@ public final class HttpMessageUtils {
}
+ private static ApplicationEDIEntity extractEnvelopedData(HttpMessage
message, PrivateKey privateKey) throws HttpException {
+ ApplicationEDIEntity ediEntity;
+ if (privateKey == null) {
+ throw new HttpException(
+ "Failed to extract EDI payload: private key can not be
null for AS2 enveloped message");
+ }
+ ApplicationPkcs7MimeEnvelopedDataEntity envelopedDataEntity
+ = getEntity(message,
ApplicationPkcs7MimeEnvelopedDataEntity.class);
+
+ Objects.requireNonNull(envelopedDataEntity,
+ "Failed to extract EDI payload: the enveloped data entity is
null");
+ ediEntity = extractEdiPayloadFromEnvelopedEntity(envelopedDataEntity,
privateKey);
+ return ediEntity;
+ }
+
+ private static ApplicationEDIEntity extractCompressedData(HttpMessage
message) throws HttpException {
+ ApplicationEDIEntity ediEntity;
+ ApplicationPkcs7MimeCompressedDataEntity compressedDataEntity
+ = getEntity(message,
ApplicationPkcs7MimeCompressedDataEntity.class);
+
+ Objects.requireNonNull(compressedDataEntity,
+ "Failed to extract the EDI payload: the compressed data entity
is null");
+
+ ediEntity =
extractEdiPayloadFromCompressedEntity(compressedDataEntity);
+ return ediEntity;
+ }
+
+ private static ApplicationEDIEntity extractMultipartSigned(HttpMessage
message) throws HttpException {
+ ApplicationEDIEntity ediEntity;
+ MultipartSignedEntity multipartSignedEntity = getEntity(message,
+ MultipartSignedEntity.class);
+
+ Objects.requireNonNull(multipartSignedEntity,
+ "Failed to extract EDI payload: the multipart signed entity is
null");
+
+ MimeEntity mimeEntity = multipartSignedEntity.getSignedDataEntity();
+ if (mimeEntity instanceof ApplicationEDIEntity) {
+ ediEntity = (ApplicationEDIEntity) mimeEntity;
+ } else {
+ throw new HttpException(
+ "Failed to extract EDI payload: invalid content type '" +
mimeEntity.getContentTypeValue()
+ + "' for AS2 compressed and signed
message");
+ }
+ return ediEntity;
+ }
+
private static ApplicationEDIEntity extractEdiPayloadFromEnvelopedEntity(
ApplicationPkcs7MimeEnvelopedDataEntity envelopedDataEntity,
PrivateKey privateKey)
throws HttpException {