private static boolean schemasEqual(NeutralSchema ns1, NeutralSchema ns2) { if (ns1.getValidatorClass().equals(ns2.getValidatorClass()) && ns1.getVersion().equals(ns2.getVersion()) && ns1.getFields().size() == ns2.getFields().size()) { for (Entry<String, NeutralSchema> entry : ns1.getFields().entrySet()) { if (!ns2.getFields().containsKey(entry.getKey())) { return false; } if (!schemasEqual(entry.getValue(), ns2.getFields().get(entry.getKey()))) { return false; } } for (Entry<String, Object> entry : ns1.getProperties().entrySet()) { if (!ns2.getProperties().containsKey(entry.getKey())) { return false; } if (!entry .getValue() .getClass() .equals(ns2.getProperties().get(entry.getKey()).getClass())) { return false; } if (entry.getValue() instanceof List) { List<?> list1 = (List<?>) entry.getValue(); List<?> list2 = (List<?>) ns2.getProperties().get(entry.getKey()); if (!list1.containsAll(list2)) { return false; } } else { if (!entry.getValue().equals(ns2.getProperties().get(entry.getKey()))) { return false; } } } return true; } else { return false; } }