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; + } }
