This is an automated email from the ASF dual-hosted git repository.
oscerd pushed a commit to branch camel-4.14.x
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/camel-4.14.x by this push:
new 9df130241dad CAMEL-24251: camel-aws2 - guard nullable
awsErrorDetails() in producer health checks (#25092)
9df130241dad is described below
commit 9df130241dad330861b53a8ed365e1ffb0bfff47
Author: Andrea Cosentino <[email protected]>
AuthorDate: Fri Jul 24 15:39:24 2026 +0200
CAMEL-24251: camel-aws2 - guard nullable awsErrorDetails() in producer
health checks (#25092)
Every AWS producer health check catches AwsServiceException and records the
HTTP
status code and the AWS error code. The status code was guarded for null but
awsErrorDetails() was dereferenced directly:
if (ObjectHelper.isNotEmpty(e.statusCode())) { // guarded
builder.detail(SERVICE_STATUS_CODE, e.statusCode());
}
if (ObjectHelper.isNotEmpty(e.awsErrorDetails().errorCode())) { //
NPE if details are null
builder.detail(SERVICE_ERROR_CODE, e.awsErrorDetails().errorCode());
}
AwsServiceException.awsErrorDetails() is nullable. When such an exception
reaches
the block the health check throws
NullPointerException: Cannot invoke "AwsErrorDetails.errorCode()"
because the
return value of "AwsServiceException.awsErrorDetails()" is null
instead of reporting the endpoint DOWN with the message it had already
prepared,
turning a genuine "service unreachable" signal into a health-check failure.
Guarded awsErrorDetails() consistently with the neighbouring statusCode()
check
across all 21 producer health checks. Textract additionally dereferenced it
in an
equals() test that classifies certain errors as healthy, so it now reads the
error code once into a local.
Added Athena2ProducerHealthCheckErrorDetailsTest covering both the
null-details
case (DOWN, no error-code detail) and the populated case (error code still
reported).
(cherry picked from commit ae90832bbd056a334e091ea07bd60bc7f90963bc)
Signed-off-by: Andrea Cosentino <[email protected]>
Co-authored-by: Claude Opus 4.8 <[email protected]>
---
.../aws/config/AWSConfigProducerHealthCheck.java | 2 +-
.../SecretsManagerProducerHealthCheck.java | 2 +-
components/camel-aws/camel-aws2-athena/pom.xml | 5 ++
.../aws2/athena/Athena2ProducerHealthCheck.java | 2 +-
...Athena2ProducerHealthCheckErrorDetailsTest.java | 77 ++++++++++++++++++++++
.../component/aws2/cw/Cw2ProducerHealthCheck.java | 2 +-
.../component/aws2/ddb/Db2ProducerHealthCheck.java | 2 +-
.../aws2/ec2/AWS2EC2ProducerHealthCheck.java | 2 +-
.../aws2/ecs/ECS2ProducerHealthCheck.java | 2 +-
.../aws2/eks/EKS2ProducerHealthCheck.java | 2 +-
.../EventbridgeProducerHealthCheck.java | 2 +-
.../aws2/lambda/Lambda2ProducerHealthCheck.java | 2 +-
.../component/aws2/mq/MQ2ProducerHealthCheck.java | 2 +-
.../StepFunctions2ProducerHealthCheck.java | 2 +-
.../query/Timestream2QueryProducerHealthCheck.java | 2 +-
.../write/Timestream2WriteProducerHealthCheck.java | 2 +-
.../translate/Translate2ProducerHealthCheck.java | 2 +-
17 files changed, 97 insertions(+), 15 deletions(-)
diff --git
a/components/camel-aws/camel-aws-config/src/main/java/org/apache/camel/component/aws/config/AWSConfigProducerHealthCheck.java
b/components/camel-aws/camel-aws-config/src/main/java/org/apache/camel/component/aws/config/AWSConfigProducerHealthCheck.java
index 8b33b067d21b..f881e1644773 100644
---
a/components/camel-aws/camel-aws-config/src/main/java/org/apache/camel/component/aws/config/AWSConfigProducerHealthCheck.java
+++
b/components/camel-aws/camel-aws-config/src/main/java/org/apache/camel/component/aws/config/AWSConfigProducerHealthCheck.java
@@ -55,7 +55,7 @@ public class AWSConfigProducerHealthCheck extends
AbstractHealthCheck {
if (ObjectHelper.isNotEmpty(e.statusCode())) {
builder.detail(SERVICE_STATUS_CODE, e.statusCode());
}
- if (ObjectHelper.isNotEmpty(e.awsErrorDetails().errorCode())) {
+ if (ObjectHelper.isNotEmpty(e.awsErrorDetails()) &&
ObjectHelper.isNotEmpty(e.awsErrorDetails().errorCode())) {
builder.detail(SERVICE_ERROR_CODE,
e.awsErrorDetails().errorCode());
}
builder.down();
diff --git
a/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsManagerProducerHealthCheck.java
b/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsManagerProducerHealthCheck.java
index 913d78d45d32..5c45de40402c 100644
---
a/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsManagerProducerHealthCheck.java
+++
b/components/camel-aws/camel-aws-secrets-manager/src/main/java/org/apache/camel/component/aws/secretsmanager/SecretsManagerProducerHealthCheck.java
@@ -55,7 +55,7 @@ public class SecretsManagerProducerHealthCheck extends
AbstractHealthCheck {
if (ObjectHelper.isNotEmpty(e.statusCode())) {
builder.detail(SERVICE_STATUS_CODE, e.statusCode());
}
- if (ObjectHelper.isNotEmpty(e.awsErrorDetails().errorCode())) {
+ if (ObjectHelper.isNotEmpty(e.awsErrorDetails()) &&
ObjectHelper.isNotEmpty(e.awsErrorDetails().errorCode())) {
builder.detail(SERVICE_ERROR_CODE,
e.awsErrorDetails().errorCode());
}
builder.down();
diff --git a/components/camel-aws/camel-aws2-athena/pom.xml
b/components/camel-aws/camel-aws2-athena/pom.xml
index 7dd4317270fd..3a40a025fa4a 100644
--- a/components/camel-aws/camel-aws2-athena/pom.xml
+++ b/components/camel-aws/camel-aws2-athena/pom.xml
@@ -86,5 +86,10 @@
<type>test-jar</type>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.assertj</groupId>
+ <artifactId>assertj-core</artifactId>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
diff --git
a/components/camel-aws/camel-aws2-athena/src/main/java/org/apache/camel/component/aws2/athena/Athena2ProducerHealthCheck.java
b/components/camel-aws/camel-aws2-athena/src/main/java/org/apache/camel/component/aws2/athena/Athena2ProducerHealthCheck.java
index 95796de78e78..400808d8cceb 100644
---
a/components/camel-aws/camel-aws2-athena/src/main/java/org/apache/camel/component/aws2/athena/Athena2ProducerHealthCheck.java
+++
b/components/camel-aws/camel-aws2-athena/src/main/java/org/apache/camel/component/aws2/athena/Athena2ProducerHealthCheck.java
@@ -55,7 +55,7 @@ public class Athena2ProducerHealthCheck extends
AbstractHealthCheck {
if (ObjectHelper.isNotEmpty(e.statusCode())) {
builder.detail(SERVICE_STATUS_CODE, e.statusCode());
}
- if (ObjectHelper.isNotEmpty(e.awsErrorDetails().errorCode())) {
+ if (ObjectHelper.isNotEmpty(e.awsErrorDetails()) &&
ObjectHelper.isNotEmpty(e.awsErrorDetails().errorCode())) {
builder.detail(SERVICE_ERROR_CODE,
e.awsErrorDetails().errorCode());
}
builder.down();
diff --git
a/components/camel-aws/camel-aws2-athena/src/test/java/org/apache/camel/component/aws2/athena/Athena2ProducerHealthCheckErrorDetailsTest.java
b/components/camel-aws/camel-aws2-athena/src/test/java/org/apache/camel/component/aws2/athena/Athena2ProducerHealthCheckErrorDetailsTest.java
new file mode 100644
index 000000000000..b6aa71ca81d5
--- /dev/null
+++
b/components/camel-aws/camel-aws2-athena/src/test/java/org/apache/camel/component/aws2/athena/Athena2ProducerHealthCheckErrorDetailsTest.java
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.aws2.athena;
+
+import org.apache.camel.health.HealthCheck;
+import org.apache.camel.impl.health.AbstractHealthCheck;
+import org.junit.jupiter.api.Test;
+import software.amazon.awssdk.awscore.exception.AwsErrorDetails;
+import software.amazon.awssdk.awscore.exception.AwsServiceException;
+import software.amazon.awssdk.services.athena.AthenaClient;
+import software.amazon.awssdk.services.athena.model.ListQueryExecutionsRequest;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+/**
+ * {@link AwsServiceException#awsErrorDetails()} is nullable, so the health
check must not dereference it blindly when
+ * recording the AWS error code.
+ */
+class Athena2ProducerHealthCheckErrorDetailsTest {
+
+ @Test
+ void reportsDownWithoutFailingWhenTheExceptionCarriesNoErrorDetails() {
+ HealthCheck.Result result = callHealthCheckThrowing(
+
AwsServiceException.builder().message("boom").statusCode(500).build());
+
+ assertThat(result.getState()).isEqualTo(HealthCheck.State.DOWN);
+ assertThat(result.getMessage()).contains("boom");
+
assertThat(result.getDetails()).containsEntry(AbstractHealthCheck.SERVICE_STATUS_CODE,
500);
+ // there were no error details to report, so the detail is simply
absent
+
assertThat(result.getDetails()).doesNotContainKey(AbstractHealthCheck.SERVICE_ERROR_CODE);
+ }
+
+ @Test
+ void stillReportsTheErrorCodeWhenTheExceptionCarriesErrorDetails() {
+ HealthCheck.Result result = callHealthCheckThrowing(
+ AwsServiceException.builder()
+ .message("boom")
+ .statusCode(400)
+ .awsErrorDetails(AwsErrorDetails.builder()
+ .errorCode("InvalidRequestException")
+ .build())
+ .build());
+
+ assertThat(result.getState()).isEqualTo(HealthCheck.State.DOWN);
+ assertThat(result.getDetails())
+ .containsEntry(AbstractHealthCheck.SERVICE_ERROR_CODE,
"InvalidRequestException");
+ }
+
+ private HealthCheck.Result callHealthCheckThrowing(AwsServiceException
exception) {
+ AthenaClient client = mock(AthenaClient.class);
+
when(client.listQueryExecutions(any(ListQueryExecutionsRequest.class))).thenThrow(exception);
+
+ Athena2Endpoint endpoint = mock(Athena2Endpoint.class);
+ // a null region skips the region check and takes the health check
straight to the client call
+ when(endpoint.getConfiguration()).thenReturn(new
Athena2Configuration());
+ when(endpoint.getAthenaClient()).thenReturn(client);
+
+ return new Athena2ProducerHealthCheck(endpoint, "test").call();
+ }
+}
diff --git
a/components/camel-aws/camel-aws2-cw/src/main/java/org/apache/camel/component/aws2/cw/Cw2ProducerHealthCheck.java
b/components/camel-aws/camel-aws2-cw/src/main/java/org/apache/camel/component/aws2/cw/Cw2ProducerHealthCheck.java
index ddda2736370b..01c75ad8231c 100644
---
a/components/camel-aws/camel-aws2-cw/src/main/java/org/apache/camel/component/aws2/cw/Cw2ProducerHealthCheck.java
+++
b/components/camel-aws/camel-aws2-cw/src/main/java/org/apache/camel/component/aws2/cw/Cw2ProducerHealthCheck.java
@@ -55,7 +55,7 @@ public class Cw2ProducerHealthCheck extends
AbstractHealthCheck {
if (ObjectHelper.isNotEmpty(e.statusCode())) {
builder.detail(SERVICE_STATUS_CODE, e.statusCode());
}
- if (ObjectHelper.isNotEmpty(e.awsErrorDetails().errorCode())) {
+ if (ObjectHelper.isNotEmpty(e.awsErrorDetails()) &&
ObjectHelper.isNotEmpty(e.awsErrorDetails().errorCode())) {
builder.detail(SERVICE_ERROR_CODE,
e.awsErrorDetails().errorCode());
}
builder.down();
diff --git
a/components/camel-aws/camel-aws2-ddb/src/main/java/org/apache/camel/component/aws2/ddb/Db2ProducerHealthCheck.java
b/components/camel-aws/camel-aws2-ddb/src/main/java/org/apache/camel/component/aws2/ddb/Db2ProducerHealthCheck.java
index d2b353044ed4..718e30b45736 100644
---
a/components/camel-aws/camel-aws2-ddb/src/main/java/org/apache/camel/component/aws2/ddb/Db2ProducerHealthCheck.java
+++
b/components/camel-aws/camel-aws2-ddb/src/main/java/org/apache/camel/component/aws2/ddb/Db2ProducerHealthCheck.java
@@ -55,7 +55,7 @@ public class Db2ProducerHealthCheck extends
AbstractHealthCheck {
if (ObjectHelper.isNotEmpty(e.statusCode())) {
builder.detail(SERVICE_STATUS_CODE, e.statusCode());
}
- if (ObjectHelper.isNotEmpty(e.awsErrorDetails().errorCode())) {
+ if (ObjectHelper.isNotEmpty(e.awsErrorDetails()) &&
ObjectHelper.isNotEmpty(e.awsErrorDetails().errorCode())) {
builder.detail(SERVICE_ERROR_CODE,
e.awsErrorDetails().errorCode());
}
builder.down();
diff --git
a/components/camel-aws/camel-aws2-ec2/src/main/java/org/apache/camel/component/aws2/ec2/AWS2EC2ProducerHealthCheck.java
b/components/camel-aws/camel-aws2-ec2/src/main/java/org/apache/camel/component/aws2/ec2/AWS2EC2ProducerHealthCheck.java
index 2fd3e1348aa6..bf350fe61fca 100644
---
a/components/camel-aws/camel-aws2-ec2/src/main/java/org/apache/camel/component/aws2/ec2/AWS2EC2ProducerHealthCheck.java
+++
b/components/camel-aws/camel-aws2-ec2/src/main/java/org/apache/camel/component/aws2/ec2/AWS2EC2ProducerHealthCheck.java
@@ -54,7 +54,7 @@ public class AWS2EC2ProducerHealthCheck extends
AbstractHealthCheck {
if (ObjectHelper.isNotEmpty(e.statusCode())) {
builder.detail(SERVICE_STATUS_CODE, e.statusCode());
}
- if (ObjectHelper.isNotEmpty(e.awsErrorDetails().errorCode())) {
+ if (ObjectHelper.isNotEmpty(e.awsErrorDetails()) &&
ObjectHelper.isNotEmpty(e.awsErrorDetails().errorCode())) {
builder.detail(SERVICE_ERROR_CODE,
e.awsErrorDetails().errorCode());
}
builder.down();
diff --git
a/components/camel-aws/camel-aws2-ecs/src/main/java/org/apache/camel/component/aws2/ecs/ECS2ProducerHealthCheck.java
b/components/camel-aws/camel-aws2-ecs/src/main/java/org/apache/camel/component/aws2/ecs/ECS2ProducerHealthCheck.java
index 49a3590bd2bd..44638fde8d26 100644
---
a/components/camel-aws/camel-aws2-ecs/src/main/java/org/apache/camel/component/aws2/ecs/ECS2ProducerHealthCheck.java
+++
b/components/camel-aws/camel-aws2-ecs/src/main/java/org/apache/camel/component/aws2/ecs/ECS2ProducerHealthCheck.java
@@ -55,7 +55,7 @@ public class ECS2ProducerHealthCheck extends
AbstractHealthCheck {
if (ObjectHelper.isNotEmpty(e.statusCode())) {
builder.detail(SERVICE_STATUS_CODE, e.statusCode());
}
- if (ObjectHelper.isNotEmpty(e.awsErrorDetails().errorCode())) {
+ if (ObjectHelper.isNotEmpty(e.awsErrorDetails()) &&
ObjectHelper.isNotEmpty(e.awsErrorDetails().errorCode())) {
builder.detail(SERVICE_ERROR_CODE,
e.awsErrorDetails().errorCode());
}
builder.down();
diff --git
a/components/camel-aws/camel-aws2-eks/src/main/java/org/apache/camel/component/aws2/eks/EKS2ProducerHealthCheck.java
b/components/camel-aws/camel-aws2-eks/src/main/java/org/apache/camel/component/aws2/eks/EKS2ProducerHealthCheck.java
index 91632c4f8030..edb52806c296 100644
---
a/components/camel-aws/camel-aws2-eks/src/main/java/org/apache/camel/component/aws2/eks/EKS2ProducerHealthCheck.java
+++
b/components/camel-aws/camel-aws2-eks/src/main/java/org/apache/camel/component/aws2/eks/EKS2ProducerHealthCheck.java
@@ -55,7 +55,7 @@ public class EKS2ProducerHealthCheck extends
AbstractHealthCheck {
if (ObjectHelper.isNotEmpty(e.statusCode())) {
builder.detail(SERVICE_STATUS_CODE, e.statusCode());
}
- if (ObjectHelper.isNotEmpty(e.awsErrorDetails().errorCode())) {
+ if (ObjectHelper.isNotEmpty(e.awsErrorDetails()) &&
ObjectHelper.isNotEmpty(e.awsErrorDetails().errorCode())) {
builder.detail(SERVICE_ERROR_CODE,
e.awsErrorDetails().errorCode());
}
builder.down();
diff --git
a/components/camel-aws/camel-aws2-eventbridge/src/main/java/org/apache/camel/component/aws2/eventbridge/EventbridgeProducerHealthCheck.java
b/components/camel-aws/camel-aws2-eventbridge/src/main/java/org/apache/camel/component/aws2/eventbridge/EventbridgeProducerHealthCheck.java
index d306f0d0b074..d8c94a85dbf2 100644
---
a/components/camel-aws/camel-aws2-eventbridge/src/main/java/org/apache/camel/component/aws2/eventbridge/EventbridgeProducerHealthCheck.java
+++
b/components/camel-aws/camel-aws2-eventbridge/src/main/java/org/apache/camel/component/aws2/eventbridge/EventbridgeProducerHealthCheck.java
@@ -55,7 +55,7 @@ public class EventbridgeProducerHealthCheck extends
AbstractHealthCheck {
if (ObjectHelper.isNotEmpty(e.statusCode())) {
builder.detail(SERVICE_STATUS_CODE, e.statusCode());
}
- if (ObjectHelper.isNotEmpty(e.awsErrorDetails().errorCode())) {
+ if (ObjectHelper.isNotEmpty(e.awsErrorDetails()) &&
ObjectHelper.isNotEmpty(e.awsErrorDetails().errorCode())) {
builder.detail(SERVICE_ERROR_CODE,
e.awsErrorDetails().errorCode());
}
builder.down();
diff --git
a/components/camel-aws/camel-aws2-lambda/src/main/java/org/apache/camel/component/aws2/lambda/Lambda2ProducerHealthCheck.java
b/components/camel-aws/camel-aws2-lambda/src/main/java/org/apache/camel/component/aws2/lambda/Lambda2ProducerHealthCheck.java
index a1e71a31a88a..93fa9977ca8d 100644
---
a/components/camel-aws/camel-aws2-lambda/src/main/java/org/apache/camel/component/aws2/lambda/Lambda2ProducerHealthCheck.java
+++
b/components/camel-aws/camel-aws2-lambda/src/main/java/org/apache/camel/component/aws2/lambda/Lambda2ProducerHealthCheck.java
@@ -55,7 +55,7 @@ public class Lambda2ProducerHealthCheck extends
AbstractHealthCheck {
if (ObjectHelper.isNotEmpty(e.statusCode())) {
builder.detail(SERVICE_STATUS_CODE, e.statusCode());
}
- if (ObjectHelper.isNotEmpty(e.awsErrorDetails().errorCode())) {
+ if (ObjectHelper.isNotEmpty(e.awsErrorDetails()) &&
ObjectHelper.isNotEmpty(e.awsErrorDetails().errorCode())) {
builder.detail(SERVICE_ERROR_CODE,
e.awsErrorDetails().errorCode());
}
builder.down();
diff --git
a/components/camel-aws/camel-aws2-mq/src/main/java/org/apache/camel/component/aws2/mq/MQ2ProducerHealthCheck.java
b/components/camel-aws/camel-aws2-mq/src/main/java/org/apache/camel/component/aws2/mq/MQ2ProducerHealthCheck.java
index 654c5d0fb530..20ea38bf146c 100644
---
a/components/camel-aws/camel-aws2-mq/src/main/java/org/apache/camel/component/aws2/mq/MQ2ProducerHealthCheck.java
+++
b/components/camel-aws/camel-aws2-mq/src/main/java/org/apache/camel/component/aws2/mq/MQ2ProducerHealthCheck.java
@@ -55,7 +55,7 @@ public class MQ2ProducerHealthCheck extends
AbstractHealthCheck {
if (ObjectHelper.isNotEmpty(e.statusCode())) {
builder.detail(SERVICE_STATUS_CODE, e.statusCode());
}
- if (ObjectHelper.isNotEmpty(e.awsErrorDetails().errorCode())) {
+ if (ObjectHelper.isNotEmpty(e.awsErrorDetails()) &&
ObjectHelper.isNotEmpty(e.awsErrorDetails().errorCode())) {
builder.detail(SERVICE_ERROR_CODE,
e.awsErrorDetails().errorCode());
}
builder.down();
diff --git
a/components/camel-aws/camel-aws2-step-functions/src/main/java/org/apache/camel/component/aws2/stepfunctions/StepFunctions2ProducerHealthCheck.java
b/components/camel-aws/camel-aws2-step-functions/src/main/java/org/apache/camel/component/aws2/stepfunctions/StepFunctions2ProducerHealthCheck.java
index e1a7114b8522..e5aefc64e4ec 100644
---
a/components/camel-aws/camel-aws2-step-functions/src/main/java/org/apache/camel/component/aws2/stepfunctions/StepFunctions2ProducerHealthCheck.java
+++
b/components/camel-aws/camel-aws2-step-functions/src/main/java/org/apache/camel/component/aws2/stepfunctions/StepFunctions2ProducerHealthCheck.java
@@ -55,7 +55,7 @@ public class StepFunctions2ProducerHealthCheck extends
AbstractHealthCheck {
if (ObjectHelper.isNotEmpty(e.statusCode())) {
builder.detail(SERVICE_STATUS_CODE, e.statusCode());
}
- if (ObjectHelper.isNotEmpty(e.awsErrorDetails().errorCode())) {
+ if (ObjectHelper.isNotEmpty(e.awsErrorDetails()) &&
ObjectHelper.isNotEmpty(e.awsErrorDetails().errorCode())) {
builder.detail(SERVICE_ERROR_CODE,
e.awsErrorDetails().errorCode());
}
builder.down();
diff --git
a/components/camel-aws/camel-aws2-timestream/src/main/java/org/apache/camel/component/aws2/timestream/query/Timestream2QueryProducerHealthCheck.java
b/components/camel-aws/camel-aws2-timestream/src/main/java/org/apache/camel/component/aws2/timestream/query/Timestream2QueryProducerHealthCheck.java
index 4654180c7fcd..2c9ab44bff8b 100644
---
a/components/camel-aws/camel-aws2-timestream/src/main/java/org/apache/camel/component/aws2/timestream/query/Timestream2QueryProducerHealthCheck.java
+++
b/components/camel-aws/camel-aws2-timestream/src/main/java/org/apache/camel/component/aws2/timestream/query/Timestream2QueryProducerHealthCheck.java
@@ -56,7 +56,7 @@ public class Timestream2QueryProducerHealthCheck extends
AbstractHealthCheck {
if (ObjectHelper.isNotEmpty(e.statusCode())) {
builder.detail(SERVICE_STATUS_CODE, e.statusCode());
}
- if (ObjectHelper.isNotEmpty(e.awsErrorDetails().errorCode())) {
+ if (ObjectHelper.isNotEmpty(e.awsErrorDetails()) &&
ObjectHelper.isNotEmpty(e.awsErrorDetails().errorCode())) {
builder.detail(SERVICE_ERROR_CODE,
e.awsErrorDetails().errorCode());
}
builder.down();
diff --git
a/components/camel-aws/camel-aws2-timestream/src/main/java/org/apache/camel/component/aws2/timestream/write/Timestream2WriteProducerHealthCheck.java
b/components/camel-aws/camel-aws2-timestream/src/main/java/org/apache/camel/component/aws2/timestream/write/Timestream2WriteProducerHealthCheck.java
index d2abd6a04823..947a9d97951d 100644
---
a/components/camel-aws/camel-aws2-timestream/src/main/java/org/apache/camel/component/aws2/timestream/write/Timestream2WriteProducerHealthCheck.java
+++
b/components/camel-aws/camel-aws2-timestream/src/main/java/org/apache/camel/component/aws2/timestream/write/Timestream2WriteProducerHealthCheck.java
@@ -56,7 +56,7 @@ public class Timestream2WriteProducerHealthCheck extends
AbstractHealthCheck {
if (ObjectHelper.isNotEmpty(e.statusCode())) {
builder.detail(SERVICE_STATUS_CODE, e.statusCode());
}
- if (ObjectHelper.isNotEmpty(e.awsErrorDetails().errorCode())) {
+ if (ObjectHelper.isNotEmpty(e.awsErrorDetails()) &&
ObjectHelper.isNotEmpty(e.awsErrorDetails().errorCode())) {
builder.detail(SERVICE_ERROR_CODE,
e.awsErrorDetails().errorCode());
}
builder.down();
diff --git
a/components/camel-aws/camel-aws2-translate/src/main/java/org/apache/camel/component/aws2/translate/Translate2ProducerHealthCheck.java
b/components/camel-aws/camel-aws2-translate/src/main/java/org/apache/camel/component/aws2/translate/Translate2ProducerHealthCheck.java
index 431d6ef9045a..6c34f710e2e2 100644
---
a/components/camel-aws/camel-aws2-translate/src/main/java/org/apache/camel/component/aws2/translate/Translate2ProducerHealthCheck.java
+++
b/components/camel-aws/camel-aws2-translate/src/main/java/org/apache/camel/component/aws2/translate/Translate2ProducerHealthCheck.java
@@ -55,7 +55,7 @@ public class Translate2ProducerHealthCheck extends
AbstractHealthCheck {
if (ObjectHelper.isNotEmpty(e.statusCode())) {
builder.detail(SERVICE_STATUS_CODE, e.statusCode());
}
- if (ObjectHelper.isNotEmpty(e.awsErrorDetails().errorCode())) {
+ if (ObjectHelper.isNotEmpty(e.awsErrorDetails()) &&
ObjectHelper.isNotEmpty(e.awsErrorDetails().errorCode())) {
builder.detail(SERVICE_ERROR_CODE,
e.awsErrorDetails().errorCode());
}
builder.down();