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 {

Reply via email to