Skip to content

Commit 7502f35

Browse files
Fixes in Bean-handling in BeanSchema and BeanIterator
1 parent f3c7afd commit 7502f35

File tree

9 files changed

+36
-32
lines changed

9 files changed

+36
-32
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<modelVersion>4.0.0</modelVersion>
44
<groupId>io.frictionlessdata</groupId>
55
<artifactId>tableschema-java</artifactId>
6-
<version>0.3.0-SNAPSHOT</version>
6+
<version>0.3.1-SNAPSHOT</version>
77
<packaging>jar</packaging>
88
<issueManagement>
99
<url>https://github.com/frictionlessdata/tableschema-java/issues</url>

src/main/java/io/frictionlessdata/tableschema/field/ReflectionUtils.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,19 +13,22 @@
1313

1414
public class ReflectionUtils {
1515

16-
public static Map<String, String> getFieldNameMapping(ObjectMapper mapper, Class type) {
16+
public static Map<String, String> getFieldNameMapping(ObjectMapper mapper, Class<?> type) {
1717
Map<String, String> fieldNames = new HashMap<>();
1818
JavaType jType = mapper.constructType(type);
1919
BeanDescription desc = mapper.getSerializationConfig()
2020
.introspect(jType);
2121
List<BeanPropertyDefinition> properties = desc.findProperties();
2222
for (BeanPropertyDefinition def : properties) {
2323
AnnotatedField field = def.getField();
24-
Field annotated = field.getAnnotated();
25-
String fieldName = annotated.getName();
26-
//String fieldName = def.getInternalName();
27-
String declaredName = def.getName();
28-
fieldNames.put(declaredName, fieldName);
24+
// fields with names where the JsonProperty name differs from the field name create zombie
25+
// entries here which we do not need.
26+
if (null != field) {
27+
Field annotated = field.getAnnotated();
28+
String fieldName = annotated.getName();
29+
String declaredName = def.getName();
30+
fieldNames.put(declaredName, fieldName);
31+
}
2932
}
3033
return fieldNames;
3134
}

src/main/java/io/frictionlessdata/tableschema/inputstream/ByteOrderMarkStrippingInputStream.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -231,13 +231,13 @@ public int read() throws IOException {
231231
}
232232

233233
@Override
234-
public int read(final byte b[]) throws IOException,
234+
public int read(final byte[] b) throws IOException,
235235
NullPointerException {
236236
return in.read(b, 0, b.length);
237237
}
238238

239239
@Override
240-
public int read(final byte b[],
240+
public int read(final byte[] b,
241241
final int off,
242242
final int len) throws IOException,
243243
NullPointerException {

src/main/java/io/frictionlessdata/tableschema/schema/BeanSchema.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,9 @@ public static BeanSchema infer(Class<?> beanClass) throws NoSuchFieldException {
5454
Field<?> field;
5555
Class<?> declaredClass;
5656
String fieldMethodName = fieldNames.get(name);
57+
if (null == fieldMethodName) {
58+
continue;
59+
}
5760
try {
5861
java.lang.reflect.Field declaredField = beanClass.getDeclaredField(fieldMethodName);
5962
declaredClass = declaredField.getType();

src/test/java/io/frictionlessdata/tableschema/beans/ExplicitNamingBean.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,22 @@ public class ExplicitNamingBean {
2121
@JsonProperty("black")
2222
boolean isBlack;
2323

24+
@JsonProperty("visible")
25+
boolean isVisibleColor;
26+
2427
public boolean isBlack() {
2528
return isBlack;
2629
}
2730

2831
public void setBlack(boolean black) {
2932
isBlack = black;
3033
}
34+
35+
public boolean isVisibleColor() {
36+
return isVisibleColor;
37+
}
38+
39+
public void setVisibleColor(boolean visibleColor) {
40+
isVisibleColor = visibleColor;
41+
}
3142
}

src/test/java/io/frictionlessdata/tableschema/schema/SchemaInferralTests.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,14 +39,6 @@ void inferASchema() throws Exception{
3939
@Test
4040
@DisplayName("Infer a Bean Schema")
4141
void inferExplicitNamingBeanSchema() throws Exception{
42-
ObjectMapper objectMapper = new ObjectMapper();
43-
Map<String, String> fieldNameMapping = new TreeMap<>(ReflectionUtils.getFieldNameMapping(objectMapper, ExplicitNamingBean.class));
44-
String expectedString = TestHelper.getResourceFileContent(
45-
"/fixtures/beans/explicitnamingbean.json");
46-
Map<String, String> expectedFieldMap
47-
= new TreeMap<>(objectMapper.readValue(expectedString, new TypeReference<Map<String, String>>() {}));
48-
Assertions.assertEquals(expectedFieldMap, fieldNameMapping);
49-
5042
Schema schema = BeanSchema.infer(ExplicitNamingBean.class);
5143
String expectedSchemaString = TestHelper.getResourceFileContent(
5244
"/fixtures/beans/explicitnamingbean-schema.json");

src/test/java/io/frictionlessdata/tableschema/schema/SchemaTest.java

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import org.junit.jupiter.api.Assertions;
1919
import org.junit.jupiter.api.DisplayName;
2020
import org.junit.jupiter.api.Test;
21+
import static org.junit.jupiter.api.Assertions.assertTrue;
2122

2223
import java.io.File;
2324
import java.io.FileInputStream;
@@ -34,8 +35,6 @@
3435

3536
import static io.frictionlessdata.tableschema.TestHelper.getTestDataDirectory;
3637
import static org.hamcrest.CoreMatchers.instanceOf;
37-
import static org.junit.Assert.assertThat;
38-
import static org.junit.jupiter.api.Assertions.assertTrue;
3938

4039

4140
public class SchemaTest {
@@ -746,24 +745,15 @@ private static File getResourceFile(String fileName) throws URISyntaxException {
746745
}
747746

748747

749-
@org.junit.jupiter.api.Test
750-
@DisplayName("Infer a Bean Schema")
751-
void inferExplicitNamingBeanSchema() throws Exception{
748+
@Test
749+
@DisplayName("Validate creating Field mapping from Bean")
750+
void testCreateFieldMapping() throws Exception{
752751
ObjectMapper objectMapper = new ObjectMapper();
753752
Map<String, String> fieldNameMapping = new TreeMap<>(ReflectionUtils.getFieldNameMapping(objectMapper, ExplicitNamingBean.class));
754753
String expectedString = TestHelper.getResourceFileContent(
755754
"/fixtures/beans/explicitnamingbean.json");
756755
Map<String, String> expectedFieldMap
757756
= new TreeMap<>(objectMapper.readValue(expectedString, new TypeReference<Map<String, String>>() {}));
758757
Assertions.assertEquals(expectedFieldMap, fieldNameMapping);
759-
760-
Schema schema = BeanSchema.infer(ExplicitNamingBean.class);
761-
String expectedSchemaString = TestHelper.getResourceFileContent(
762-
"/fixtures/beans/explicitnamingbean-schema.json");
763-
Schema expectedSchema = Schema.fromJson(expectedSchemaString, true);
764-
765-
Assertions.assertEquals(expectedSchema, schema);
766-
// validate equals() method implementation on Schema and BeanSchema
767-
Assertions.assertEquals(schema, expectedSchema);
768758
}
769759
}

src/test/resources/fixtures/beans/explicitnamingbean-schema.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,9 @@
1919
"name" : "black",
2020
"type" : "boolean",
2121
"format" : "default"
22+
}, {
23+
"name" : "visible",
24+
"type" : "boolean",
25+
"format" : "default"
2226
}]
2327
}

src/test/resources/fixtures/beans/explicitnamingbean.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,6 @@
33
"blue" : "isBlue",
44
"is_white" : "isWhite",
55
"pink_field" : "isPink",
6-
"black" : "isBlack"
6+
"black" : "isBlack",
7+
"visible" : "isVisibleColor"
78
}

0 commit comments

Comments
 (0)