public static Resource createResourceWithAttachments(final ResourceManager resourceManager, final ApiRequest request, final IdFormatter idFormatter, final SchemaFactory schemaFactory, final Schema schema, Object obj, Map<String, Object> inputAdditionalFields) { Integer depth = DEPTH.get(); try { DEPTH.set(depth + 1); Map<String, Object> additionalFields = new LinkedHashMap<String, Object>(); additionalFields.putAll(DataUtils.getFields(obj)); if (inputAdditionalFields != null && inputAdditionalFields.size() > 0) { additionalFields.putAll(inputAdditionalFields); } if (depth == 0) { Map<String, Object> attachments = ApiUtils.getAttachements(obj, new Transformer() { @Override public Object transform(Object input) { input = ApiUtils.authorize(input); if (input == null) return null; return resourceManager.convertResponse(input, request); } }); additionalFields.putAll(attachments); } String method = request == null ? null : request.getMethod(); return new WrappedResource(idFormatter, schemaFactory, schema, obj, additionalFields, PRIORITY_FIELDS, method); } finally { DEPTH.set(depth); } }