diff --git metastore/pom.xml metastore/pom.xml
index 35752ff..ef908ca 100644
--- metastore/pom.xml
+++ metastore/pom.xml
@@ -255,6 +255,12 @@
${disruptor.version}
test
+
+ org.skyscreamer
+ jsonassert
+ 1.4.0
+ test
+
diff --git metastore/src/java/org/apache/hadoop/hive/metastore/messaging/PartitionFiles.java metastore/src/java/org/apache/hadoop/hive/metastore/messaging/PartitionFiles.java
index b10b8a8..4fd7f8c 100644
--- metastore/src/java/org/apache/hadoop/hive/metastore/messaging/PartitionFiles.java
+++ metastore/src/java/org/apache/hadoop/hive/metastore/messaging/PartitionFiles.java
@@ -22,10 +22,13 @@
import java.util.List;
import com.google.common.collect.Lists;
+import org.codehaus.jackson.annotate.JsonProperty;
public class PartitionFiles {
+ @JsonProperty
private String partitionName;
+ @JsonProperty
private List files;
public PartitionFiles(String partitionName, Iterator files) {
diff --git metastore/src/java/org/apache/hadoop/hive/metastore/messaging/json/JSONMessageDeserializer.java metastore/src/java/org/apache/hadoop/hive/metastore/messaging/json/JSONMessageDeserializer.java
index 41732c7..40ef5fb 100644
--- metastore/src/java/org/apache/hadoop/hive/metastore/messaging/json/JSONMessageDeserializer.java
+++ metastore/src/java/org/apache/hadoop/hive/metastore/messaging/json/JSONMessageDeserializer.java
@@ -36,6 +36,7 @@
import org.apache.hadoop.hive.metastore.messaging.MessageDeserializer;
import org.codehaus.jackson.map.DeserializationConfig;
import org.codehaus.jackson.map.ObjectMapper;
+import org.codehaus.jackson.map.SerializationConfig;
/**
* MessageDeserializer implementation, for deserializing from JSON strings.
@@ -46,6 +47,9 @@
static {
mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+ mapper.configure(SerializationConfig.Feature.AUTO_DETECT_GETTERS, false);
+ mapper.configure(SerializationConfig.Feature.AUTO_DETECT_IS_GETTERS, false);
+ mapper.configure(SerializationConfig.Feature.AUTO_DETECT_FIELDS, false);
}
@Override
diff --git metastore/src/test/org/apache/hadoop/hive/metastore/messaging/json/JSONMessageDeserializerTest.java metastore/src/test/org/apache/hadoop/hive/metastore/messaging/json/JSONMessageDeserializerTest.java
new file mode 100644
index 0000000..b7c6304
--- /dev/null
+++ metastore/src/test/org/apache/hadoop/hive/metastore/messaging/json/JSONMessageDeserializerTest.java
@@ -0,0 +1,89 @@
+package org.apache.hadoop.hive.metastore.messaging.json;
+
+import org.codehaus.jackson.annotate.JsonProperty;
+import org.json.JSONException;
+import org.junit.Test;
+import org.skyscreamer.jsonassert.JSONAssert;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.junit.Assert.*;
+
+public class JSONMessageDeserializerTest {
+
+ public static class MyClass {
+ @JsonProperty
+ private int a;
+ @JsonProperty
+ private Map map;
+ private long l;
+ private String shouldNotSerialize = "shouldNotSerialize";
+
+ //for jackson to instantiate
+ MyClass() {
+ }
+
+ MyClass(int a, Map map, long l) {
+ this.a = a;
+ this.map = map;
+ this.l = l;
+ }
+
+ @JsonProperty
+ long getL() {
+ return l;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o)
+ return true;
+ if (o == null || getClass() != o.getClass())
+ return false;
+
+ MyClass myClass = (MyClass) o;
+
+ if (a != myClass.a)
+ return false;
+ if (l != myClass.l)
+ return false;
+ if (!map.equals(myClass.map))
+ return false;
+ return shouldNotSerialize.equals(myClass.shouldNotSerialize);
+ }
+
+ @Override
+ public int hashCode() {
+ int result = a;
+ result = 31 * result + map.hashCode();
+ result = 31 * result + (int) (l ^ (l >>> 32));
+ result = 31 * result + shouldNotSerialize.hashCode();
+ return result;
+ }
+ }
+
+ @Test
+ public void shouldNotSerializePropertiesNotAnnotated() throws IOException, JSONException {
+ MyClass obj = new MyClass(Integer.MAX_VALUE, new HashMap() {{
+ put("a", "a");
+ put("b", "b");
+ }}, Long.MAX_VALUE);
+ String json = JSONMessageDeserializer.mapper.writeValueAsString(obj);
+ JSONAssert.assertEquals(
+ "{\"a\":2147483647,\"map\":{\"b\":\"b\",\"a\":\"a\"},\"l\":9223372036854775807}", json,
+ false);
+ }
+
+ @Test
+ public void shouldDeserializeJsonStringToObject() throws IOException {
+ String json = "{\"a\":47,\"map\":{\"a\":\"a\",\"b\":\"a value for b\"},\"l\":98}";
+ MyClass actual = JSONMessageDeserializer.mapper.readValue(json, MyClass.class);
+ MyClass expected = new MyClass(47, new HashMap() {{
+ put("a", "a");
+ put("b", "a value for b");
+ }}, 98L);
+ assertEquals(expected, actual);
+ }
+}
\ No newline at end of file