[ https://issues.apache.org/jira/browse/AVRO-2775?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17061014#comment-17061014 ]
Andy Le commented on AVRO-2775: ------------------------------- I also think we should refactor JacksonUtils to clean it a little bit. For example, currently we have: {code:java} public static Object toObject(JsonNode jsonNode, Schema schema) { if (schema != null && schema.getType().equals(Schema.Type.UNION)) { return toObject(jsonNode, schema.getTypes().get(0)); } if (jsonNode == null) { return null; } else if (jsonNode.isNull()) { return JsonProperties.NULL_VALUE; } else if (jsonNode.isBoolean()) { return jsonNode.asBoolean(); } //. .. } {code} We can have a better code the above: {code:java} public static Object toObject(JsonNode jsonNode, Schema schema) { if (schema != null && schema.getType().equals(Schema.Type.UNION)) { return toObject(jsonNode, schema.getTypes().get(0)); } if (jsonNode == null) { return null; } if (jsonNode.isNull()) { return JsonProperties.NULL_VALUE; } if (jsonNode.isBoolean()) { return jsonNode.asBoolean(); } // .. } {code} [~sekikn] do you think it's worth to refactor such code? > JacksonUtils: exception when calling toJsonNode() > -------------------------------------------------- > > Key: AVRO-2775 > URL: https://issues.apache.org/jira/browse/AVRO-2775 > Project: Apache Avro > Issue Type: Bug > Components: java > Affects Versions: 1.9.2 > Reporter: Andy Le > Priority: Major > > I've got a simple test as followed > {code:java} > public class TestJacksonUtils { > public static class Age{ > public int value = 9; > } > @Test > public void testToJson(){ > Map<String, Object> kv = new HashMap<>(); > kv.put("age", 9); > JsonNode node1 = JacksonUtils.toJsonNode(kv); // -> This is OK > Object obj = new Age(); > JsonNode node2 = JacksonUtils.toJsonNode(obj); // -> This will trigger an > exception > } > } > {code} > When I ran the test: > {noformat} > org.apache.avro.AvroRuntimeException: Unknown datum class: class > org.apache.avro.util.internal.TestJacksonUtils$Age > at > org.apache.avro.util.internal.JacksonUtils.toJson(JacksonUtils.java:87) > at > org.apache.avro.util.internal.JacksonUtils.toJsonNode(JacksonUtils.java:48) > at > org.apache.avro.util.internal.TestJacksonUtils.testToJson(TestJacksonUtils.java:20) > {noformat} > I've read the code & tests for JacksonUtils. Instead of raising exceptions at > [line > #87|https://github.com/apache/avro/blob/master/lang/java/avro/src/main/java/org/apache/avro/util/internal/JacksonUtils.java#L87], > I see we can auto convert objects into maps, every thing's gonna fine. > My question is: > - Is raising exception acceptable? > - Any other way to have `toJsonNode` for general objects? -- This message was sent by Atlassian Jira (v8.3.4#803005)