public static void setProperty(CoreSession session, DocumentModel doc, String key, String value) throws Exception { if ("ecm:acl".equals(key)) { setLocalAcl(session, doc, value); } Property p = doc.getProperty(key); if (value == null || value.length() == 0) { p.setValue(null); return; } Type type = p.getField().getType(); if (!type.isSimpleType()) { if (type.isListType()) { ListType ltype = (ListType) type; if (ltype.isScalarList()) { p.setValue(readStringList(value, (SimpleType) ltype.getFieldType())); return; } else if (ltype.getFieldType().isComplexType()) { Object val = ComplexTypeJSONDecoder.decodeList(ltype, value); p.setValue(val); return; } } else if (type.isComplexType()) { Object val = ComplexTypeJSONDecoder.decode((ComplexType) type, value); p.setValue(val); return; } throw new OperationException("Property type is not supported by this operation"); } else { p.setValue(((SimpleType) type).getPrimitiveType().decode(value)); } }