Skip to content

Commit e2b72ed

Browse files
committed
Added JSON-P resource and tests.
1 parent e6e947f commit e2b72ed

File tree

3 files changed

+289
-0
lines changed

3 files changed

+289
-0
lines changed
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package com.packtpub.javaee8;
2+
3+
import javax.annotation.PostConstruct;
4+
import javax.enterprise.context.ApplicationScoped;
5+
import javax.json.*;
6+
import javax.ws.rs.*;
7+
import javax.ws.rs.core.MediaType;
8+
import java.io.InputStream;
9+
import java.util.logging.Level;
10+
import java.util.logging.Logger;
11+
12+
@ApplicationScoped
13+
@Path("json-p")
14+
@Produces(MediaType.APPLICATION_JSON)
15+
public class JsonpResource {
16+
17+
private static final Logger LOGGER = Logger.getAnonymousLogger();
18+
19+
private JsonArray jsonArray;
20+
21+
@PostConstruct
22+
public void initialize() {
23+
this.jsonArray = Json.createArrayBuilder()
24+
.add(Json.createObjectBuilder()
25+
.add("aString", "Hello Json-P 1")
26+
.add("aInteger", 42)
27+
.add("aBoolean", false)
28+
.add("aNullValue", JsonValue.NULL))
29+
.add(Json.createObjectBuilder()
30+
.add("aString", "Hello Json-P 2")
31+
.add("aInteger", 23)
32+
.add("aBoolean", true))
33+
.build();
34+
}
35+
36+
@GET
37+
public JsonArray marshall() {
38+
return jsonArray;
39+
}
40+
41+
@POST
42+
@Consumes(MediaType.APPLICATION_JSON)
43+
public void unmarshall(InputStream jsonBody) {
44+
JsonReader reader = Json.createReader(jsonBody);
45+
this.jsonArray = reader.readArray();
46+
47+
LOGGER.log(Level.INFO, "Unmarshalled JSON-P {0}.", jsonArray);
48+
}
49+
50+
@PATCH
51+
@Consumes(MediaType.APPLICATION_JSON_PATCH_JSON)
52+
public void patch(JsonArray jsonPatchArray) {
53+
LOGGER.log(Level.INFO, "Unmarshalled JSON-P Patch {0}.", jsonPatchArray);
54+
55+
JsonPatch jsonPatch = Json.createPatchBuilder(jsonPatchArray).build();
56+
this.jsonArray = jsonPatch.apply(jsonArray);
57+
LOGGER.log(Level.INFO, "Patched {0}.", jsonArray);
58+
}
59+
}
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
package com.packtpub.javaee8;
2+
3+
import org.glassfish.jersey.client.HttpUrlConnectorProvider;
4+
import org.junit.After;
5+
import org.junit.Before;
6+
import org.junit.FixMethodOrder;
7+
import org.junit.Test;
8+
import org.junit.runners.MethodSorters;
9+
10+
import javax.json.Json;
11+
import javax.json.JsonArray;
12+
import javax.ws.rs.HttpMethod;
13+
import javax.ws.rs.client.Client;
14+
import javax.ws.rs.client.ClientBuilder;
15+
import javax.ws.rs.client.Entity;
16+
import javax.ws.rs.client.WebTarget;
17+
import javax.ws.rs.core.MediaType;
18+
import javax.ws.rs.core.Response;
19+
import java.util.concurrent.TimeUnit;
20+
21+
import static org.assertj.core.api.Assertions.assertThat;
22+
23+
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
24+
public class JsonpResourceIntegrationTest {
25+
26+
private Client client;
27+
private WebTarget webTarget;
28+
29+
@Before
30+
public void setUp() throws Exception {
31+
client = ClientBuilder.newBuilder()
32+
.property(HttpUrlConnectorProvider.SET_METHOD_WORKAROUND, true)
33+
.connectTimeout(5, TimeUnit.SECONDS).readTimeout(5, TimeUnit.SECONDS)
34+
.build();
35+
36+
webTarget = client.target("http://localhost:8080").path("/content-service/api").path("/json-p");
37+
}
38+
39+
@After
40+
public void tearDown() throws Exception {
41+
client.close();
42+
}
43+
44+
@Test
45+
public void _1_GetJsonp() {
46+
JsonArray jsonArray = webTarget.request().accept(MediaType.APPLICATION_JSON).get(JsonArray.class);
47+
assertThat(jsonArray.size()).isGreaterThanOrEqualTo(1);
48+
}
49+
50+
@Test
51+
public void _2_PostJsonp() {
52+
JsonArray jsonArray = Json.createArrayBuilder()
53+
.add(Json.createObjectBuilder()
54+
.add("aString", "Updated Json-P")
55+
.add("aInteger", 23)
56+
.add("aBoolean", true)
57+
.add("aNullValue", "Not NULL"))
58+
.build();
59+
60+
Response response = webTarget.request().post(Entity.json(jsonArray));
61+
assertThat(response.getStatus()).isEqualTo(204);
62+
}
63+
64+
@Test
65+
public void _3_GetJsonpAfterPost() {
66+
JsonArray jsonArray = webTarget.request().accept(MediaType.APPLICATION_JSON).get(JsonArray.class);
67+
assertThat(jsonArray.getJsonObject(0).getString("aString")).isEqualTo("Updated Json-P");
68+
}
69+
70+
@Test
71+
public void _4_PatchJsonp() {
72+
JsonArray jsonArray = Json.createArrayBuilder()
73+
.add(Json.createObjectBuilder()
74+
.add("op", "replace")
75+
.add("path", "/0/aString")
76+
.add("value", "Patched Json-P"))
77+
.build();
78+
79+
Response response = webTarget.request().method(HttpMethod.PATCH, Entity.entity(jsonArray, MediaType.APPLICATION_JSON_PATCH_JSON));
80+
assertThat(response.getStatus()).isEqualTo(204);
81+
}
82+
83+
@Test
84+
public void _5_GetJsonpAfterPatch() {
85+
JsonArray jsonArray = webTarget.request().accept(MediaType.APPLICATION_JSON).get(JsonArray.class);
86+
assertThat(jsonArray.getJsonObject(0).getString("aString")).isEqualTo("Patched Json-P");
87+
}
88+
}
Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
package com.packtpub.javaee8;
2+
3+
import org.junit.Test;
4+
5+
import javax.json.*;
6+
import javax.json.stream.JsonGenerator;
7+
import javax.json.stream.JsonParser;
8+
import java.io.StringReader;
9+
import java.io.StringWriter;
10+
11+
import static org.assertj.core.api.Assertions.assertThat;
12+
13+
public class JsonpTest {
14+
15+
@Test
16+
public void testJsonParser() {
17+
JsonParser parser = Json.createParser(new StringReader("{ \"aString\": \"Hello Json-P\" }"));
18+
19+
JsonParser.Event next = parser.next();
20+
assertThat(next).isEqualTo(JsonParser.Event.START_OBJECT);
21+
22+
JsonObject jsonObject = parser.getObject();
23+
assertThat(jsonObject).isNotNull();
24+
25+
String aString = jsonObject.getString("aString");
26+
assertThat(aString).isEqualTo("Hello Json-P");
27+
}
28+
29+
@Test
30+
public void testJsonGenerator() {
31+
StringWriter writer = new StringWriter();
32+
JsonGenerator generator = Json.createGenerator(writer);
33+
generator.writeStartObject()
34+
.write("aString", "Hello Json-P")
35+
.writeStartArray("arrayOfInt")
36+
.write(1).write(2).write(3)
37+
.writeEnd()
38+
.writeEnd()
39+
.close();
40+
41+
assertThat(writer.toString()).isEqualTo("{\"aString\":\"Hello Json-P\",\"arrayOfInt\":[1,2,3]}");
42+
}
43+
44+
@Test
45+
public void testJsonBuilder() {
46+
JsonArray values = Json.createArrayBuilder()
47+
.add(Json.createObjectBuilder()
48+
.add("aString", "Hello Json-P 1")
49+
.add("aInteger", 42)
50+
.add("aBoolean", false)
51+
.add("aNullValue", JsonValue.NULL)
52+
.build())
53+
.add(Json.createObjectBuilder()
54+
.add("aString", "Hello Json-P 2")
55+
.add("aInteger", 23)
56+
.add("aBoolean", true)
57+
.build())
58+
.build();
59+
60+
assertThat(values).isNotNull();
61+
assertThat(values.size()).isEqualTo(2);
62+
assertThat(values.getJsonObject(1).getBoolean("aBoolean")).isTrue();
63+
}
64+
65+
@Test
66+
public void testJsonReadObject() {
67+
JsonReader jsonReader = Json.createReader(new StringReader("{\"aString\":\"Hello Json-P\",\"arrayOfInt\":[1,2,3]}"));
68+
JsonObject jsonObject = jsonReader.readObject();
69+
70+
assertThat(jsonObject).isNotNull();
71+
assertThat(jsonObject.getString("aString")).isEqualTo("Hello Json-P");
72+
assertThat(jsonObject.getJsonArray("arrayOfInt").getInt(1)).isEqualTo(2);
73+
}
74+
75+
@Test
76+
public void testJsonReadStructure() {
77+
JsonReader jsonReader = Json.createReader(new StringReader("{\"aString\":\"Hello Json-P\",\"arrayOfInt\":[1,2,3]}"));
78+
JsonStructure jsonStructure = jsonReader.read();
79+
80+
assertThat(jsonStructure.getValueType()).isEqualTo(JsonValue.ValueType.OBJECT);
81+
assertThat(jsonStructure.asJsonObject()).isNotNull();
82+
83+
assertThat(jsonStructure.getValue("/aString")).isInstanceOf(JsonString.class);
84+
assertThat(jsonStructure.getValue("/arrayOfInt")).isInstanceOf(JsonArray.class);
85+
assertThat(jsonStructure.getValue("/arrayOfInt/1")).isInstanceOf(JsonNumber.class);
86+
}
87+
88+
@Test
89+
public void testJsonPointer() {
90+
JsonReader jsonReader = Json.createReader(new StringReader("{\"aString\":\"Hello Json-P\",\"arrayOfInt\":[1,2,3]}"));
91+
JsonObject jsonObject = jsonReader.readObject();
92+
JsonArray jsonArray = jsonObject.getJsonArray("arrayOfInt");
93+
94+
// access an array value by index
95+
JsonPointer jsonPointer = Json.createPointer("/arrayOfInt/1");
96+
JsonValue jsonValue = jsonPointer.getValue(jsonObject);
97+
assertThat(jsonValue).isInstanceOf(JsonNumber.class);
98+
assertThat(jsonValue).isEqualTo(jsonArray.get(1));
99+
100+
// replace the array value by index
101+
jsonObject = jsonPointer.replace(jsonObject, Json.createValue(42));
102+
jsonArray = jsonObject.getJsonArray("arrayOfInt");
103+
assertThat(jsonArray.getInt(1)).isEqualTo(42);
104+
105+
// remove the array value by index
106+
jsonObject = jsonPointer.remove(jsonObject);
107+
jsonArray = jsonObject.getJsonArray("arrayOfInt");
108+
assertThat(jsonArray.size()).isEqualTo(2);
109+
}
110+
111+
@Test
112+
public void testJsonPatch() {
113+
JsonReader jsonReader = Json.createReader(new StringReader("{\"aString\":\"Hello Json-P\",\"arrayOfInt\":[1,2,3]}"));
114+
JsonObject jsonObject = jsonReader.readObject();
115+
116+
JsonPatch patch = Json.createPatchBuilder()
117+
.replace("/aString", "Patched Json-P.")
118+
.remove("/arrayOfInt/1")
119+
.build();
120+
121+
jsonObject = patch.apply(jsonObject);
122+
assertThat(jsonObject.getString("aString")).isEqualTo("Patched Json-P.");
123+
assertThat(jsonObject.getJsonArray("arrayOfInt").size()).isEqualTo(2);
124+
}
125+
126+
@Test
127+
public void testJsonDiff() {
128+
JsonObject source = Json.createObjectBuilder().add("aString", "abc").build();
129+
JsonObject target = Json.createObjectBuilder().add("aString", "xyz").build();
130+
131+
JsonPatch diff = Json.createDiff(source, target);
132+
JsonObject replace = diff.toJsonArray().getJsonObject(0);
133+
assertThat(replace.getString("op")).isEqualTo("replace");
134+
assertThat(replace.getString("path")).isEqualTo("/aString");
135+
assertThat(replace.getString("value")).isEqualTo("xyz");
136+
137+
source = diff.apply(source);
138+
assertThat(source).isEqualTo(target);
139+
}
140+
141+
142+
}

0 commit comments

Comments
 (0)