AWS SDK for Java 2.x - Amazon Bedrock When to Use Use this skill when: Listing and inspecting foundation models on Amazon Bedrock Invoking foundation models for text generation (Claude, Llama, Titan) Generating images with AI models (Stable Diffusion) Creating text embeddings for RAG applications Implementing streaming responses for real-time generation Working with multiple AI providers through unified API Integrating generative AI into Spring Boot applications Building AI-powered chatbots and assistants Overview Amazon Bedrock provides access to foundation models from leading AI providers through a unified API. This skill covers patterns for working with various models including Claude, Llama, Titan, and Stability Diffusion using AWS SDK for Java 2.x. Instructions Follow these steps to work with Amazon Bedrock: Set Up AWS Credentials - Configure credentials with appropriate Bedrock permissions Enable Bedrock Access - Request access to specific foundation models in the AWS Console Add Dependencies - Include bedrock and bedrockruntime dependencies Create Clients - Instantiate BedrockClient for management and BedrockRuntimeClient for invocation List Models - Query available foundation models and their capabilities Invoke Models - Build proper payloads for each model provider's format Handle Streaming - Implement streaming response handlers for real-time generation Integrate with Spring - Configure beans and services for enterprise applications Quick Start Dependencies
< dependency
< groupId
software.amazon.awssdk </ groupId
< artifactId
bedrock </ artifactId
</ dependency
< dependency
< groupId
software.amazon.awssdk </ groupId
< artifactId
bedrockruntime </ artifactId
</ dependency
- <
- dependency
- >
- <
- groupId
- >
- org.json
- </
- groupId
- >
- <
- artifactId
- >
- json
- </
- artifactId
- >
- <
- version
- >
- 20231013
- </
- version
- >
- </
- dependency
- >
- Basic Client Setup
- import
- software
- .
- amazon
- .
- awssdk
- .
- regions
- .
- Region
- ;
- import
- software
- .
- amazon
- .
- awssdk
- .
- services
- .
- bedrock
- .
- BedrockClient
- ;
- import
- software
- .
- amazon
- .
- awssdk
- .
- services
- .
- bedrockruntime
- .
- BedrockRuntimeClient
- ;
- // Model management client
- BedrockClient
- bedrockClient
- =
- BedrockClient
- .
- builder
- (
- )
- .
- region
- (
- Region
- .
- US_EAST_1
- )
- .
- build
- (
- )
- ;
- // Model invocation client
- BedrockRuntimeClient
- bedrockRuntimeClient
- =
- BedrockRuntimeClient
- .
- builder
- (
- )
- .
- region
- (
- Region
- .
- US_EAST_1
- )
- .
- build
- (
- )
- ;
- Core Patterns
- Model Discovery
- import
- software
- .
- amazon
- .
- awssdk
- .
- services
- .
- bedrock
- .
- model
- .
- *
- ;
- import
- java
- .
- util
- .
- List
- ;
- public
- List
- <
- FoundationModelSummary
- >
- listFoundationModels
- (
- BedrockClient
- bedrockClient
- )
- {
- return
- bedrockClient
- .
- listFoundationModels
- (
- )
- .
- modelSummaries
- (
- )
- ;
- }
- Model Invocation
- import
- software
- .
- amazon
- .
- awssdk
- .
- core
- .
- SdkBytes
- ;
- import
- software
- .
- amazon
- .
- awssdk
- .
- services
- .
- bedrockruntime
- .
- model
- .
- *
- ;
- import
- org
- .
- json
- .
- JSONObject
- ;
- public
- String
- invokeModel
- (
- BedrockRuntimeClient
- client
- ,
- String
- modelId
- ,
- String
- prompt
- )
- {
- JSONObject
- payload
- =
- createPayload
- (
- modelId
- ,
- prompt
- )
- ;
- InvokeModelResponse
- response
- =
- client
- .
- invokeModel
- (
- request
- ->
- request
- .
- modelId
- (
- modelId
- )
- .
- body
- (
- SdkBytes
- .
- fromUtf8String
- (
- payload
- .
- toString
- (
- )
- )
- )
- )
- ;
- return
- extractTextFromResponse
- (
- modelId
- ,
- response
- .
- body
- (
- )
- .
- asUtf8String
- (
- )
- )
- ;
- }
- private
- JSONObject
- createPayload
- (
- String
- modelId
- ,
- String
- prompt
- )
- {
- if
- (
- modelId
- .
- startsWith
- (
- "anthropic.claude"
- )
- )
- {
- return
- new
- JSONObject
- (
- )
- .
- put
- (
- "anthropic_version"
- ,
- "bedrock-2023-05-31"
- )
- .
- put
- (
- "max_tokens"
- ,
- 1000
- )
- .
- put
- (
- "messages"
- ,
- new
- JSONObject
- [
- ]
- {
- new
- JSONObject
- (
- )
- .
- put
- (
- "role"
- ,
- "user"
- )
- .
- put
- (
- "content"
- ,
- prompt
- )
- }
- )
- ;
- }
- else
- if
- (
- modelId
- .
- startsWith
- (
- "amazon.titan"
- )
- )
- {
- return
- new
- JSONObject
- (
- )
- .
- put
- (
- "inputText"
- ,
- prompt
- )
- .
- put
- (
- "textGenerationConfig"
- ,
- new
- JSONObject
- (
- )
- .
- put
- (
- "maxTokenCount"
- ,
- 512
- )
- .
- put
- (
- "temperature"
- ,
- 0.7
- )
- )
- ;
- }
- else
- if
- (
- modelId
- .
- startsWith
- (
- "meta.llama"
- )
- )
- {
- return
- new
- JSONObject
- (
- )
- .
- put
- (
- "prompt"
- ,
- "[INST] "
- +
- prompt
- +
- " [/INST]"
- )
- .
- put
- (
- "max_gen_len"
- ,
- 512
- )
- .
- put
- (
- "temperature"
- ,
- 0.7
- )
- ;
- }
- throw
- new
- IllegalArgumentException
- (
- "Unsupported model: "
- +
- modelId
- )
- ;
- }
- Streaming Responses
- public
- void
- streamResponse
- (
- BedrockRuntimeClient
- client
- ,
- String
- modelId
- ,
- String
- prompt
- )
- {
- JSONObject
- payload
- =
- createPayload
- (
- modelId
- ,
- prompt
- )
- ;
- InvokeModelWithResponseStreamRequest
- streamRequest
- =
- InvokeModelWithResponseStreamRequest
- .
- builder
- (
- )
- .
- modelId
- (
- modelId
- )
- .
- body
- (
- SdkBytes
- .
- fromUtf8String
- (
- payload
- .
- toString
- (
- )
- )
- )
- .
- build
- (
- )
- ;
- client
- .
- invokeModelWithResponseStream
- (
- streamRequest
- ,
- InvokeModelWithResponseStreamResponseHandler
- .
- builder
- (
- )
- .
- onEventStream
- (
- stream
- ->
- {
- stream
- .
- forEach
- (
- event
- ->
- {
- if
- (
- event
- instanceof
- PayloadPart
- )
- {
- PayloadPart
- payloadPart
- =
- (
- PayloadPart
- )
- event
- ;
- String
- chunk
- =
- payloadPart
- .
- bytes
- (
- )
- .
- asUtf8String
- (
- )
- ;
- processChunk
- (
- modelId
- ,
- chunk
- )
- ;
- }
- }
- )
- ;
- }
- )
- .
- build
- (
- )
- )
- ;
- }
- Text Embeddings
- public
- double
- [
- ]
- createEmbeddings
- (
- BedrockRuntimeClient
- client
- ,
- String
- text
- )
- {
- String
- modelId
- =
- "amazon.titan-embed-text-v1"
- ;
- JSONObject
- payload
- =
- new
- JSONObject
- (
- )
- .
- put
- (
- "inputText"
- ,
- text
- )
- ;
- InvokeModelResponse
- response
- =
- client
- .
- invokeModel
- (
- request
- ->
- request
- .
- modelId
- (
- modelId
- )
- .
- body
- (
- SdkBytes
- .
- fromUtf8String
- (
- payload
- .
- toString
- (
- )
- )
- )
- )
- ;
- JSONObject
- responseBody
- =
- new
- JSONObject
- (
- response
- .
- body
- (
- )
- .
- asUtf8String
- (
- )
- )
- ;
- JSONArray
- embeddingArray
- =
- responseBody
- .
- getJSONArray
- (
- "embedding"
- )
- ;
- double
- [
- ]
- embeddings
- =
- new
- double
- [
- embeddingArray
- .
- length
- (
- )
- ]
- ;
- for
- (
- int
- i
- =
- 0
- ;
- i
- <
- embeddingArray
- .
- length
- (
- )
- ;
- i
- ++
- )
- {
- embeddings
- [
- i
- ]
- =
- embeddingArray
- .
- getDouble
- (
- i
- )
- ;
- }
- return
- embeddings
- ;
- }
- Spring Boot Integration
- @Configuration
- public
- class
- BedrockConfiguration
- {
- @Bean
- public
- BedrockClient
- bedrockClient
- (
- )
- {
- return
- BedrockClient
- .
- builder
- (
- )
- .
- region
- (
- Region
- .
- US_EAST_1
- )
- .
- build
- (
- )
- ;
- }
- @Bean
- public
- BedrockRuntimeClient
- bedrockRuntimeClient
- (
- )
- {
- return
- BedrockRuntimeClient
- .
- builder
- (
- )
- .
- region
- (
- Region
- .
- US_EAST_1
- )
- .
- build
- (
- )
- ;
- }
- }
- @Service
- public
- class
- BedrockAIService
- {
- private
- final
- BedrockRuntimeClient
- bedrockRuntimeClient
- ;
- @Value
- (
- "${bedrock.default-model-id:anthropic.claude-sonnet-4-5-20250929-v1:0}"
- )
- private
- String
- defaultModelId
- ;
- public
- BedrockAIService
- (
- BedrockRuntimeClient
- bedrockRuntimeClient
- )
- {
- this
- .
- bedrockRuntimeClient
- =
- bedrockRuntimeClient
- ;
- }
- public
- String
- generateText
- (
- String
- prompt
- )
- {
- return
- generateText
- (
- prompt
- ,
- defaultModelId
- )
- ;
- }
- public
- String
- generateText
- (
- String
- prompt
- ,
- String
- modelId
- )
- {
- Map
- <
- String
- ,
- Object
- >
- payload
- =
- createPayload
- (
- modelId
- ,
- prompt
- )
- ;
- String
- payloadJson
- =
- new
- ObjectMapper
- (
- )
- .
- writeValueAsString
- (
- payload
- )
- ;
- InvokeModelResponse
- response
- =
- bedrockRuntimeClient
- .
- invokeModel
- (
- request
- ->
- request
- .
- modelId
- (
- modelId
- )
- .
- body
- (
- SdkBytes
- .
- fromUtf8String
- (
- payloadJson
- )
- )
- )
- ;
- return
- extractTextFromResponse
- (
- modelId
- ,
- response
- .
- body
- (
- )
- .
- asUtf8String
- (
- )
- )
- ;
- }
- }
- Basic Usage Example
- BedrockRuntimeClient
- client
- =
- BedrockRuntimeClient
- .
- builder
- (
- )
- .
- region
- (
- Region
- .
- US_EAST_1
- )
- .
- build
- (
- )
- ;
- String
- prompt
- =
- "Explain quantum computing in simple terms"
- ;
- String
- response
- =
- invokeModel
- (
- client
- ,
- "anthropic.claude-sonnet-4-5-20250929-v1:0"
- ,
- prompt
- )
- ;
- System
- .
- out
- .
- println
- (
- response
- )
- ;
- Best Practices
- Model Selection
- Claude 4.5 Sonnet
-
- Best for complex reasoning, analysis, and creative tasks
- Claude 4.5 Haiku
-
- Fast and affordable for real-time applications
- Claude 3.7 Sonnet
-
- Most advanced reasoning capabilities
- Llama 3.1
-
- Latest generation open-source alternative, good for general tasks
- Titan
- AWS native, cost-effective for simple text generation
Performance Optimization
Reuse client instances (don't create new clients for each request)
Use async clients for I/O operations
Implement streaming for long responses
Cache foundation model lists
Security
Never log sensitive prompt data
Use IAM roles for authentication (never access keys)
Implement rate limiting for public applications
Sanitize user inputs to prevent prompt injection
Error Handling
Implement retry logic for throttling (exponential backoff)
Handle model-specific validation errors
Validate responses before processing
Use proper exception handling for different error types
Cost Optimization
Use appropriate max_tokens limits
Choose cost-effective models for simple tasks
Cache embeddings when possible
Monitor usage and set budget alerts
Common Model IDs
// Claude Models
public
static
final
String
CLAUDE_SONNET_4_5
=
"anthropic.claude-sonnet-4-5-20250929-v1:0"
;
public
static
final
String
CLAUDE_HAIKU_4_5
=
"anthropic.claude-haiku-4-5-20251001-v1:0"
;
public
static
final
String
CLAUDE_OPUS_4_1
=
"anthropic.claude-opus-4-1-20250805-v1:0"
;
public
static
final
String
CLAUDE_3_7_SONNET
=
"anthropic.claude-3-7-sonnet-20250219-v1:0"
;
public
static
final
String
CLAUDE_OPUS_4
=
"anthropic.claude-opus-4-20250514-v1:0"
;
public
static
final
String
CLAUDE_SONNET_4
=
"anthropic.claude-sonnet-4-20250514-v1:0"
;
public
static
final
String
CLAUDE_3_5_SONNET_V2
=
"anthropic.claude-3-5-sonnet-20241022-v2:0"
;
public
static
final
String
CLAUDE_3_5_HAIKU
=
"anthropic.claude-3-5-haiku-20241022-v1:0"
;
public
static
final
String
CLAUDE_3_OPUS
=
"anthropic.claude-3-opus-20240229-v1:0"
;
// Llama Models
public
static
final
String
LLAMA_3_3_70B
=
"meta.llama3-3-70b-instruct-v1:0"
;
public
static
final
String
LLAMA_3_2_90B
=
"meta.llama3-2-90b-instruct-v1:0"
;
public
static
final
String
LLAMA_3_2_11B
=
"meta.llama3-2-11b-instruct-v1:0"
;
public
static
final
String
LLAMA_3_2_3B
=
"meta.llama3-2-3b-instruct-v1:0"
;
public
static
final
String
LLAMA_3_2_1B
=
"meta.llama3-2-1b-instruct-v1:0"
;
public
static
final
String
LLAMA_4_MAV_17B
=
"meta.llama4-maverick-17b-instruct-v1:0"
;
public
static
final
String
LLAMA_4_SCOUT_17B
=
"meta.llama4-scout-17b-instruct-v1:0"
;
public
static
final
String
LLAMA_3_1_405B
=
"meta.llama3-1-405b-instruct-v1:0"
;
public
static
final
String
LLAMA_3_1_70B
=
"meta.llama3-1-70b-instruct-v1:0"
;
public
static
final
String
LLAMA_3_1_8B
=
"meta.llama3-1-8b-instruct-v1:0"
;
public
static
final
String
LLAMA_3_70B
=
"meta.llama3-70b-instruct-v1:0"
;
public
static
final
String
LLAMA_3_8B
=
"meta.llama3-8b-instruct-v1:0"
;
// Amazon Titan Models
public
static
final
String
TITAN_TEXT_EXPRESS
=
"amazon.titan-text-express-v1"
;
public
static
final
String
TITAN_TEXT_LITE
=
"amazon.titan-text-lite-v1"
;
public
static
final
String
TITAN_EMBEDDINGS
=
"amazon.titan-embed-text-v1"
;
public
static
final
String
TITAN_IMAGE_GENERATOR
=
"amazon.titan-image-generator-v1"
;
// Stable Diffusion
public
static
final
String
STABLE_DIFFUSION_XL
=
"stability.stable-diffusion-xl-v1"
;
// Mistral AI Models
public
static
final
String
MISTRAL_LARGE_2407
=
"mistral.mistral-large-2407-v1:0"
;
public
static
final
String
MISTRAL_LARGE_2402
=
"mistral.mistral-large-2402-v1:0"
;
public
static
final
String
MISTRAL_SMALL_2402
=
"mistral.mistral-small-2402-v1:0"
;
public
static
final
String
MISTRAL_PIXTRAL_2502
=
"mistral.pixtral-large-2502-v1:0"
;
public
static
final
String
MISTRAL_MIXTRAL_8X7B
=
"mistral.mixtral-8x7b-instruct-v0:1"
;
public
static
final
String
MISTRAL_7B
=
"mistral.mistral-7b-instruct-v0:2"
;
// Amazon Nova Models
public
static
final
String
NOVA_PREMIER
=
"amazon.nova-premier-v1:0"
;
public
static
final
String
NOVA_PRO
=
"amazon.nova-pro-v1:0"
;
public
static
final
String
NOVA_LITE
=
"amazon.nova-lite-v1:0"
;
public
static
final
String
NOVA_MICRO
=
"amazon.nova-micro-v1:0"
;
public
static
final
String
NOVA_CANVAS
=
"amazon.nova-canvas-v1:0"
;
public
static
final
String
NOVA_REEL
=
"amazon.nova-reel-v1:1"
;
// Other Models
public
static
final
String
COHERE_COMMAND
=
"cohere.command-text-v14"
;
public
static
final
String
DEEPSEEK_R1
=
"deepseek.r1-v1:0"
;
public
static
final
String
DEEPSEEK_V3_1
=
"deepseek.v3-v1:0"
;
Examples
Example 1: Simple Text Generation with Claude
public
String
generateWithClaude
(
BedrockRuntimeClient
client
,
String
prompt
)
{
JSONObject
payload
=
new
JSONObject
(
)
.
put
(
"anthropic_version"
,
"bedrock-2023-05-31"
)
.
put
(
"max_tokens"
,
1000
)
.
put
(
"messages"
,
new
JSONObject
[
]
{
new
JSONObject
(
)
.
put
(
"role"
,
"user"
)
.
put
(
"content"
,
prompt
)
}
)
;
InvokeModelResponse
response
=
client
.
invokeModel
(
InvokeModelRequest
.
builder
(
)
.
modelId
(
"anthropic.claude-sonnet-4-5-20250929-v1:0"
)
.
body
(
SdkBytes
.
fromUtf8String
(
payload
.
toString
(
)
)
)
.
build
(
)
)
;
JSONObject
responseBody
=
new
JSONObject
(
response
.
body
(
)
.
asUtf8String
(
)
)
;
return
responseBody
.
getJSONArray
(
"content"
)
.
getJSONObject
(
0
)
.
getString
(
"text"
)
;
}
Example 2: Streaming Response
public
void
streamResponse
(
BedrockRuntimeClient
client
,
String
modelId
,
String
prompt
)
{
JSONObject
payload
=
new
JSONObject
(
)
.
put
(
"anthropic_version"
,
"bedrock-2023-05-31"
)
.
put
(
"max_tokens"
,
500
)
.
put
(
"messages"
,
new
JSONObject
[
]
{
new
JSONObject
(
)
.
put
(
"role"
,
"user"
)
.
put
(
"content"
,
prompt
)
}
)
;
InvokeModelWithResponseStreamRequest
request
=
InvokeModelWithResponseStreamRequest
.
builder
(
)
.
modelId
(
modelId
)
.
body
(
SdkBytes
.
fromUtf8String
(
payload
.
toString
(
)
)
)
.
build
(
)
;
client
.
invokeModelWithResponseStream
(
request
,
InvokeModelWithResponseStreamResponseHandler
.
builder
(
)
.
onEventStream
(
stream
->
stream
.
forEach
(
event
->
{
if
(
event
instanceof
PayloadPart
)
{
String
chunk
=
(
(
PayloadPart
)
event
)
.
bytes
(
)
.
asUtf8String
(
)
;
System
.
out
.
print
(
chunk
)
;
}
}
)
)
.
build
(
)
)
;
}
Example 3: Spring Boot Service
@Service
public
class
BedrockService
{
private
final
BedrockRuntimeClient
client
;
private
final
ObjectMapper
mapper
;
@Value
(
"${bedrock.model:anthropic.claude-sonnet-4-5-20250929-v1:0}"
)
private
String
modelId
;
public
String
generate
(
String
prompt
)
{
try
{
Map
<
String
,
Object
payload
Map . of ( "anthropic_version" , "bedrock-2023-05-31" , "max_tokens" , 1000 , "messages" , List . of ( Map . of ( "role" , "user" , "content" , prompt ) ) ) ; InvokeModelResponse response = client . invokeModel ( InvokeModelRequest . builder ( ) . modelId ( modelId ) . body ( SdkBytes . fromUtf8String ( mapper . writeValueAsString ( payload ) ) ) . build ( ) ) ; return extractText ( response . body ( ) . asUtf8String ( ) ) ; } catch ( Exception e ) { throw new RuntimeException ( "Bedrock invocation failed" , e ) ; } } } See the examples directory for comprehensive usage patterns. Advanced Topics See the Advanced Topics for: Multi-model service patterns Advanced error handling with retries Batch processing strategies Performance optimization techniques Custom response parsing Model Reference See the Model Reference for: Detailed model specifications Payload/response formats for each provider Performance characteristics Model selection guidelines Configuration templates Testing Strategies See the Testing Strategies for: Unit testing with mocked clients Integration testing with LocalStack Performance testing Streaming response testing Test data management