This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch fix/CAMEL-24159-blob
in repository https://gitbox.apache.org/repos/asf/camel.git

commit afe88bde80e6e802c6261271f96ecc996c2e9dbc
Author: Claus Ibsen <[email protected]>
AuthorDate: Fri Jul 17 19:59:17 2026 +0200

    CAMEL-24159: camel-azure-storage-blob - Fix medium-severity bugs from code 
review
    
    Co-Authored-By: Claude Opus 4.6 <[email protected]>
    Signed-off-by: Claus Ibsen <[email protected]>
---
 .../storage/blob/BlobCommonRequestOptions.java     |  5 +-
 .../azure/storage/blob/BlobComponent.java          |  4 +-
 .../blob/operations/BlobChangeFeedOperations.java  |  2 +-
 .../storage/blob/operations/BlobOperations.java    | 53 ++++++++++++++++++++--
 4 files changed, 55 insertions(+), 9 deletions(-)

diff --git 
a/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobCommonRequestOptions.java
 
b/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobCommonRequestOptions.java
index 84de6c6dc55a..7aefa22a98c7 100644
--- 
a/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobCommonRequestOptions.java
+++ 
b/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobCommonRequestOptions.java
@@ -54,9 +54,8 @@ public class BlobCommonRequestOptions {
         return accessTier;
     }
 
-    @SuppressWarnings("unchecked")
-    public <T extends BlobRequestConditions> T getBlobRequestConditions() {
-        return blobRequestConditions == null ? null : (T) 
blobRequestConditions;
+    public BlobRequestConditions getBlobRequestConditions() {
+        return blobRequestConditions;
     }
 
     public byte[] getContentMD5() {
diff --git 
a/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobComponent.java
 
b/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobComponent.java
index 2b29aebbdb47..56fc0793978d 100644
--- 
a/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobComponent.java
+++ 
b/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/BlobComponent.java
@@ -91,7 +91,9 @@ public class BlobComponent extends HealthCheckComponent {
                     configuration.setCredentialType(AZURE_IDENTITY);
                 }
             } else {
-                
configuration.setCredentialType(CredentialType.SHARED_KEY_CREDENTIAL);
+                if (configuration.getCredentialType() == null) {
+                    
configuration.setCredentialType(CredentialType.SHARED_KEY_CREDENTIAL);
+                }
             }
         }
     }
diff --git 
a/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/operations/BlobChangeFeedOperations.java
 
