Skip to content

Commit 0f9fef5

Browse files
author
eugenp
committed
minor jaackson example and new streaming logic for large files
1 parent ff141b5 commit 0f9fef5

File tree

5 files changed

+128
-3
lines changed

5 files changed

+128
-3
lines changed

core-java/src/test/java/org/baeldung/java/CoreJavaIoIntegrationTest.java

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import java.util.Scanner;
77

88
import org.apache.commons.io.FileUtils;
9+
import org.apache.commons.io.LineIterator;
910
import org.junit.Test;
1011
import org.slf4j.Logger;
1112
import org.slf4j.LoggerFactory;
@@ -29,9 +30,9 @@ public final void givenUsingGuava_whenIteratingAFile_thenCorrect() throws IOExce
2930
}
3031

3132
@Test
32-
public final void givenUsingCommonsIo_whenIteratingAFile_thenCorrect() throws IOException {
33-
final String path = "G:\\full\\train\\input\\" + "trainDataNegative.csv";
34-
// final String path = "G:\\full\\train\\input\\" + "trainDataPositive.csv";
33+
public final void givenUsingCommonsIo_whenIteratingAFileInMemory_thenCorrect() throws IOException {
34+
// final String path = "G:\\full\\train\\input\\" + "trainDataNegative.csv";
35+
final String path = "G:\\full\\train\\input\\" + "trainDataPositive.csv";
3536

3637
logMemory();
3738
FileUtils.readLines(new File(path));
@@ -70,6 +71,26 @@ public final void whenStreamingThroughAFile_thenCorrect() throws IOException {
7071
logMemory();
7172
}
7273

74+
@Test
75+
public final void givenUsingApacheIo_whenStreamingThroughAFile_thenCorrect() throws IOException {
76+
final String path = "G:\\full\\train\\input\\" + "trainDataNegative.csv";
77+
// final String path = "G:\\full\\train\\input\\" + "trainDataPositive.csv";
78+
79+
logMemory();
80+
81+
final LineIterator it = FileUtils.lineIterator(new File(path), "UTF-8");
82+
try {
83+
while (it.hasNext()) {
84+
final String line = it.nextLine();
85+
// do something with line
86+
}
87+
} finally {
88+
LineIterator.closeQuietly(it);
89+
}
90+
91+
logMemory();
92+
}
93+
7394
// utils
7495

7596
private final void logMemory() {
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package org.baeldung.jackson.try1;
2+
public interface IEntity {
3+
public int getId();
4+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package org.baeldung.jackson.try1;
2+
3+
import static org.hamcrest.Matchers.notNullValue;
4+
import static org.junit.Assert.assertThat;
5+
6+
import java.io.IOException;
7+
8+
import org.baeldung.jackson.dtos.ItemWithSerializer;
9+
import org.junit.Test;
10+
11+
import com.fasterxml.jackson.core.JsonParseException;
12+
import com.fasterxml.jackson.databind.JsonMappingException;
13+
import com.fasterxml.jackson.databind.ObjectMapper;
14+
15+
public class JacksonDeserializationUnitTest {
16+
17+
@Test
18+
public final void givenDeserializerIsOnClass_whenDeserializingCustomRepresentation_thenCorrect() throws JsonParseException, JsonMappingException, IOException {
19+
final String json = "{\"id\":1,\"itemName\":\"theItem\",\"owner\":2}";
20+
21+
final ItemWithSerializer readValue = new ObjectMapper().readValue(json, ItemWithSerializer.class);
22+
assertThat(readValue, notNullValue());
23+
}
24+
25+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package org.baeldung.jackson.try1;
2+
3+
import java.io.Serializable;
4+
5+
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
6+
7+
@JsonDeserialize(using = RestLoaderRequestDeserializer.class)
8+
// @Produces(MediaType.APPLICATION_JSON)
9+
public class RestLoaderRequest<T extends IEntity> implements Serializable {
10+
private T entity; // entity to load field to
11+
private String className; // actual class of entity
12+
private String fieldName; // fieldName to lazy REST load
13+
14+
public String getFieldName() {
15+
return fieldName;
16+
}
17+
18+
public void setFieldName(final String fieldName) {
19+
this.fieldName = fieldName;
20+
}
21+
22+
public String getClassName() {
23+
return className;
24+
}
25+
26+
public void setClassName(final String className) {
27+
this.className = className;
28+
}
29+
30+
public T getEntity() {
31+
return entity;
32+
}
33+
34+
public void setEntity(final T entity) {
35+
this.entity = entity;
36+
}
37+
38+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package org.baeldung.jackson.try1;
2+
3+
import java.io.IOException;
4+
5+
import com.fasterxml.jackson.core.JsonParser;
6+
import com.fasterxml.jackson.core.JsonProcessingException;
7+
import com.fasterxml.jackson.core.ObjectCodec;
8+
import com.fasterxml.jackson.databind.DeserializationContext;
9+
import com.fasterxml.jackson.databind.JsonDeserializer;
10+
import com.fasterxml.jackson.databind.JsonNode;
11+
12+
public class RestLoaderRequestDeserializer extends JsonDeserializer<RestLoaderRequest<IEntity>> {
13+
14+
@Override
15+
public RestLoaderRequest<IEntity> deserialize(final JsonParser jp, final DeserializationContext ctxt) throws IOException, JsonProcessingException {
16+
try {
17+
final ObjectCodec objectCodec = jp.getCodec();
18+
final JsonNode node = objectCodec.readTree(jp);
19+
final String className = node.get("className").textValue();
20+
final String fieldName = node.get("fieldName").textValue();
21+
22+
final Class<?> clazz = Class.forName(className);
23+
24+
final JsonNode rawEntityNode = node.get("entity");
25+
// How to deserialize rawEntityNode to T based on className ?
26+
27+
final RestLoaderRequest<IEntity> request = new RestLoaderRequest<IEntity>();
28+
request.setClassName(className);
29+
request.setFieldName(fieldName);
30+
} catch (final ClassNotFoundException e) {
31+
e.printStackTrace();
32+
}
33+
34+
return null;
35+
}
36+
37+
}

0 commit comments

Comments
 (0)