### Question:
ServiceInvoker { public static Map<String, Object> deepClone(Map<String, Object> sourceMap) { Map<String, Object> map = new LinkedHashMap<String, Object>(); Set<Map.Entry<String,Object>> mapEntries = sourceMap.entrySet(); for (Map.Entry<String,Object> entry : mapEntries) { map.put(entry.getKey(), deepClone(entry.getValue())); } return map; } ServiceInvoker(ServiceReference serviceReference); Object send(String operationName, RubyHash rubyHash); static Map<String, Object> deepClone(Map<String, Object> sourceMap);  }### Answer:
@Test public void test_deepClone() { RubyHash rubyHash = (RubyHash) RubyUtil.evalScriptlet(getClass().getResourceAsStream("/order1.rb")); Map<String,Object> deepClone = ServiceInvoker.deepClone(rubyHash); Map header = (Map) deepClone.get("header"); Assert.assertFalse(header instanceof IRubyObject); Assert.assertEquals(1234L, header.get("orderId")); List items = (List) deepClone.get("items"); Assert.assertFalse(items instanceof IRubyObject); Assert.assertEquals(2, items.size()); }