diff --git a/java/serverless_lab1/.gitignore b/java/serverless_lab1/.gitignore
index ebd987f..f7e6447 100644
--- a/java/serverless_lab1/.gitignore
+++ b/java/serverless_lab1/.gitignore
@@ -72,4 +72,5 @@ fabric.properties
# Maven
log/
-target/
\ No newline at end of file
+target/
+dependency-reduced-pom.xml
\ No newline at end of file
diff --git a/java/serverless_lab1/README.md b/java/serverless_lab1/README.md
new file mode 100644
index 0000000..cf2e7db
--- /dev/null
+++ b/java/serverless_lab1/README.md
@@ -0,0 +1,112 @@
+## Steps to finish Lab
+
+### Step 1: Install IBMCloud CLI
+
+### Step 2: Deploy the function to IBM Cloud
+Run mvn package to create the fat jar
+```
+» mvn package [16:14:07]
+[INFO] Scanning for projects...
+[INFO]
+[INFO] ---------< com.ibmdevelopersf.serverless_lab1:serverless_lab1 >---------
+[INFO] Building serverless_lab1 1.0-SNAPSHOT
+[INFO] --------------------------------[ jar ]---------------------------------
+[INFO]
+[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ serverless_lab1 ---
+[INFO] Using 'UTF-8' encoding to copy filtered resources.
+[INFO] skip non existing resourceDirectory /Users/ulidder/Documents/icloud-documents/code-upkar/serverless-labs/java/serverless_lab1/src/main/resources
+[INFO]
+[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ serverless_lab1 ---
+[INFO] Changes detected - recompiling the module!
+[INFO] Compiling 1 source file to /Users/ulidder/Documents/icloud-documents/code-upkar/serverless-labs/java/serverless_lab1/target/classes
+[INFO]
+[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ serverless_lab1 ---
+[INFO] Using 'UTF-8' encoding to copy filtered resources.
+[INFO] skip non existing resourceDirectory /Users/ulidder/Documents/icloud-documents/code-upkar/serverless-labs/java/serverless_lab1/src/test/resources
+[INFO]
+[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ serverless_lab1 ---
+[INFO] Changes detected - recompiling the module!
+[INFO] Compiling 1 source file to /Users/ulidder/Documents/icloud-documents/code-upkar/serverless-labs/java/serverless_lab1/target/test-classes
+[INFO]
+[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ serverless_lab1 ---
+[INFO] Surefire report directory: /Users/ulidder/Documents/icloud-documents/code-upkar/serverless-labs/java/serverless_lab1/target/surefire-reports
+
+-------------------------------------------------------
+ T E S T S
+-------------------------------------------------------
+Running com.ibmdevelopersf.serverless_lab1.ServerlessLab1Test
+Nov 26, 2019 4:14:14 PM com.ibmdevelopersf.serverless_lab1.ServerlessLab1 main
+INFO: exiting ServerlessLab1
+Nov 26, 2019 4:14:14 PM com.ibmdevelopersf.serverless_lab1.ServerlessLab1 main
+INFO: exiting ServerlessLab1
+Nov 26, 2019 4:14:14 PM com.ibmdevelopersf.serverless_lab1.ServerlessLab1 main
+INFO: exiting ServerlessLab1
+Nov 26, 2019 4:14:14 PM com.ibmdevelopersf.serverless_lab1.ServerlessLab1 main
+INFO: exiting ServerlessLab1
+Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.082 sec
+
+Results :
+
+Tests run: 4, Failures: 0, Errors: 0, Skipped: 0
+
+[INFO]
+[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ serverless_lab1 ---
+[INFO] Building jar: /Users/ulidder/Documents/icloud-documents/code-upkar/serverless-labs/java/serverless_lab1/target/serverless_lab1.jar
+[INFO]
+[INFO] --- maven-shade-plugin:3.1.0:shade (default) @ serverless_lab1 ---
+[INFO] Including com.google.code.gson:gson:jar:2.8.2 in the shaded jar.
+[INFO] Replacing original artifact with shaded artifact.
+[INFO] Replacing /Users/ulidder/Documents/icloud-documents/code-upkar/serverless-labs/java/serverless_lab1/target/serverless_lab1.jar with /Users/ulidder/Documents/icloud-documents/code-upkar/serverless-labs/java/serverless_lab1/target/serverless_lab1-1.0-SNAPSHOT-shaded.jar
+[INFO] Dependency-reduced POM written at: /Users/ulidder/Documents/icloud-documents/code-upkar/serverless-labs/java/serverless_lab1/dependency-reduced-pom.xml
+[INFO] ------------------------------------------------------------------------
+[INFO] BUILD SUCCESS
+[INFO] ------------------------------------------------------------------------
+[INFO] Total time: 3.398 s
+[INFO] Finished at: 2019-11-26T16:14:15-08:00
+[INFO] ------------------------------------------------------------------------
+
+```
+
+This creates `serverless_lab1.jar` file in `./target` folder.
+
+### Step 3: deploy the function to IBM Cloud using the CLI
+1. Ensure you are logged into IBM Cloud
+```$java
+» ibmcloud target [16:15:49]
+
+
+API endpoint: https://cloud.ibm.com
+Region: us-south
+User: upkar.ibm.watson.5@gmail.com
+Account: Upkar Lidder's Account (a086ce7d00df4423ab024b123b587e76)
+Resource group: No resource group targeted, use 'ibmcloud target -g RESOURCE_GROUP'
+CF API endpoint: https://api.us-south.cf.cloud.ibm.com (API version: 2.142.0)
+Org: upkar.ibm.watson.5@gmail.com
+Space: dev
+
+```
+
+2. deploy the jar file to ibm cloud
+```$xslt
+» ibmcloud fn action update helloJava target/serverless_lab1.jar --kind java:8 --main com.ibmdevelopersf.serverless_lab1.ServerlessLab1
+ok: updated action helloJava
+
+```
+
+3. invoke the function to ensure it works
+```$xslt
+» ibmcloud fn action invoke helloJava -r
+{
+ "greeting": "Hello World!"
+}
+
+```
+
+4. Let's try with a param now
+```$xslt
+» ibmcloud fn action invoke helloJava -r -p name "upkar lidder"
+{
+ "greeting": "Hello upkar lidder"
+}
+
+```
diff --git a/java/serverless_lab1/pom.xml b/java/serverless_lab1/pom.xml
index 4d20d4d..7d6b3c0 100644
--- a/java/serverless_lab1/pom.xml
+++ b/java/serverless_lab1/pom.xml
@@ -10,66 +10,44 @@
serverless_lab1
- http://www.example.com
+ https://github.com/IBMDeveloperSF/serverless-labs
UTF-8
1.7
1.7
+ 2.8.2
+
+ com.google.code.gson
+ gson
+ ${gson.version}
+
junit
junit
- 4.11
+ 4.12
test
-
-
-
-
-
- maven-clean-plugin
- 3.1.0
-
-
-
- maven-resources-plugin
- 3.0.2
-
-
- maven-compiler-plugin
- 3.8.0
-
-
- maven-surefire-plugin
- 2.22.1
-
-
- maven-jar-plugin
- 3.0.2
-
-
- maven-install-plugin
- 2.5.2
-
-
- maven-deploy-plugin
- 2.8.2
-
-
-
- maven-site-plugin
- 3.7.1
-
-
- maven-project-info-reports-plugin
- 3.0.0
-
-
-
+ serverless_lab1
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+ 3.1.0
+
+
+ package
+
+ shade
+
+
+
+
+
diff --git a/java/serverless_lab1/src/main/java/com/ibmdevelopersf/serverless_lab1/App.java b/java/serverless_lab1/src/main/java/com/ibmdevelopersf/serverless_lab1/App.java
deleted file mode 100644
index 53d51c5..0000000
--- a/java/serverless_lab1/src/main/java/com/ibmdevelopersf/serverless_lab1/App.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.ibmdevelopersf.serverless_lab1;
-
-/**
- * Hello world!
- *
- */
-public class App
-{
- public static void main( String[] args )
- {
- System.out.println( "Hello World!" );
- }
-}
diff --git a/java/serverless_lab1/src/main/java/com/ibmdevelopersf/serverless_lab1/ServerlessLab1.java b/java/serverless_lab1/src/main/java/com/ibmdevelopersf/serverless_lab1/ServerlessLab1.java
new file mode 100644
index 0000000..e7e4a35
--- /dev/null
+++ b/java/serverless_lab1/src/main/java/com/ibmdevelopersf/serverless_lab1/ServerlessLab1.java
@@ -0,0 +1,26 @@
+package com.ibmdevelopersf.serverless_lab1;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+
+import java.util.logging.Logger;
+
+public class ServerlessLab1 {
+
+ protected static final Logger logger = Logger.getLogger("ServerlessLab1");
+
+ public static JsonObject main(JsonObject args) {
+ JsonObject response = new JsonObject();
+ JsonPrimitive nameArg = args.getAsJsonPrimitive("name");
+ String result;
+ if (nameArg == null) {
+ result = "Hello World!";
+ } else {
+ result = "Hello " + nameArg.getAsString();
+ }
+ response.addProperty("greeting", result);
+
+ logger.info("exiting ServerlessLab1");
+ return response;
+ }
+}
diff --git a/java/serverless_lab1/src/test/java/com/ibmdevelopersf/serverless_lab1/AppTest.java b/java/serverless_lab1/src/test/java/com/ibmdevelopersf/serverless_lab1/AppTest.java
deleted file mode 100644
index dac5d8e..0000000
--- a/java/serverless_lab1/src/test/java/com/ibmdevelopersf/serverless_lab1/AppTest.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.ibmdevelopersf.serverless_lab1;
-
-import static org.junit.Assert.assertTrue;
-
-import org.junit.Test;
-
-/**
- * Unit test for simple App.
- */
-public class AppTest
-{
- /**
- * Rigorous Test :-)
- */
- @Test
- public void shouldAnswerWithTrue()
- {
- assertTrue( true );
- }
-}
diff --git a/java/serverless_lab1/src/test/java/com/ibmdevelopersf/serverless_lab1/ServerlessLab1Test.java b/java/serverless_lab1/src/test/java/com/ibmdevelopersf/serverless_lab1/ServerlessLab1Test.java
new file mode 100644
index 0000000..556fba0
--- /dev/null
+++ b/java/serverless_lab1/src/test/java/com/ibmdevelopersf/serverless_lab1/ServerlessLab1Test.java
@@ -0,0 +1,51 @@
+package com.ibmdevelopersf.serverless_lab1;
+
+import static org.hamcrest.CoreMatchers.*;
+import static org.junit.Assert.assertNotNull;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+import com.google.gson.JsonObject;
+
+import org.hamcrest.core.IsEqual;
+import org.junit.Test;
+
+/**
+ * Unit test for simple App.
+ */
+public class ServerlessLab1Test {
+
+ @Test
+ public void testMainFunctionDoesNotReturnNull() {
+ JsonObject args = new JsonObject();
+ JsonObject response = ServerlessLab1.main(args);
+ assertNotNull(response);
+ }
+
+
+ @Test
+ public void testMainFunctionReturnsJsonObject() {
+ JsonObject args = new JsonObject();
+ JsonObject response = ServerlessLab1.main(args);
+ assertThat(response, instanceOf(JsonObject.class));
+ }
+
+ @Test
+ public void testMainFunctionReturnsHelloWorld() {
+ JsonObject args = new JsonObject();
+ final String greeting = "Hello World!";
+ JsonObject response = ServerlessLab1.main(args);
+ assertThat(response.get("greeting"), is(notNullValue()));
+ assertThat(response.get("greeting").getAsString(), is(equalTo(greeting)));
+ }
+
+ @Test
+ public void testMainFunctionReturnsGreetingsWithName() {
+ JsonObject args = new JsonObject();
+ final String name = "Upkar Lidder";
+ args.addProperty("name", name);
+ JsonObject response = ServerlessLab1.main(args);
+ assertThat(response.get("greeting"), is(notNullValue()));
+ assertThat(response.get("greeting").getAsString(), is(equalTo("Hello "
+ + name)));
+ }
+}