diff --git a/examples/java/ceph-s3-upload/README.md b/examples/java/ceph-s3-upload/README.md
new file mode 100644
index 00000000000..235d43666d1
--- /dev/null
+++ b/examples/java/ceph-s3-upload/README.md
@@ -0,0 +1,16 @@
+# Introduction
+This directory contains Java code examples on how to upload an object to an S3 bucket running on a Ceph RGW cluster.
+
+# Prerequisites
+Linux machine running an RGW Ceph cluster. Preferrably started with the ``OSD=1 MON=1 MDS=0 MGR=0 RGW=1 ../src/vstart.sh --debug --new `` command.
+Java and Maven installed on the Linux machine.
+
+## Workflow Procedure
+1. Install AWS CLI version 1 on your Linux machine as explained [here](https://docs.aws.amazon.com/cli/v1/userguide/install-linux.html)
+2. Create a bucket on the Ceph cluster with the command
+``
+aws --endpoint-url http://localhost:8000 s3 mb s3://sample-bucket
+``
+3. Navigate through your file system into the ``ceph-s3-upload`` folder using your terminal. Please ensure you see the pom.xml file.
+4. Run `` mvn clean package `` to install the required Java packages on the system.
+5. Once successful, run `` java -jar target/ceph-s3-upload-1.0-SNAPSHOT-jar-with-dependencies.jar sample-bucket ceph-s3-upload.txt `` to test out Java s3 object upload on Ceph RGW cluster.
diff --git a/examples/java/ceph-s3-upload/ceph-s3-upload.txt b/examples/java/ceph-s3-upload/ceph-s3-upload.txt
new file mode 100644
index 00000000000..02e6ceb47ee
--- /dev/null
+++ b/examples/java/ceph-s3-upload/ceph-s3-upload.txt
@@ -0,0 +1 @@
+This file will be uploaded to Ceph S3 storage
diff --git a/examples/java/ceph-s3-upload/pom.xml b/examples/java/ceph-s3-upload/pom.xml
new file mode 100644
index 00000000000..bcd6f0805c5
--- /dev/null
+++ b/examples/java/ceph-s3-upload/pom.xml
@@ -0,0 +1,67 @@
+
+ 4.0.0
+ org.example.cephs3upload
+ ceph-s3-upload
+ jar
+ 1.0-SNAPSHOT
+ ceph-s3-upload
+ http://maven.apache.org
+
+ 1.8
+ 1.8
+
+
+
+
+ com.amazonaws
+ aws-java-sdk-bom
+ 1.12.201
+ pom
+ import
+
+
+
+
+
+ com.amazonaws
+ aws-java-sdk-s3
+
+
+ junit
+ junit
+ 3.8.1
+ test
+
+
+
+
+
+ true
+ maven-assembly-plugin
+
+
+
+ package
+
+ single
+
+
+
+
+
+
+ true
+ org.example.cephs3upload.App
+
+
+
+ jar-with-dependencies
+
+
+
+
+
+
diff --git a/examples/java/ceph-s3-upload/src/main/java/org/example/cephs3upload/App.java b/examples/java/ceph-s3-upload/src/main/java/org/example/cephs3upload/App.java
new file mode 100644
index 00000000000..32f334cfbe6
--- /dev/null
+++ b/examples/java/ceph-s3-upload/src/main/java/org/example/cephs3upload/App.java
@@ -0,0 +1,51 @@
+package org.example.cephs3upload;
+
+import com.amazonaws.services.s3.model.AmazonS3Exception;
+import com.amazonaws.services.s3.AmazonS3;
+import com.amazonaws.services.s3.AmazonS3ClientBuilder;
+import com.amazonaws.client.builder.AwsClientBuilder;
+import com.amazonaws.auth.AWSStaticCredentialsProvider;
+import com.amazonaws.auth.BasicAWSCredentials;
+
+import java.io.File;
+import java.nio.file.Paths;
+
+public class App
+{
+ public static void main( String[] args )
+ {
+ final String USAGE = "\n" +
+ "To run this example, supply the name of an S3 bucket and a file to\n" +
+ "upload to it.\n" +
+ "\n" +
+ "Ex: java -jar target/ceph-s3-upload-1.0-SNAPSHOT-jar-with-dependencies.jar \n";
+
+ if (args.length < 2) {
+ System.out.println(USAGE);
+ System.exit(1);
+ }
+
+ String bucket_name = args[0];
+ String file_path = args[1];
+ String key_name = Paths.get(file_path).getFileName().toString();
+
+ System.out.format("Uploading %s to S3 bucket %s...\n", file_path, bucket_name);
+ // Put in the CEPH RGW access and secret keys here in that order "access key" "secret key"
+ // Must also be specified here
+ BasicAWSCredentials credentials = new BasicAWSCredentials("0555b35654ad1656d804","h7GhxuBLTrlhVUyxSPUKUV8r/2EI4ngqJxD7iBdBYLhwluN30JaT3Q==");
+ // Note That the AWSClient builder takes in the endpoint and the region
+ // This has to be specified in this file
+ final AmazonS3 s3 = AmazonS3ClientBuilder
+ .standard()
+ .withCredentials(new AWSStaticCredentialsProvider(credentials))
+ .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration("http://127.0.0.1:8000", "default"))
+ .build();
+ try {
+ s3.putObject(bucket_name, key_name, new File(file_path));
+ } catch (AmazonS3Exception e) {
+ System.err.println(e.getMessage()); // raises more explicit error message than e.getErrorMessage() e.g when Bucket is not available
+ System.exit(1);
+ }
+ System.out.println("Object upload successful!");
+ }
+}
diff --git a/examples/java/ceph-s3-upload/src/test/java/org/example/cephs3upload/AppTest.java b/examples/java/ceph-s3-upload/src/test/java/org/example/cephs3upload/AppTest.java
new file mode 100644
index 00000000000..1c8075253db
--- /dev/null
+++ b/examples/java/ceph-s3-upload/src/test/java/org/example/cephs3upload/AppTest.java
@@ -0,0 +1,38 @@
+package org.example.cephs3upload;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest
+ extends TestCase
+{
+ /**
+ * Create the test case
+ *
+ * @param testName name of the test case
+ */
+ public AppTest( String testName )
+ {
+ super( testName );
+ }
+
+ /**
+ * @return the suite of tests being tested
+ */
+ public static Test suite()
+ {
+ return new TestSuite( AppTest.class );
+ }
+
+ /**
+ * Rigourous Test :-)
+ */
+ public void testApp()
+ {
+ assertTrue( true );
+ }
+}