b/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/operations/BlobChangeFeedOperations.java
index 5930ae809e76..7ebd341c262b 100644
--- 
a/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/operations/BlobChangeFeedOperations.java
+++ 
b/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/operations/BlobChangeFeedOperations.java
@@ -43,7 +43,7 @@ public class BlobChangeFeedOperations {
         final OffsetDateTime endTime = 
configurationOptionsProxy.getChangeFeedEndTime(exchange);
         final Context context = 
configurationOptionsProxy.getChangeFeedContext(exchange);
 
-        if (ObjectHelper.isEmpty(startTime) || ObjectHelper.isEmpty(endTime)) {
+        if (ObjectHelper.isEmpty(startTime) && ObjectHelper.isEmpty(endTime)) {
             return BlobOperationResponse.create(getEvents());
         } else {
             return BlobOperationResponse.create(getEvents(startTime, endTime, 
context));
diff --git 
a/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/operations/BlobOperations.java
 
b/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/operations/BlobOperations.java
index bf0ff88dfb95..6868f10645c5 100644
--- 
a/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/operations/BlobOperations.java
+++ 
b/components/camel-azure/camel-azure-storage-blob/src/main/java/org/apache/camel/component/azure/storage/blob/operations/BlobOperations.java
@@ -34,6 +34,7 @@ import com.azure.core.http.rest.ResponseBase;
 import com.azure.storage.blob.BlobClient;
 import com.azure.storage.blob.models.AccessTier;
 import com.azure.storage.blob.models.AppendBlobItem;
+import com.azure.storage.blob.models.AppendBlobRequestConditions;
 import com.azure.storage.blob.models.BlobDownloadHeaders;
 import com.azure.storage.blob.models.BlobHttpHeaders;
 import com.azure.storage.blob.models.BlobImmutabilityPolicy;
@@ -49,6 +50,7 @@ import com.azure.storage.blob.models.BlockListType;
 import com.azure.storage.blob.models.DeleteSnapshotsOptionType;
 import com.azure.storage.blob.models.DownloadRetryOptions;
 import com.azure.storage.blob.models.PageBlobItem;
+import com.azure.storage.blob.models.PageBlobRequestConditions;
 import com.azure.storage.blob.models.PageRange;
 import com.azure.storage.blob.models.PageRangeItem;
 import com.azure.storage.blob.models.ParallelTransferOptions;
@@ -155,6 +157,11 @@ public class BlobOperations {
         }
 
         final File fileToDownload = 
AzureFileNameHelper.resolveWithinDirectory(fileDir, client.getBlobName());
+        File parentDir = fileToDownload.getParentFile();
+        if (parentDir != null) {
+            parentDir.mkdirs();
+        }
+        fileToDownload.delete();
         final BlobCommonRequestOptions commonRequestOptions = 
getCommonRequestOptions(exchange);
         final BlobRange blobRange = configurationProxy.getBlobRange(exchange);
         final ParallelTransferOptions parallelTransferOptions = 
configurationProxy.getParallelTransferOptions(exchange);
@@ -449,7 +456,7 @@ public class BlobOperations {
             throw new IllegalArgumentException("Source Account Name must be 
specified for copyBlob Operation");
         }
         String sourceContainerName = 
exchange.getMessage().getHeader(BlobConstants.SOURCE_BLOB_CONTAINER_NAME, 
String.class);
-        if (ObjectHelper.isEmpty(sourceAccountName)) {
+        if (ObjectHelper.isEmpty(sourceContainerName)) {
             throw new IllegalArgumentException("Source Container Name must be 
specified for copyBlob Operation");
         }
         final String response
@@ -476,7 +483,8 @@ public class BlobOperations {
             leaseClient = 
acquireLeaseIfConfigured(commonRequestOptions.getBlobRequestConditions(), 
exchange);
             final Response<AppendBlobItem> response
                     = client.appendBlobBlock(streamAndLength.getInputStream(), 
streamAndLength.getStreamLength(),
-                            commonRequestOptions.getContentMD5(), 
commonRequestOptions.getBlobRequestConditions(),
+                            commonRequestOptions.getContentMD5(),
+                            
toAppendBlobRequestConditions(commonRequestOptions.getBlobRequestConditions()),
                             commonRequestOptions.getTimeout());
 
             return BlobOperationResponse.createWithEmptyBody(response);
@@ -529,7 +537,8 @@ public class BlobOperations {
             leaseClient = 
acquireLeaseIfConfigured(requestOptions.getBlobRequestConditions(), exchange);
             final Response<PageBlobItem> response
                     = client.uploadPageBlob(pageRange, is, 
requestOptions.getContentMD5(),
-                            requestOptions.getBlobRequestConditions(), 
requestOptions.getTimeout());
+                            
toPageBlobRequestConditions(requestOptions.getBlobRequestConditions()),
+                            requestOptions.getTimeout());
 
             return BlobOperationResponse.createWithEmptyBody(response);
         } finally {
@@ -570,7 +579,9 @@ public class BlobOperations {
         try {
             leaseClient = 
acquireLeaseIfConfigured(requestOptions.getBlobRequestConditions(), exchange);
             final Response<PageBlobItem> response
-                    = client.clearPagesBlob(pageRange, 
requestOptions.getBlobRequestConditions(), requestOptions.getTimeout());
+                    = client.clearPagesBlob(pageRange,
+                            
toPageBlobRequestConditions(requestOptions.getBlobRequestConditions()),
+                            requestOptions.getTimeout());
 
             return BlobOperationResponse.createWithEmptyBody(response);
         } finally {
@@ -846,4 +857,38 @@ public class BlobOperations {
             leaseClient.releaseLease();
         }
     }
+
+    private static AppendBlobRequestConditions 
toAppendBlobRequestConditions(BlobRequestConditions conditions) {
+        if (conditions == null) {
+            return null;
+        }
+        if (conditions instanceof AppendBlobRequestConditions abc) {
+            return abc;
+        }
+        AppendBlobRequestConditions result = new AppendBlobRequestConditions();
+        result.setLeaseId(conditions.getLeaseId());
+        result.setIfMatch(conditions.getIfMatch());
+        result.setIfNoneMatch(conditions.getIfNoneMatch());
+        result.setIfModifiedSince(conditions.getIfModifiedSince());
+        result.setIfUnmodifiedSince(conditions.getIfUnmodifiedSince());
+        result.setTagsConditions(conditions.getTagsConditions());
+        return result;
+    }
+
+    private static PageBlobRequestConditions 
toPageBlobRequestConditions(BlobRequestConditions conditions) {
+        if (conditions == null) {
+            return null;
+        }
+        if (conditions instanceof PageBlobRequestConditions pbc) {
+            return pbc;
+        }
+        PageBlobRequestConditions result = new PageBlobRequestConditions();
+        result.setLeaseId(conditions.getLeaseId());
+        result.setIfMatch(conditions.getIfMatch());
+        result.setIfNoneMatch(conditions.getIfNoneMatch());
+        result.setIfModifiedSince(conditions.getIfModifiedSince());
+        result.setIfUnmodifiedSince(conditions.getIfUnmodifiedSince());
+        result.setTagsConditions(conditions.getTagsConditions());
+        return result;
+    }
 }

Reply via email to