Merge pull request #320 from zhengzepeng/master
if map is pojo, write class name first
diff --git a/map.go b/map.go
index 4f144b8..1336756 100644
--- a/map.go
+++ b/map.go
@@ -122,9 +122,16 @@
return nil
}
+ // if pojo, write class name first
+ if p, ok := m.(POJO); ok {
+ e.buffer = encByte(e.buffer, BC_MAP)
+ e.buffer = encString(e.buffer, p.JavaClassName())
+ } else {
+ e.buffer = encByte(e.buffer, BC_MAP_UNTYPED)
+ }
+
keys = value.MapKeys()
- e.buffer = encByte(e.buffer, BC_MAP_UNTYPED)
if len(keys) > 0 {
typ = value.Type().Key()
for i := 0; i < len(keys); i++ {
diff --git a/map_test.go b/map_test.go
index 5fc0855..4d79ecd 100644
--- a/map_test.go
+++ b/map_test.go
@@ -170,3 +170,15 @@
testDecodeFramework(t, "customReplyListMapListMap", listMapListMap)
}
+
+type CustomMap map[string]interface{}
+
+func (dict *CustomMap) JavaClassName() string {
+ return "test.model.CustomMap"
+}
+
+func TestJavaMap(t *testing.T) {
+ customMap := &CustomMap{"Name": "Test"}
+ RegisterPOJO(customMap)
+ testJavaDecode(t, "customArgTypedFixed_CustomMap", customMap)
+}
diff --git a/test_hessian/src/main/java/test/TestCustomDecode.java b/test_hessian/src/main/java/test/TestCustomDecode.java
index b97d691..2723e55 100644
--- a/test_hessian/src/main/java/test/TestCustomDecode.java
+++ b/test_hessian/src/main/java/test/TestCustomDecode.java
@@ -20,11 +20,13 @@
import com.caucho.hessian.io.Hessian2Input;
import com.caucho.hessian.test.A0;
import com.caucho.hessian.test.A1;
+
import java.io.InputStream;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.*;
+import test.model.CustomMap;
import test.model.DateDemo;
@@ -214,4 +216,11 @@
HashSet o = (HashSet) input.readObject();
return o.contains(0) && o.contains(1);
}
+
+ public Object customArgTypedFixed_CustomMap() throws Exception {
+ CustomMap o = (CustomMap) input.readObject();
+ String value = (String) o.get("Name");
+ return "Test".equals(value);
+ }
+
}