private static Map<String, Object> canonicalizeMap(final Map<String, Object> from) {
   final Map<String, Object> canonicalized = new LinkedHashMap<String, Object>(from.size());
   final TreeSet<String> keysInOrder = new TreeSet<String>(from.keySet());
   for (final String key : keysInOrder) {
     final Object val = from.get(key);
     canonicalized.put(key, canonicalize(val));
   }
   return canonicalized;
 }