# Java

This example demonstrates how to connect to an S3 compatible service and list all buckets using the AWS SDK for Java.

## Prerequisites

Before running the code, ensure you have the following:

1. **Java Development Kit (JDK)** installed.
2. **AWS SDK for Java** added as a dependency.
3. Replace `YOUR_ACCESS_KEY` and `YOUR_SECRET_KEY` with your actual AWS credentials.

## Maven Dependency

If you're using Maven, you need to add the following dependency in your `pom.xml`:

```xml
<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-s3</artifactId>
    <version>1.12.664</version>
</dependency>
```

## Java Code

```java
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.client.builder.AwsClientBuilder;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.Bucket;

import java.util.List;

public class Main {
    public static void main(String[] args) {
        // S3 credentials and endpoint
        String accessKey = "YOUR_ACCESS_KEY"; // Replace with your access key
        String secretKey = "YOUR_SECRET_KEY"; // Replace with your secret key
        String endpoint = "HOST_NAME" //Use the Hostname from the Details page.
        String region = "US";

        // Create S3 client
        AmazonS3 s3 = AmazonS3ClientBuilder.standard()
            .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(endpoint, region))
            .withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(accessKey, secretKey)))
            .withPathStyleAccessEnabled(true)
            .build();

        try {
            List<Bucket> buckets = s3.listBuckets();
            System.out.println("Buckets:");
            for (Bucket bucket : buckets) {
                System.out.println("  - " + bucket.getName());
            }
        } catch (Exception e) {
            System.err.println("Error: " + e.getMessage());
        }
    }
}
```

## Explanation

### Steps in the Code

1. **Credentials**:\
   The program uses `BasicAWSCredentials` to provide the access key and secret key. Make sure to replace `YOUR_ACCESS_KEY` and `YOUR_SECRET_KEY` with your actual credentials.
2. **Client Configuration**:\
   The `AmazonS3ClientBuilder` is configured with the endpoint and region of the S3-compatible service. The `.withPathStyleAccessEnabled(true)` ensures path-style access to the buckets.
3. **List Buckets**:\
   The `listBuckets` method is called on the `AmazonS3` client to retrieve all the available buckets. These buckets are then printed to the console.
4. **Error Handling**:\
   If an error occurs during the process, it is caught in the `catch` block, and the error message is printed.

## Run the Code

To run the program, you can compile and execute it as a standard Java application. Make sure to have the AWS SDK for Java dependency correctly added to your project.

***

**Note**: Ensure that you replace the placeholders for access key and secret key with your own credentials. These credentials should be securely stored and not hardcoded in production applications.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.nebulablock.com/core-services/overview-2/sdk/java_sdk.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
