This is an automated email from the ASF dual-hosted git repository. acosentino pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel.git
commit ae4a71b27b0c0c2631f75b4def5cbae4c4e848a1 Author: Andrea Cosentino <[email protected]> AuthorDate: Wed Jan 28 09:40:11 2026 +0100 Camel-AWS components: Use ObjectHelper for null checks - Bedrock Signed-off-by: Andrea Cosentino <[email protected]> --- .../aws2/bedrock/agent/BedrockAgentComponent.java | 3 +- .../aws2/bedrock/agent/BedrockAgentEndpoint.java | 6 +-- .../agentruntime/BedrockAgentRuntimeComponent.java | 3 +- .../agentruntime/BedrockAgentRuntimeEndpoint.java | 6 +-- .../aws2/bedrock/runtime/BedrockComponent.java | 3 +- .../aws2/bedrock/runtime/BedrockEndpoint.java | 10 ++--- .../aws2/bedrock/runtime/BedrockProducer.java | 48 +++++++++++----------- .../runtime/stream/BedrockStreamHandler.java | 15 +++---- .../bedrock/runtime/stream/ClaudeStreamParser.java | 23 ++++++----- .../bedrock/runtime/stream/CohereStreamParser.java | 17 ++++---- .../runtime/stream/ConverseStreamHandler.java | 15 +++---- .../bedrock/runtime/stream/LlamaStreamParser.java | 9 ++-- .../runtime/stream/MistralStreamParser.java | 11 ++--- .../bedrock/runtime/stream/TitanStreamParser.java | 9 ++-- 14 files changed, 94 insertions(+), 84 deletions(-) diff --git a/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/agent/BedrockAgentComponent.java b/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/agent/BedrockAgentComponent.java index 6a938a720201..281ef03b1d99 100644 --- a/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/agent/BedrockAgentComponent.java +++ b/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/agent/BedrockAgentComponent.java @@ -23,6 +23,7 @@ import org.apache.camel.Endpoint; import org.apache.camel.spi.Metadata; import org.apache.camel.spi.annotations.Component; import org.apache.camel.support.HealthCheckComponent; +import org.apache.camel.util.ObjectHelper; /** * For working with Amazon Bedrock Agent SDK v2. @@ -44,7 +45,7 @@ public class BedrockAgentComponent extends HealthCheckComponent { @Override protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception { BedrockAgentConfiguration configuration - = this.configuration != null ? this.configuration.copy() : new BedrockAgentConfiguration(); + = ObjectHelper.isNotEmpty(this.configuration) ? this.configuration.copy() : new BedrockAgentConfiguration(); BedrockAgentEndpoint endpoint = new BedrockAgentEndpoint(uri, this, configuration); setProperties(endpoint, parameters); if (Boolean.FALSE.equals(configuration.isUseDefaultCredentialsProvider()) diff --git a/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/agent/BedrockAgentEndpoint.java b/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/agent/BedrockAgentEndpoint.java index 316942ea3b9f..a021c21076c2 100644 --- a/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/agent/BedrockAgentEndpoint.java +++ b/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/agent/BedrockAgentEndpoint.java @@ -72,7 +72,7 @@ public class BedrockAgentEndpoint extends ScheduledPollEndpoint implements Endpo public void doStart() throws Exception { super.doStart(); - bedrockAgentClient = configuration.getBedrockAgentClient() != null + bedrockAgentClient = ObjectHelper.isNotEmpty(configuration.getBedrockAgentClient()) ? configuration.getBedrockAgentClient() : BedrockAgentClientFactory.getBedrockAgentClient(configuration); } @@ -80,7 +80,7 @@ public class BedrockAgentEndpoint extends ScheduledPollEndpoint implements Endpo @Override public void doStop() throws Exception { if (ObjectHelper.isEmpty(configuration.getBedrockAgentClient())) { - if (bedrockAgentClient != null) { + if (ObjectHelper.isNotEmpty(bedrockAgentClient)) { bedrockAgentClient.close(); } } @@ -115,7 +115,7 @@ public class BedrockAgentEndpoint extends ScheduledPollEndpoint implements Endpo @Override public Map<String, String> getServiceMetadata() { HashMap<String, String> metadata = new HashMap<>(); - if (configuration.getModelId() != null) { + if (ObjectHelper.isNotEmpty(configuration.getModelId())) { metadata.put("modelId", configuration.getModelId()); } return metadata; diff --git a/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/agentruntime/BedrockAgentRuntimeComponent.java b/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/agentruntime/BedrockAgentRuntimeComponent.java index db4e5c39fc3a..d596b3e79da8 100644 --- a/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/agentruntime/BedrockAgentRuntimeComponent.java +++ b/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/agentruntime/BedrockAgentRuntimeComponent.java @@ -23,6 +23,7 @@ import org.apache.camel.Endpoint; import org.apache.camel.spi.Metadata; import org.apache.camel.spi.annotations.Component; import org.apache.camel.support.HealthCheckComponent; +import org.apache.camel.util.ObjectHelper; /** * For working with Amazon Bedrock Agent Runtime SDK v2. @@ -44,7 +45,7 @@ public class BedrockAgentRuntimeComponent extends HealthCheckComponent { @Override protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception { BedrockAgentRuntimeConfiguration configuration - = this.configuration != null ? this.configuration.copy() : new BedrockAgentRuntimeConfiguration(); + = ObjectHelper.isNotEmpty(this.configuration) ? this.configuration.copy() : new BedrockAgentRuntimeConfiguration(); BedrockAgentRuntimeEndpoint endpoint = new BedrockAgentRuntimeEndpoint(uri, this, configuration); setProperties(endpoint, parameters); if (Boolean.FALSE.equals(configuration.isUseDefaultCredentialsProvider()) diff --git a/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/agentruntime/BedrockAgentRuntimeEndpoint.java b/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/agentruntime/BedrockAgentRuntimeEndpoint.java index 7e2fbce5f782..0b45f3524b04 100644 --- a/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/agentruntime/BedrockAgentRuntimeEndpoint.java +++ b/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/agentruntime/BedrockAgentRuntimeEndpoint.java @@ -65,7 +65,7 @@ public class BedrockAgentRuntimeEndpoint extends ScheduledPollEndpoint implement public void doStart() throws Exception { super.doStart(); - bedrockAgentRuntimeClient = configuration.getBedrockAgentRuntimeClient() != null + bedrockAgentRuntimeClient = ObjectHelper.isNotEmpty(configuration.getBedrockAgentRuntimeClient()) ? configuration.getBedrockAgentRuntimeClient() : BedrockAgentRuntimeClientFactory.getBedrockAgentRuntimeClient(configuration); } @@ -73,7 +73,7 @@ public class BedrockAgentRuntimeEndpoint extends ScheduledPollEndpoint implement @Override public void doStop() throws Exception { if (ObjectHelper.isEmpty(configuration.getBedrockAgentRuntimeClient())) { - if (bedrockAgentRuntimeClient != null) { + if (ObjectHelper.isNotEmpty(bedrockAgentRuntimeClient)) { bedrockAgentRuntimeClient.close(); } } @@ -108,7 +108,7 @@ public class BedrockAgentRuntimeEndpoint extends ScheduledPollEndpoint implement @Override public Map<String, String> getServiceMetadata() { HashMap<String, String> metadata = new HashMap<>(); - if (configuration.getModelId() != null) { + if (ObjectHelper.isNotEmpty(configuration.getModelId())) { metadata.put("modelId", configuration.getModelId()); } return metadata; diff --git a/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/runtime/BedrockComponent.java b/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/runtime/BedrockComponent.java index 1c80a5d6cb3f..896609d632fc 100644 --- a/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/runtime/BedrockComponent.java +++ b/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/runtime/BedrockComponent.java @@ -23,6 +23,7 @@ import org.apache.camel.Endpoint; import org.apache.camel.spi.Metadata; import org.apache.camel.spi.annotations.Component; import org.apache.camel.support.HealthCheckComponent; +import org.apache.camel.util.ObjectHelper; /** * For working with Amazon Bedrock SDK v2. @@ -44,7 +45,7 @@ public class BedrockComponent extends HealthCheckComponent { @Override protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception { BedrockConfiguration configuration - = this.configuration != null ? this.configuration.copy() : new BedrockConfiguration(); + = ObjectHelper.isNotEmpty(this.configuration) ? this.configuration.copy() : new BedrockConfiguration(); BedrockEndpoint endpoint = new BedrockEndpoint(uri, this, configuration); setProperties(endpoint, parameters); if (Boolean.FALSE.equals(configuration.isUseDefaultCredentialsProvider()) diff --git a/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/runtime/BedrockEndpoint.java b/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/runtime/BedrockEndpoint.java index 93013de2a489..405b05c2ba81 100644 --- a/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/runtime/BedrockEndpoint.java +++ b/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/runtime/BedrockEndpoint.java @@ -72,12 +72,12 @@ public class BedrockEndpoint extends ScheduledPollEndpoint implements EndpointSe super.doStart(); // Get sync client - bedrockRuntimeClient = configuration.getBedrockRuntimeClient() != null + bedrockRuntimeClient = ObjectHelper.isNotEmpty(configuration.getBedrockRuntimeClient()) ? configuration.getBedrockRuntimeClient() : BedrockClientFactory.getBedrockRuntimeClient(configuration); // Get async client for streaming operations - bedrockRuntimeAsyncClient = configuration.getBedrockRuntimeAsyncClient() != null + bedrockRuntimeAsyncClient = ObjectHelper.isNotEmpty(configuration.getBedrockRuntimeAsyncClient()) ? configuration.getBedrockRuntimeAsyncClient() : BedrockClientFactory.getBedrockRuntimeAsyncClient(configuration); } @@ -85,12 +85,12 @@ public class BedrockEndpoint extends ScheduledPollEndpoint implements EndpointSe @Override public void doStop() throws Exception { if (ObjectHelper.isEmpty(configuration.getBedrockRuntimeClient())) { - if (bedrockRuntimeClient != null) { + if (ObjectHelper.isNotEmpty(bedrockRuntimeClient)) { bedrockRuntimeClient.close(); } } if (ObjectHelper.isEmpty(configuration.getBedrockRuntimeAsyncClient())) { - if (bedrockRuntimeAsyncClient != null) { + if (ObjectHelper.isNotEmpty(bedrockRuntimeAsyncClient)) { bedrockRuntimeAsyncClient.close(); } } @@ -129,7 +129,7 @@ public class BedrockEndpoint extends ScheduledPollEndpoint implements EndpointSe @Override public Map<String, String> getServiceMetadata() { HashMap<String, String> metadata = new HashMap<>(); - if (configuration.getModelId() != null) { + if (ObjectHelper.isNotEmpty(configuration.getModelId())) { metadata.put("modelId", configuration.getModelId()); } return metadata; diff --git a/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/runtime/BedrockProducer.java b/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/runtime/BedrockProducer.java index aaeaf0503203..cac050a892a0 100644 --- a/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/runtime/BedrockProducer.java +++ b/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/runtime/BedrockProducer.java @@ -513,10 +513,10 @@ public class BedrockProducer extends DefaultProducer { } private void setStreamingMetadata(Message message, BedrockStreamHandler.StreamMetadata metadata) { - if (metadata.getCompletionReason() != null) { + if (ObjectHelper.isNotEmpty(metadata.getCompletionReason())) { message.setHeader(BedrockConstants.STREAMING_COMPLETION_REASON, metadata.getCompletionReason()); } - if (metadata.getTokenCount() != null) { + if (ObjectHelper.isNotEmpty(metadata.getTokenCount())) { message.setHeader(BedrockConstants.STREAMING_TOKEN_COUNT, metadata.getTokenCount()); } message.setHeader(BedrockConstants.STREAMING_CHUNK_COUNT, metadata.getChunkCount()); @@ -544,7 +544,7 @@ public class BedrockProducer extends DefaultProducer { @SuppressWarnings("unchecked") List<software.amazon.awssdk.services.bedrockruntime.model.Message> messages = exchange.getMessage().getHeader(BedrockConstants.CONVERSE_MESSAGES, List.class); - if (messages != null) { + if (ObjectHelper.isNotEmpty(messages)) { builder.messages(messages); } else { throw new IllegalArgumentException( @@ -555,21 +555,21 @@ public class BedrockProducer extends DefaultProducer { @SuppressWarnings("unchecked") List<SystemContentBlock> system = exchange.getMessage().getHeader(BedrockConstants.CONVERSE_SYSTEM, List.class); - if (system != null) { + if (ObjectHelper.isNotEmpty(system)) { builder.system(system); } // Optional: Inference configuration InferenceConfiguration inferenceConfig = exchange.getMessage().getHeader(BedrockConstants.CONVERSE_INFERENCE_CONFIG, InferenceConfiguration.class); - if (inferenceConfig != null) { + if (ObjectHelper.isNotEmpty(inferenceConfig)) { builder.inferenceConfig(inferenceConfig); } // Optional: Tool configuration ToolConfiguration toolConfig = exchange.getMessage().getHeader(BedrockConstants.CONVERSE_TOOL_CONFIG, ToolConfiguration.class); - if (toolConfig != null) { + if (ObjectHelper.isNotEmpty(toolConfig)) { builder.toolConfig(toolConfig); } @@ -577,7 +577,7 @@ public class BedrockProducer extends DefaultProducer { software.amazon.awssdk.core.document.Document additionalFields = exchange.getMessage() .getHeader(BedrockConstants.CONVERSE_ADDITIONAL_MODEL_REQUEST_FIELDS, software.amazon.awssdk.core.document.Document.class); - if (additionalFields != null) { + if (ObjectHelper.isNotEmpty(additionalFields)) { builder.additionalModelRequestFields(additionalFields); } @@ -585,7 +585,7 @@ public class BedrockProducer extends DefaultProducer { software.amazon.awssdk.services.bedrockruntime.model.GuardrailConfiguration guardrailConfig = exchange.getMessage().getHeader(BedrockConstants.GUARDRAIL_CONFIG, software.amazon.awssdk.services.bedrockruntime.model.GuardrailConfiguration.class); - if (guardrailConfig != null) { + if (ObjectHelper.isNotEmpty(guardrailConfig)) { builder.guardrailConfig(guardrailConfig); } else if (ObjectHelper.isNotEmpty(getConfiguration().getGuardrailIdentifier())) { // Build from endpoint configuration @@ -607,14 +607,14 @@ public class BedrockProducer extends DefaultProducer { org.apache.camel.Message message = getMessageForResponse(exchange); // Set the output message content as body - if (response.output() != null && response.output().message() != null) { + if (ObjectHelper.isNotEmpty(response.output()) && ObjectHelper.isNotEmpty(response.output().message())) { software.amazon.awssdk.services.bedrockruntime.model.Message outputMessage = response.output().message(); message.setHeader(BedrockConstants.CONVERSE_OUTPUT_MESSAGE, outputMessage); // Extract text content from the message StringBuilder textContent = new StringBuilder(); for (ContentBlock content : outputMessage.content()) { - if (content.text() != null) { + if (ObjectHelper.isNotEmpty(content.text())) { textContent.append(content.text()); } } @@ -622,13 +622,13 @@ public class BedrockProducer extends DefaultProducer { } // Set metadata headers - if (response.stopReason() != null) { + if (ObjectHelper.isNotEmpty(response.stopReason())) { message.setHeader(BedrockConstants.CONVERSE_STOP_REASON, response.stopReason().toString()); } - if (response.usage() != null) { + if (ObjectHelper.isNotEmpty(response.usage())) { message.setHeader(BedrockConstants.CONVERSE_USAGE, response.usage()); } - if (response.trace() != null && response.trace().guardrail() != null) { + if (ObjectHelper.isNotEmpty(response.trace()) && ObjectHelper.isNotEmpty(response.trace().guardrail())) { message.setHeader(BedrockConstants.GUARDRAIL_TRACE, response.trace().guardrail()); } @@ -660,7 +660,7 @@ public class BedrockProducer extends DefaultProducer { @SuppressWarnings("unchecked") List<software.amazon.awssdk.services.bedrockruntime.model.Message> messages = exchange.getMessage().getHeader(BedrockConstants.CONVERSE_MESSAGES, List.class); - if (messages != null) { + if (ObjectHelper.isNotEmpty(messages)) { builder.messages(messages); } else { throw new IllegalArgumentException( @@ -671,21 +671,21 @@ public class BedrockProducer extends DefaultProducer { @SuppressWarnings("unchecked") List<SystemContentBlock> system = exchange.getMessage().getHeader(BedrockConstants.CONVERSE_SYSTEM, List.class); - if (system != null) { + if (ObjectHelper.isNotEmpty(system)) { builder.system(system); } // Optional: Inference configuration InferenceConfiguration inferenceConfig = exchange.getMessage().getHeader(BedrockConstants.CONVERSE_INFERENCE_CONFIG, InferenceConfiguration.class); - if (inferenceConfig != null) { + if (ObjectHelper.isNotEmpty(inferenceConfig)) { builder.inferenceConfig(inferenceConfig); } // Optional: Tool configuration ToolConfiguration toolConfig = exchange.getMessage().getHeader(BedrockConstants.CONVERSE_TOOL_CONFIG, ToolConfiguration.class); - if (toolConfig != null) { + if (ObjectHelper.isNotEmpty(toolConfig)) { builder.toolConfig(toolConfig); } @@ -693,7 +693,7 @@ public class BedrockProducer extends DefaultProducer { software.amazon.awssdk.core.document.Document additionalFields = exchange.getMessage() .getHeader(BedrockConstants.CONVERSE_ADDITIONAL_MODEL_REQUEST_FIELDS, software.amazon.awssdk.core.document.Document.class); - if (additionalFields != null) { + if (ObjectHelper.isNotEmpty(additionalFields)) { builder.additionalModelRequestFields(additionalFields); } @@ -701,7 +701,7 @@ public class BedrockProducer extends DefaultProducer { software.amazon.awssdk.services.bedrockruntime.model.GuardrailStreamConfiguration guardrailConfig = exchange.getMessage().getHeader(BedrockConstants.GUARDRAIL_CONFIG, software.amazon.awssdk.services.bedrockruntime.model.GuardrailStreamConfiguration.class); - if (guardrailConfig != null) { + if (ObjectHelper.isNotEmpty(guardrailConfig)) { builder.guardrailConfig(guardrailConfig); } else if (ObjectHelper.isNotEmpty(getConfiguration().getGuardrailIdentifier())) { // Build from endpoint configuration @@ -777,13 +777,13 @@ public class BedrockProducer extends DefaultProducer { private void setConverseStreamingMetadata( org.apache.camel.Message message, org.apache.camel.component.aws2.bedrock.runtime.stream.ConverseStreamHandler.StreamMetadata metadata) { - if (metadata.getStopReason() != null) { + if (ObjectHelper.isNotEmpty(metadata.getStopReason())) { message.setHeader(BedrockConstants.CONVERSE_STOP_REASON, metadata.getStopReason()); } - if (metadata.getUsage() != null) { + if (ObjectHelper.isNotEmpty(metadata.getUsage())) { message.setHeader(BedrockConstants.CONVERSE_USAGE, metadata.getUsage()); } - if (metadata.getGuardrailTrace() != null) { + if (ObjectHelper.isNotEmpty(metadata.getGuardrailTrace())) { message.setHeader(BedrockConstants.GUARDRAIL_TRACE, metadata.getGuardrailTrace()); } message.setHeader(BedrockConstants.STREAMING_CHUNK_COUNT, metadata.getChunkCount()); @@ -830,7 +830,7 @@ public class BedrockProducer extends DefaultProducer { @SuppressWarnings("unchecked") List<software.amazon.awssdk.services.bedrockruntime.model.GuardrailContentBlock> content = exchange.getMessage().getHeader(BedrockConstants.GUARDRAIL_CONTENT, List.class); - if (content != null && !content.isEmpty()) { + if (ObjectHelper.isNotEmpty(content)) { builder.content(content); } else { throw new IllegalArgumentException( @@ -857,7 +857,7 @@ public class BedrockProducer extends DefaultProducer { // Store assessments as a header for detailed analysis message.setHeader(BedrockConstants.GUARDRAIL_ASSESSMENTS, response.assessments()); } - if (response.usage() != null) { + if (ObjectHelper.isNotEmpty(response.usage())) { message.setHeader(BedrockConstants.GUARDRAIL_USAGE, response.usage()); } diff --git a/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/runtime/stream/BedrockStreamHandler.java b/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/runtime/stream/BedrockStreamHandler.java index 896fe04c67ad..cf0feaafdbd5 100644 --- a/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/runtime/stream/BedrockStreamHandler.java +++ b/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/runtime/stream/BedrockStreamHandler.java @@ -20,6 +20,7 @@ import java.util.List; import java.util.function.Consumer; import com.fasterxml.jackson.core.JsonProcessingException; +import org.apache.camel.util.ObjectHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import software.amazon.awssdk.services.bedrockruntime.model.InvokeModelWithResponseStreamResponseHandler; @@ -57,19 +58,19 @@ public final class BedrockStreamHandler { try { String chunkJson = part.bytes().asUtf8String(); String text = parser.extractText(chunkJson); - if (text != null && !text.isEmpty()) { + if (ObjectHelper.isNotEmpty(text)) { fullText.append(text); } // Extract metadata from final chunk if (parser.isFinalChunk(chunkJson)) { String completionReason = parser.extractCompletionReason(chunkJson); - if (completionReason != null) { + if (ObjectHelper.isNotEmpty(completionReason)) { metadata.setCompletionReason(completionReason); } Integer tokenCount = parser.extractTokenCount(chunkJson); - if (tokenCount != null) { + if (ObjectHelper.isNotEmpty(tokenCount)) { metadata.setTokenCount(tokenCount); } } @@ -111,9 +112,9 @@ public final class BedrockStreamHandler { String chunkJson = part.bytes().asUtf8String(); String text = parser.extractText(chunkJson); - if (text != null && !text.isEmpty()) { + if (ObjectHelper.isNotEmpty(text)) { chunks.add(text); - if (chunkConsumer != null) { + if (ObjectHelper.isNotEmpty(chunkConsumer)) { chunkConsumer.accept(text); } } @@ -121,12 +122,12 @@ public final class BedrockStreamHandler { // Extract metadata from final chunk if (parser.isFinalChunk(chunkJson)) { String completionReason = parser.extractCompletionReason(chunkJson); - if (completionReason != null) { + if (ObjectHelper.isNotEmpty(completionReason)) { metadata.setCompletionReason(completionReason); } Integer tokenCount = parser.extractTokenCount(chunkJson); - if (tokenCount != null) { + if (ObjectHelper.isNotEmpty(tokenCount)) { metadata.setTokenCount(tokenCount); } } diff --git a/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/runtime/stream/ClaudeStreamParser.java b/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/runtime/stream/ClaudeStreamParser.java index aa8ca527c333..e36b7ce75bd4 100644 --- a/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/runtime/stream/ClaudeStreamParser.java +++ b/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/runtime/stream/ClaudeStreamParser.java @@ -19,6 +19,7 @@ package org.apache.camel.component.aws2.bedrock.runtime.stream; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import org.apache.camel.util.ObjectHelper; /** * Parser for Anthropic Claude model streaming responses (v3+ format) @@ -41,13 +42,13 @@ public class ClaudeStreamParser implements StreamResponseParser { JsonNode node = MAPPER.readTree(chunk); JsonNode type = node.get("type"); - if (type != null && "content_block_delta".equals(type.asText())) { + if (ObjectHelper.isNotEmpty(type) && "content_block_delta".equals(type.asText())) { JsonNode delta = node.get("delta"); - if (delta != null) { + if (ObjectHelper.isNotEmpty(delta)) { JsonNode deltaType = delta.get("type"); - if (deltaType != null && "text_delta".equals(deltaType.asText())) { + if (ObjectHelper.isNotEmpty(deltaType) && "text_delta".equals(deltaType.asText())) { JsonNode text = delta.get("text"); - return text != null && !text.isNull() ? text.asText() : ""; + return ObjectHelper.isNotEmpty(text) && !text.isNull() ? text.asText() : ""; } } } @@ -62,11 +63,11 @@ public class ClaudeStreamParser implements StreamResponseParser { JsonNode node = MAPPER.readTree(chunk); JsonNode type = node.get("type"); - if (type != null && "message_delta".equals(type.asText())) { + if (ObjectHelper.isNotEmpty(type) && "message_delta".equals(type.asText())) { JsonNode delta = node.get("delta"); - if (delta != null) { + if (ObjectHelper.isNotEmpty(delta)) { JsonNode stopReason = delta.get("stop_reason"); - return stopReason != null && !stopReason.isNull() ? stopReason.asText() : null; + return ObjectHelper.isNotEmpty(stopReason) && !stopReason.isNull() ? stopReason.asText() : null; } } return null; @@ -80,11 +81,11 @@ public class ClaudeStreamParser implements StreamResponseParser { JsonNode node = MAPPER.readTree(chunk); JsonNode type = node.get("type"); - if (type != null && "message_delta".equals(type.asText())) { + if (ObjectHelper.isNotEmpty(type) && "message_delta".equals(type.asText())) { JsonNode usage = node.get("usage"); - if (usage != null) { + if (ObjectHelper.isNotEmpty(usage)) { JsonNode outputTokens = usage.get("output_tokens"); - return outputTokens != null && !outputTokens.isNull() ? outputTokens.asInt() : null; + return ObjectHelper.isNotEmpty(outputTokens) && !outputTokens.isNull() ? outputTokens.asInt() : null; } } return null; @@ -97,6 +98,6 @@ public class ClaudeStreamParser implements StreamResponseParser { } JsonNode node = MAPPER.readTree(chunk); JsonNode type = node.get("type"); - return type != null && "message_stop".equals(type.asText()); + return ObjectHelper.isNotEmpty(type) && "message_stop".equals(type.asText()); } } diff --git a/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/runtime/stream/CohereStreamParser.java b/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/runtime/stream/CohereStreamParser.java index 52140781e4b9..12aa228d8955 100644 --- a/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/runtime/stream/CohereStreamParser.java +++ b/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/runtime/stream/CohereStreamParser.java @@ -19,6 +19,7 @@ package org.apache.camel.component.aws2.bedrock.runtime.stream; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import org.apache.camel.util.ObjectHelper; /** * Parser for Cohere model streaming responses @@ -39,9 +40,9 @@ public class CohereStreamParser implements StreamResponseParser { JsonNode node = MAPPER.readTree(chunk); JsonNode eventType = node.get("event_type"); - if (eventType != null && "text-generation".equals(eventType.asText())) { + if (ObjectHelper.isNotEmpty(eventType) && "text-generation".equals(eventType.asText())) { JsonNode text = node.get("text"); - return text != null && !text.isNull() ? text.asText() : ""; + return ObjectHelper.isNotEmpty(text) && !text.isNull() ? text.asText() : ""; } return ""; } @@ -53,7 +54,7 @@ public class CohereStreamParser implements StreamResponseParser { } JsonNode node = MAPPER.readTree(chunk); JsonNode finishReason = node.get("finish_reason"); - return finishReason != null && !finishReason.isNull() ? finishReason.asText() : null; + return ObjectHelper.isNotEmpty(finishReason) && !finishReason.isNull() ? finishReason.asText() : null; } @Override @@ -63,13 +64,13 @@ public class CohereStreamParser implements StreamResponseParser { } JsonNode node = MAPPER.readTree(chunk); JsonNode response = node.get("response"); - if (response != null) { + if (ObjectHelper.isNotEmpty(response)) { JsonNode meta = response.get("meta"); - if (meta != null) { + if (ObjectHelper.isNotEmpty(meta)) { JsonNode tokens = meta.get("tokens"); - if (tokens != null) { + if (ObjectHelper.isNotEmpty(tokens)) { JsonNode outputTokens = tokens.get("output_tokens"); - return outputTokens != null && !outputTokens.isNull() ? outputTokens.asInt() : null; + return ObjectHelper.isNotEmpty(outputTokens) && !outputTokens.isNull() ? outputTokens.asInt() : null; } } } @@ -83,6 +84,6 @@ public class CohereStreamParser implements StreamResponseParser { } JsonNode node = MAPPER.readTree(chunk); JsonNode isFinished = node.get("is_finished"); - return isFinished != null && isFinished.asBoolean(false); + return ObjectHelper.isNotEmpty(isFinished) && isFinished.asBoolean(false); } } diff --git a/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/runtime/stream/ConverseStreamHandler.java b/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/runtime/stream/ConverseStreamHandler.java index c554f5030844..182a17a3977d 100644 --- a/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/runtime/stream/ConverseStreamHandler.java +++ b/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/runtime/stream/ConverseStreamHandler.java @@ -19,6 +19,7 @@ package org.apache.camel.component.aws2.bedrock.runtime.stream; import java.util.List; import java.util.function.Consumer; +import org.apache.camel.util.ObjectHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import software.amazon.awssdk.services.bedrockruntime.model.ConverseStreamResponseHandler; @@ -51,18 +52,18 @@ public final class ConverseStreamHandler { return ConverseStreamResponseHandler.builder() .subscriber(ConverseStreamResponseHandler.Visitor.builder() .onContentBlockDelta(delta -> { - if (delta.delta() != null && delta.delta().text() != null) { + if (ObjectHelper.isNotEmpty(delta.delta()) && ObjectHelper.isNotEmpty(delta.delta().text())) { fullText.append(delta.delta().text()); } chunkCount[0]++; }) .onMetadata(metadataEvent -> { - if (metadataEvent.usage() != null) { + if (ObjectHelper.isNotEmpty(metadataEvent.usage())) { metadata.setUsage(metadataEvent.usage()); } }) .onMessageStop(stop -> { - if (stop.stopReason() != null) { + if (ObjectHelper.isNotEmpty(stop.stopReason())) { metadata.setStopReason(stop.stopReason().toString()); } }) @@ -92,22 +93,22 @@ public final class ConverseStreamHandler { return ConverseStreamResponseHandler.builder() .subscriber(ConverseStreamResponseHandler.Visitor.builder() .onContentBlockDelta(delta -> { - if (delta.delta() != null && delta.delta().text() != null) { + if (ObjectHelper.isNotEmpty(delta.delta()) && ObjectHelper.isNotEmpty(delta.delta().text())) { String text = delta.delta().text(); chunks.add(text); - if (chunkConsumer != null) { + if (ObjectHelper.isNotEmpty(chunkConsumer)) { chunkConsumer.accept(text); } } chunkCount[0]++; }) .onMetadata(metadataEvent -> { - if (metadataEvent.usage() != null) { + if (ObjectHelper.isNotEmpty(metadataEvent.usage())) { metadata.setUsage(metadataEvent.usage()); } }) .onMessageStop(stop -> { - if (stop.stopReason() != null) { + if (ObjectHelper.isNotEmpty(stop.stopReason())) { metadata.setStopReason(stop.stopReason().toString()); } }) diff --git a/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/runtime/stream/LlamaStreamParser.java b/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/runtime/stream/LlamaStreamParser.java index 04a538b7cd4e..243a09e1dd2d 100644 --- a/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/runtime/stream/LlamaStreamParser.java +++ b/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/runtime/stream/LlamaStreamParser.java @@ -19,6 +19,7 @@ package org.apache.camel.component.aws2.bedrock.runtime.stream; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import org.apache.camel.util.ObjectHelper; /** * Parser for Meta Llama model streaming responses @@ -39,7 +40,7 @@ public class LlamaStreamParser implements StreamResponseParser { } JsonNode node = MAPPER.readTree(chunk); JsonNode generation = node.get("generation"); - return generation != null && !generation.isNull() ? generation.asText() : ""; + return ObjectHelper.isNotEmpty(generation) && !generation.isNull() ? generation.asText() : ""; } @Override @@ -49,7 +50,7 @@ public class LlamaStreamParser implements StreamResponseParser { } JsonNode node = MAPPER.readTree(chunk); JsonNode stopReason = node.get("stop_reason"); - return stopReason != null && !stopReason.isNull() ? stopReason.asText() : null; + return ObjectHelper.isNotEmpty(stopReason) && !stopReason.isNull() ? stopReason.asText() : null; } @Override @@ -59,12 +60,12 @@ public class LlamaStreamParser implements StreamResponseParser { } JsonNode node = MAPPER.readTree(chunk); JsonNode tokenCount = node.get("generation_token_count"); - return tokenCount != null && !tokenCount.isNull() ? tokenCount.asInt() : null; + return ObjectHelper.isNotEmpty(tokenCount) && !tokenCount.isNull() ? tokenCount.asInt() : null; } @Override public boolean isFinalChunk(String chunk) throws JsonProcessingException { String stopReason = extractCompletionReason(chunk); - return stopReason != null && !stopReason.isEmpty(); + return ObjectHelper.isNotEmpty(stopReason); } } diff --git a/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/runtime/stream/MistralStreamParser.java b/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/runtime/stream/MistralStreamParser.java index 8cc2b9df6575..b2ce79f9c0c8 100644 --- a/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/runtime/stream/MistralStreamParser.java +++ b/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/runtime/stream/MistralStreamParser.java @@ -19,6 +19,7 @@ package org.apache.camel.component.aws2.bedrock.runtime.stream; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import org.apache.camel.util.ObjectHelper; /** * Parser for Mistral AI model streaming responses @@ -37,10 +38,10 @@ public class MistralStreamParser implements StreamResponseParser { } JsonNode node = MAPPER.readTree(chunk); JsonNode outputs = node.get("outputs"); - if (outputs != null && outputs.isArray() && outputs.size() > 0) { + if (ObjectHelper.isNotEmpty(outputs) && outputs.isArray() && outputs.size() > 0) { JsonNode firstOutput = outputs.get(0); JsonNode text = firstOutput.get("text"); - return text != null && !text.isNull() ? text.asText() : ""; + return ObjectHelper.isNotEmpty(text) && !text.isNull() ? text.asText() : ""; } return ""; } @@ -52,10 +53,10 @@ public class MistralStreamParser implements StreamResponseParser { } JsonNode node = MAPPER.readTree(chunk); JsonNode outputs = node.get("outputs"); - if (outputs != null && outputs.isArray() && outputs.size() > 0) { + if (ObjectHelper.isNotEmpty(outputs) && outputs.isArray() && outputs.size() > 0) { JsonNode firstOutput = outputs.get(0); JsonNode stopReason = firstOutput.get("stop_reason"); - return stopReason != null && !stopReason.isNull() ? stopReason.asText() : null; + return ObjectHelper.isNotEmpty(stopReason) && !stopReason.isNull() ? stopReason.asText() : null; } return null; } @@ -70,6 +71,6 @@ public class MistralStreamParser implements StreamResponseParser { @Override public boolean isFinalChunk(String chunk) throws JsonProcessingException { String stopReason = extractCompletionReason(chunk); - return stopReason != null && !stopReason.isEmpty(); + return ObjectHelper.isNotEmpty(stopReason); } } diff --git a/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/runtime/stream/TitanStreamParser.java b/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/runtime/stream/TitanStreamParser.java index 5a6aa41fd7c4..5d472fc650a9 100644 --- a/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/runtime/stream/TitanStreamParser.java +++ b/components/camel-aws/camel-aws-bedrock/src/main/java/org/apache/camel/component/aws2/bedrock/runtime/stream/TitanStreamParser.java @@ -19,6 +19,7 @@ package org.apache.camel.component.aws2.bedrock.runtime.stream; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import org.apache.camel.util.ObjectHelper; /** * Parser for Amazon Titan model streaming responses @@ -39,7 +40,7 @@ public class TitanStreamParser implements StreamResponseParser { } JsonNode node = MAPPER.readTree(chunk); JsonNode outputText = node.get("outputText"); - return outputText != null && !outputText.isNull() ? outputText.asText() : ""; + return ObjectHelper.isNotEmpty(outputText) && !outputText.isNull() ? outputText.asText() : ""; } @Override @@ -49,7 +50,7 @@ public class TitanStreamParser implements StreamResponseParser { } JsonNode node = MAPPER.readTree(chunk); JsonNode completionReason = node.get("completionReason"); - return completionReason != null && !completionReason.isNull() ? completionReason.asText() : null; + return ObjectHelper.isNotEmpty(completionReason) && !completionReason.isNull() ? completionReason.asText() : null; } @Override @@ -59,12 +60,12 @@ public class TitanStreamParser implements StreamResponseParser { } JsonNode node = MAPPER.readTree(chunk); JsonNode tokenCount = node.get("totalOutputTextTokenCount"); - return tokenCount != null && !tokenCount.isNull() ? tokenCount.asInt() : null; + return ObjectHelper.isNotEmpty(tokenCount) && !tokenCount.isNull() ? tokenCount.asInt() : null; } @Override public boolean isFinalChunk(String chunk) throws JsonProcessingException { String completionReason = extractCompletionReason(chunk); - return completionReason != null && !completionReason.isEmpty(); + return ObjectHelper.isNotEmpty(completionReason); } }
