diff --git a/jsonb/mapping/pom.xml b/jsonb/mapping/pom.xml new file mode 100644 index 0000000..7904deb --- /dev/null +++ b/jsonb/mapping/pom.xml @@ -0,0 +1,14 @@ + + 4.0.0 + + + org.javaee8 + jsonb + 1.0-SNAPSHOT + + + mapping + war + Java EE 8 Samples: JSON-B - Mapping + + diff --git a/jsonb/mapping/src/main/java/org/javaee8/jsonb/mapping/controller/ApplicationConfig.java b/jsonb/mapping/src/main/java/org/javaee8/jsonb/mapping/controller/ApplicationConfig.java new file mode 100644 index 0000000..b285fee --- /dev/null +++ b/jsonb/mapping/src/main/java/org/javaee8/jsonb/mapping/controller/ApplicationConfig.java @@ -0,0 +1,26 @@ +package org.javaee8.jsonb.mapping.controller; + +import java.util.HashSet; +import java.util.Set; +import javax.ws.rs.core.Application; + +/** + * + * @author Gaurav Gupta + * + */ +@javax.ws.rs.ApplicationPath("resources") +public class ApplicationConfig extends Application { + + @Override + public Set> getClasses() { + Set> resources = new HashSet<>(); + addRestResourceClasses(resources); + return resources; + } + + private void addRestResourceClasses(Set> resources) { + resources.add(org.javaee8.jsonb.mapping.controller.PersonController.class); + } + +} diff --git a/jsonb/mapping/src/main/java/org/javaee8/jsonb/mapping/controller/PersonController.java b/jsonb/mapping/src/main/java/org/javaee8/jsonb/mapping/controller/PersonController.java new file mode 100644 index 0000000..16c5e34 --- /dev/null +++ b/jsonb/mapping/src/main/java/org/javaee8/jsonb/mapping/controller/PersonController.java @@ -0,0 +1,37 @@ +package org.javaee8.jsonb.mapping.controller; + +import org.javaee8.jsonb.mapping.domain.Person; +import java.util.Arrays; +import java.util.List; +import javax.ws.rs.GET; +import javax.ws.rs.Path; + +/** + * + * @author Gaurav Gupta + */ +@Path("/api/person") +public class PersonController { + + /** + * GET : get all the people. + * + * @return the Response with status 200 (OK) and the list of people in body + * + */ + @GET + public List getAllPeople() { + Person person1 = new Person(); + person1.setName("Ondrej"); + person1.setAddress("Prague"); + person1.setPin("Mihalyi"); + + Person person2 = new Person(); + person2.setName("Mert"); + person2.setAddress("Turkey"); + person2.setPin("Caliskan"); + + return Arrays.asList(person1, person2); + } + +} diff --git a/jsonb/mapping/src/main/java/org/javaee8/jsonb/mapping/domain/Person.java b/jsonb/mapping/src/main/java/org/javaee8/jsonb/mapping/domain/Person.java new file mode 100644 index 0000000..430e27e --- /dev/null +++ b/jsonb/mapping/src/main/java/org/javaee8/jsonb/mapping/domain/Person.java @@ -0,0 +1,54 @@ +package org.javaee8.jsonb.mapping.domain; + +import java.io.Serializable; +import javax.json.bind.annotation.JsonbProperty; +import javax.json.bind.annotation.JsonbTransient; + +/** + * + * @author Gaurav Gupta + * + */ +public class Person implements Serializable { + + /** + * JsonbProperty is used to change name of one particular property. + * Property 'name' will be serialized to 'pname' property + */ + @JsonbProperty("pname") + private String name; + + private String address; + + /** + * Property 'pin' will be ignored by JSON Binding engine + */ + @JsonbTransient + private String pin; + + + public String getName() { + return this.name; + } + + public void setName(String name) { + this.name = name; + } + + public String getAddress() { + return this.address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getPin() { + return pin; + } + + public void setPin(String pin) { + this.pin = pin; + } + +} \ No newline at end of file diff --git a/jsonb/mapping/src/test/java/org/javaee8/jsonb/mapping/controller/PersonControllerTest.java b/jsonb/mapping/src/test/java/org/javaee8/jsonb/mapping/controller/PersonControllerTest.java new file mode 100644 index 0000000..8c6df0d --- /dev/null +++ b/jsonb/mapping/src/test/java/org/javaee8/jsonb/mapping/controller/PersonControllerTest.java @@ -0,0 +1,63 @@ +package org.javaee8.jsonb.mapping.controller; + +import org.javaee8.jsonb.mapping.controller.ApplicationConfig; +import org.javaee8.jsonb.mapping.controller.PersonController; +import java.net.URI; +import java.net.URL; +import java.util.List; +import javax.json.bind.Jsonb; +import javax.json.bind.JsonbBuilder; +import javax.ws.rs.client.Client; +import javax.ws.rs.client.ClientBuilder; +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.Response; +import org.javaee8.jsonb.mapping.domain.Person; +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.arquillian.test.api.ArquillianResource; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.junit.Test; +import org.jboss.shrinkwrap.api.spec.WebArchive; +import static org.junit.Assert.assertEquals; +import org.junit.Before; +import org.junit.runner.RunWith; + +/** + * + * @author Gaurav Gupta + * + */ +@RunWith(Arquillian.class) +public class PersonControllerTest { + + private static final String RESOURCE_PATH = "api/person"; + + @ArquillianResource + private URL base; + + private static WebTarget target; + + @Deployment + public static WebArchive createDeployment() { + return ShrinkWrap.create(WebArchive.class) + .addClass(Person.class) + .addClass(PersonController.class) + .addClass(ApplicationConfig.class); + } + + @Before + public void setUpClass() throws Exception { + Client client = ClientBuilder.newClient(); + target = client.target(URI.create(new URL(base, "resources/").toExternalForm())); + } + + @Test + public void testJSONB() throws Exception { + Jsonb jsonb = JsonbBuilder.create(); + // Get all the people + Response response = target.path(RESOURCE_PATH).request().get(); + String val = jsonb.toJson(response.readEntity(List.class)); + assertEquals("[{\"address\":\"Prague\",\"pname\":\"Ondrej\"},{\"address\":\"Turkey\",\"pname\":\"Mert\"}]", val); + } + +} diff --git a/jsonb/pom.xml b/jsonb/pom.xml new file mode 100644 index 0000000..6a00f10 --- /dev/null +++ b/jsonb/pom.xml @@ -0,0 +1,25 @@ + + 4.0.0 + + + org.javaee8 + samples-parent + 1.0-SNAPSHOT + + + jsonb + pom + Java EE 8 Samples: JSON-B + + + mapping + + + + + org.javaee8 + test-utils + ${project.version} + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index a97a21c..ef170ec 100644 --- a/pom.xml +++ b/pom.xml @@ -72,6 +72,7 @@ servlet jsf cdi + jsonb @@ -123,6 +124,20 @@ provided + + javax.ws.rs + javax.ws.rs-api + 2.1 + provided + + + + javax.json.bind + javax.json.bind-api + 1.0 + provided + + javax.annotation javax.annotation-api