List of usage examples for org.springframework.beans BeanUtils isSimpleProperty
public static boolean isSimpleProperty(Class<?> clazz)
From source file:edu.mayo.cts2.framework.webapp.rest.view.jsp.Beans.java
/** * Should recurse./* w ww.jav a 2 s.c o m*/ * * @param bean the bean * @return true, if successful */ public static boolean shouldRecurse(Object bean) { return !BeanUtils.isSimpleProperty(bean.getClass()) && !bean.getClass().isEnum(); }
From source file:com.expedia.seiso.domain.service.impl.ItemMerger.java
/** * Merges a source item into a destination item so we can write the destination item to the database. * //w ww.j a v a2 s . c o m * @param src * Source item * @param dest * Destination item * @param mergeAssociations * Flag indicating whether to merge the associations. */ public void merge(Item src, Item dest, boolean mergeAssociations) { val itemClass = src.getClass(); val propDescs = BeanUtils.getPropertyDescriptors(itemClass); for (val propDesc : propDescs) { val propName = propDesc.getName(); if (isMergeable(propName)) { val propClass = propDesc.getPropertyType(); if (BeanUtils.isSimpleProperty(propClass)) { mergeSimpleProperty(src, dest, propDesc); } else if (Item.class.isAssignableFrom(propClass)) { if (mergeAssociations) { mergeSingleAssociation(src, dest, propClass, propName); } } else if (List.class.isAssignableFrom(propClass)) { // Skip lists. No warning need. } else { log.warn("Property '{}' has unrecognized class {}; skipping", propName, propClass.getSimpleName()); } } } }
From source file:com.hihsoft.baseclass.web.controller.BaseController.java
/** * ???(xiaojf?)/*from w ww . j a v a 2 s. c om*/ */ @Override protected void bind(final HttpServletRequest request, final Object command) { final PropertyDescriptor[] pds = BeanUtils.getPropertyDescriptors(command.getClass()); for (final PropertyDescriptor pd : pds) { final Class<?> clas = pd.getPropertyType();// ?class final boolean isSimpleProperty = BeanUtils.isSimpleProperty(clas); final boolean isInterface = clas.isInterface(); final boolean hasConstruct = clas.getConstructors().length == 0 ? false : true; if (!isSimpleProperty && !isInterface && hasConstruct) { // try { pd.getWriteMethod().invoke(command, clas.newInstance()); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } try { super.bind(request, command); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }
From source file:it.sample.parser.util.CommonsUtil.java
/** * Metodo di utilita' per rendere null un'istanza di una classe che e' istanziata ma che ha tutti i campi null * /*from w ww. j a va 2 s. c o m*/ * @param instance */ public static <T> void sanitizeObject(T instance) { PropertyDescriptor[] descriptors = PropertyUtils.getPropertyDescriptors(instance); if (descriptors != null) { for (PropertyDescriptor descriptor : descriptors) { try { String propertyName = descriptor.getName(); if (descriptor.getReadMethod() != null) { Object val = PropertyUtils.getProperty(instance, propertyName); if (val != null && !BeanUtils.isSimpleProperty(val.getClass()) && descriptor.getWriteMethod() != null && !isFilled(val) && !val.getClass().getName().startsWith("java.util")) { PropertyUtils.setProperty(instance, propertyName, null); } } } catch (Exception e) { e.printStackTrace(); } } } }
From source file:org.terasoluna.gfw.web.el.ObjectToMapConverter.java
/** * Add the pair of the given name and value to the given map. The value is flattened if required to be available in query * params. <br>// w ww. j a v a 2s.c o m * Return whether the value is flattened. The value is flattened in the case of the following types: * <ul> * <li>Array (unless the name is empty)</li> * <li>Iterable (unless the name is empty)</li> * <li>Map</li> * <li>{@link BeanUtils#isSimpleProperty(java.lang.Class)}</li> * <li>if {@link #conversionService} can convert</li> * </ul> * <p> * The value is formatted using {@link FormattingConversionService} is possible. If the value of a property is {@code null}, * the value is converted to an empty string and the key is prefixed with {@code "_"}. Request parameter that start with * {@code "_"} is reset parameter provided by Spring Web MVC. If a reset parameter is specified, Spring Web MVC bind * {@code null} to a property value. * </p> * @param map map to add * @param prefix prefix of the key * @param name name of the value * @param value value to convert * @param sourceType {@link TypeDescriptor} to use * @return flatten map */ private boolean flatten(Map<String, String> map, String prefix, String name, Object value, TypeDescriptor sourceType) { String key = StringUtils.isEmpty(prefix) ? name : prefix + "." + name; if (value == null) { String resetKey = "_" + key; map.put(resetKey, ""); // the value has been flatten return true; } Class<?> clazz = value.getClass(); if (value instanceof Iterable) { if (StringUtils.isEmpty(name)) { // skip flatten return true; } Iterable iterable = (Iterable) value; map.putAll(this.convert(key, iterable)); } else if (clazz.isArray()) { if (StringUtils.isEmpty(name)) { // skip flatten return true; } map.putAll(this.convert(key, arrayObjectToList(value))); } else if (value instanceof Map) { Map m = (Map) value; map.putAll(this.convert(key, m)); } else { TypeDescriptor descriptor = (sourceType != null) ? sourceType : TypeDescriptor.forObject(value); if (BeanUtils.isSimpleProperty(clazz) || conversionService.canConvert(descriptor, STRING_DESC)) { map.put(key, conversionService.convert(value, descriptor, STRING_DESC).toString()); } else { // the value is Java Bean? return false; } } // the value has been flatten return true; }
From source file:com.fengduo.bee.commons.component.FormModelMethodArgumentResolver.java
/** * {@inheritDoc}//from ww w . j a v a2s . c o m * <p> * Downcast {@link org.springframework.web.bind.WebDataBinder} to * {@link org.springframework.web.bind.ServletRequestDataBinder} before binding. * * @throws Exception * @see org.springframework.web.servlet.mvc.method.annotation.ServletRequestDataBinderFactory */ protected void bindRequestParameters(ModelAndViewContainer mavContainer, WebDataBinderFactory binderFactory, WebDataBinder binder, NativeWebRequest request, MethodParameter parameter) throws Exception { // Map<String, Boolean> hasProcessedPrefixMap = new HashMap<String, Boolean>(); // // Class<?> targetType = binder.getTarget().getClass(); // WebDataBinder simpleBinder = binderFactory.createBinder(request, null, null); Collection target = (Collection) binder.getTarget(); Class<?>[] paramTypes = parameter.getMethod().getParameterTypes(); Method method = parameter.getMethod(); Object[] args = new Object[paramTypes.length]; Map<String, Object> argMap = new HashMap<String, Object>(args.length); MapBindingResult errors = new MapBindingResult(argMap, ""); ParameterNameDiscoverer parameterNameDiscoverer = new LocalVariableTableParameterNameDiscoverer(); for (int i = 0; i < paramTypes.length; i++) { Class<?> paramType = paramTypes[i]; MethodParameter methodParam = new MethodParameter(method, i); methodParam.initParameterNameDiscovery(parameterNameDiscoverer); String paramName = methodParam.getParameterName(); // ?? if (BeanUtils.isSimpleProperty(paramType)) { SimpleTypeConverter converter = new SimpleTypeConverter(); Object value; // ? if (paramType.isArray()) { value = request.getParameterValues(paramName); } else { value = request.getParameter(paramName); } try { args[i] = converter.convertIfNecessary(value, paramType, methodParam); } catch (TypeMismatchException e) { errors.addError(new FieldError(paramName, paramName, e.getMessage())); } } else { // ???POJO if (paramType.isArray()) { ObjectArrayDataBinder binders = new ObjectArrayDataBinder(paramType.getComponentType(), paramName); target.addAll(ArrayUtils.arrayConvert(binders.bind(request))); } } } // if (Collection.class.isAssignableFrom(targetType)) {// bind collection or array // // Type type = parameter.getGenericParameterType(); // Class<?> componentType = Object.class; // // Collection target = (Collection) binder.getTarget(); // // List targetList = new ArrayList(target); // // if (type instanceof ParameterizedType) { // componentType = (Class<?>) ((ParameterizedType) type).getActualTypeArguments()[0]; // } // // if (parameter.getParameterType().isArray()) { // componentType = parameter.getParameterType().getComponentType(); // } // // for (Object key : servletRequest.getParameterMap().keySet()) { // String prefixName = getPrefixName((String) key); // // // ?prefix ?? // if (hasProcessedPrefixMap.containsKey(prefixName)) { // continue; // } else { // hasProcessedPrefixMap.put(prefixName, Boolean.TRUE); // } // // if (isSimpleComponent(prefixName)) { // bind simple type // Map<String, Object> paramValues = WebUtils.getParametersStartingWith(servletRequest, prefixName); // Matcher matcher = INDEX_PATTERN.matcher(prefixName); // if (!matcher.matches()) { // ? array=1&array=2 // for (Object value : paramValues.values()) { // targetList.add(simpleBinder.convertIfNecessary(value, componentType)); // } // } else { // ? array[0]=1&array[1]=2 // int index = Integer.valueOf(matcher.group(1)); // // if (targetList.size() <= index) { // growCollectionIfNecessary(targetList, index); // } // targetList.set(index, simpleBinder.convertIfNecessary(paramValues.values(), componentType)); // } // } else { // ? votes[1].title=votes[1].title&votes[0].title=votes[0].title&votes[0].id=0&votes[1].id=1 // Object component = null; // // ? ????? // Matcher matcher = INDEX_PATTERN.matcher(prefixName); // if (!matcher.matches()) { // throw new IllegalArgumentException("bind collection error, need integer index, key:" + key); // } // int index = Integer.valueOf(matcher.group(1)); // if (targetList.size() <= index) { // growCollectionIfNecessary(targetList, index); // } // Iterator iterator = targetList.iterator(); // for (int i = 0; i < index; i++) { // iterator.next(); // } // component = iterator.next(); // // if (component == null) { // component = BeanUtils.instantiate(componentType); // } // // WebDataBinder componentBinder = binderFactory.createBinder(request, component, null); // component = componentBinder.getTarget(); // // if (component != null) { // ServletRequestParameterPropertyValues pvs = new ServletRequestParameterPropertyValues( // servletRequest, // prefixName, // ""); // componentBinder.bind(pvs); // validateIfApplicable(componentBinder, parameter); // if (componentBinder.getBindingResult().hasErrors()) { // if (isBindExceptionRequired(componentBinder, parameter)) { // throw new BindException(componentBinder.getBindingResult()); // } // } // targetList.set(index, component); // } // } // target.clear(); // target.addAll(targetList); // } // } else if (MapWapper.class.isAssignableFrom(targetType)) { // // Type type = parameter.getGenericParameterType(); // Class<?> keyType = Object.class; // Class<?> valueType = Object.class; // // if (type instanceof ParameterizedType) { // keyType = (Class<?>) ((ParameterizedType) type).getActualTypeArguments()[0]; // valueType = (Class<?>) ((ParameterizedType) type).getActualTypeArguments()[1]; // } // // MapWapper mapWapper = ((MapWapper) binder.getTarget()); // Map target = mapWapper.getInnerMap(); // if (target == null) { // target = new HashMap(); // mapWapper.setInnerMap(target); // } // // for (Object key : servletRequest.getParameterMap().keySet()) { // String prefixName = getPrefixName((String) key); // // // ?prefix ?? // if (hasProcessedPrefixMap.containsKey(prefixName)) { // continue; // } else { // hasProcessedPrefixMap.put(prefixName, Boolean.TRUE); // } // // Object keyValue = simpleBinder.convertIfNecessary(getMapKey(prefixName), keyType); // // if (isSimpleComponent(prefixName)) { // bind simple type // Map<String, Object> paramValues = WebUtils.getParametersStartingWith(servletRequest, prefixName); // // for (Object value : paramValues.values()) { // target.put(keyValue, simpleBinder.convertIfNecessary(value, valueType)); // } // } else { // // Object component = target.get(keyValue); // if (component == null) { // component = BeanUtils.instantiate(valueType); // } // // WebDataBinder componentBinder = binderFactory.createBinder(request, component, null); // component = componentBinder.getTarget(); // // if (component != null) { // ServletRequestParameterPropertyValues pvs = new ServletRequestParameterPropertyValues( // servletRequest, // prefixName, // ""); // componentBinder.bind(pvs); // // validateComponent(componentBinder, parameter); // // target.put(keyValue, component); // } // } // } // } else {// bind model // ServletRequestDataBinder servletBinder = (ServletRequestDataBinder) binder; // servletBinder.bind(servletRequest); // } }
From source file:com.ms.commons.summer.web.handler.DataBinderUtil.java
/** * ?/*from w ww .j a v a2 s . c om*/ * * @param method * @param model * @param request * @param response * @param c * @return */ @SuppressWarnings("unchecked") public static Object[] getArgs(Method method, Map<String, Object> model, HttpServletRequest request, HttpServletResponse response, Class<?> c) { Class<?>[] paramTypes = method.getParameterTypes(); Object[] args = new Object[paramTypes.length]; Map<String, Object> argMap = new HashMap<String, Object>(args.length); Map<String, String> pathValues = null; PathPattern pathPattern = method.getAnnotation(PathPattern.class); if (pathPattern != null) { String path = request.getRequestURI(); int index = path.lastIndexOf('.'); if (index != -1) { path = path.substring(0, index); String[] patterns = pathPattern.patterns(); pathValues = getPathValues(patterns, path); } } MapBindingResult errors = new MapBindingResult(argMap, ""); ParameterNameDiscoverer parameterNameDiscoverer = new LocalVariableTableParameterNameDiscoverer(); for (int i = 0; i < paramTypes.length; i++) { Class<?> paramType = paramTypes[i]; MethodParameter methodParam = new MethodParameter(method, i); methodParam.initParameterNameDiscovery(parameterNameDiscoverer); GenericTypeResolver.resolveParameterType(methodParam, c.getClass()); String paramName = methodParam.getParameterName(); // map if (Map.class.isAssignableFrom(paramType)) { args[i] = model; } // HttpServletRequest else if (HttpServletRequest.class.isAssignableFrom(paramType)) { args[i] = request; } // HttpServletResponse else if (HttpServletResponse.class.isAssignableFrom(paramType)) { args[i] = response; } // HttpSession else if (HttpSession.class.isAssignableFrom(paramType)) { args[i] = request.getSession(); } // Errors else if (Errors.class.isAssignableFrom(paramType)) { args[i] = errors; } // MultipartFile else if (MultipartFile.class.isAssignableFrom(paramType)) { MultipartFile[] files = resolveMultipartFiles(request, errors, paramName); if (files != null && files.length > 0) { args[i] = files[0]; } } // MultipartFile[] else if (MultipartFile[].class.isAssignableFrom(paramType)) { args[i] = resolveMultipartFiles(request, errors, paramName); } else { // ?? if (BeanUtils.isSimpleProperty(paramType)) { SimpleTypeConverter converter = new SimpleTypeConverter(); Object value; // ? if (paramType.isArray()) { value = request.getParameterValues(paramName); } else { Object[] parameterAnnotations = methodParam.getParameterAnnotations(); value = null; if (parameterAnnotations != null && parameterAnnotations.length > 0) { if (pathValues != null && pathValues.size() > 0) { for (Object object : parameterAnnotations) { if (PathVariable.class.isInstance(object)) { PathVariable pv = (PathVariable) object; if (StringUtils.isEmpty(pv.value())) { value = pathValues.get(paramName); } else { value = pathValues.get(pv.value()); } break; } } } } else { value = request.getParameter(paramName); } } try { args[i] = converter.convertIfNecessary(value, paramType, methodParam); model.put(paramName, args[i]); } catch (TypeMismatchException e) { errors.addError(new FieldError(paramName, paramName, e.getMessage())); } } else { // ???POJO if (paramType.isArray()) { ObjectArrayDataBinder binder = new ObjectArrayDataBinder(paramType.getComponentType(), paramName); args[i] = binder.bind(request); model.put(paramName, args[i]); } else { Object bindObject = BeanUtils.instantiateClass(paramType); SummerServletRequestDataBinder binder = new SummerServletRequestDataBinder(bindObject, paramName); binder.bind(request); BindException be = new BindException(binder.getBindingResult()); List<FieldError> fieldErrors = be.getFieldErrors(); for (FieldError fieldError : fieldErrors) { errors.addError(fieldError); } args[i] = binder.getTarget(); model.put(paramName, args[i]); } } } } return args; }
From source file:com.revolsys.ui.web.rest.interceptor.WebAnnotationMethodHandlerAdapter.java
@SuppressWarnings({ "unchecked", "rawtypes" }) public ModelAndView getModelAndView(final Method handlerMethod, final Class<?> handlerType, final Object returnValue, final ExtendedModelMap implicitModel, final ServletWebRequest webRequest) throws Exception { boolean responseArgumentUsed = false; final ResponseStatus responseStatusAnn = AnnotationUtils.findAnnotation(handlerMethod, ResponseStatus.class); if (responseStatusAnn != null) { final HttpStatus responseStatus = responseStatusAnn.value(); // to be picked up by the RedirectView webRequest.getRequest().setAttribute(View.RESPONSE_STATUS_ATTRIBUTE, responseStatus); webRequest.getResponse().setStatus(responseStatus.value()); responseArgumentUsed = true;//from www . j a v a 2s .c om } // Invoke custom resolvers if present... if (WebAnnotationMethodHandlerAdapter.this.customModelAndViewResolvers != null) { for (final ModelAndViewResolver mavResolver : WebAnnotationMethodHandlerAdapter.this.customModelAndViewResolvers) { final ModelAndView mav = mavResolver.resolveModelAndView(handlerMethod, handlerType, returnValue, implicitModel, webRequest); if (mav != ModelAndViewResolver.UNRESOLVED) { return mav; } } } if (returnValue != null && AnnotationUtils.findAnnotation(handlerMethod, ResponseBody.class) != null) { final View view = handleResponseBody(returnValue, webRequest); return new ModelAndView(view).addAllObjects(implicitModel); } if (returnValue instanceof ModelAndView) { final ModelAndView mav = (ModelAndView) returnValue; mav.getModelMap().mergeAttributes(implicitModel); return mav; } else if (returnValue instanceof Model) { return new ModelAndView().addAllObjects(implicitModel).addAllObjects(((Model) returnValue).asMap()); } else if (returnValue instanceof View) { return new ModelAndView((View) returnValue).addAllObjects(implicitModel); } else if (AnnotationUtils.findAnnotation(handlerMethod, ModelAttribute.class) != null) { addReturnValueAsModelAttribute(handlerMethod, handlerType, returnValue, implicitModel); return new ModelAndView().addAllObjects(implicitModel); } else if (returnValue instanceof Map) { return new ModelAndView().addAllObjects(implicitModel).addAllObjects((Map) returnValue); } else if (returnValue instanceof String) { return new ModelAndView((String) returnValue).addAllObjects(implicitModel); } else if (returnValue == null) { // Either returned null or was 'void' return. if (responseArgumentUsed || webRequest.isNotModified()) { return null; } else { // Assuming view name translation... return new ModelAndView().addAllObjects(implicitModel); } } else if (!BeanUtils.isSimpleProperty(returnValue.getClass())) { // Assume a single model attribute... addReturnValueAsModelAttribute(handlerMethod, handlerType, returnValue, implicitModel); return new ModelAndView().addAllObjects(implicitModel); } else { throw new IllegalArgumentException("Invalid handler method return value: " + returnValue); } }
From source file:it.doqui.index.ecmengine.client.webservices.AbstractWebServiceDelegateBase.java
@SuppressWarnings("unchecked") protected Object convertDTO(Object sourceDTO, Class destDTOClass) throws Exception { if (log.isDebugEnabled()) { log.debug("[" + getClass().getSimpleName() + "::convertDTO] BEGIN"); }//from ww w . jav a2 s. c o m Object destDTO = null; try { if (sourceDTO != null) { if (log.isDebugEnabled()) { log.debug("[" + getClass().getSimpleName() + "::convertDTO] converting DTO from type " + sourceDTO.getClass().getName() + " to type " + destDTOClass.getName()); } destDTO = BeanUtils.instantiateClass(destDTOClass); PropertyDescriptor[] targetpds = BeanUtils.getPropertyDescriptors(destDTOClass); PropertyDescriptor sourcepd = null; if (log.isDebugEnabled()) { log.debug(" found " + targetpds.length + " properties for type " + destDTOClass.getName()); } for (int i = 0; i < targetpds.length; i++) { if (targetpds[i].getWriteMethod() != null) { Method writeMethod = targetpds[i].getWriteMethod(); sourcepd = BeanUtils.getPropertyDescriptor(sourceDTO.getClass(), targetpds[i].getName()); if (sourcepd != null && sourcepd.getReadMethod() != null) { if (log.isDebugEnabled()) { log.debug("[" + getClass().getSimpleName() + "::convertDTO] found property: " + targetpds[i].getName()); log.debug("[" + getClass().getSimpleName() + "::convertDTO] source type: " + sourcepd.getPropertyType().getName() + ", dest type: " + targetpds[i].getPropertyType().getName()); } Method readMethod = sourcepd.getReadMethod(); Object valueObject = null; if (!BeanUtils.isSimpleProperty(targetpds[i].getPropertyType())) { if (sourcepd.getPropertyType().isArray()) { valueObject = convertDTOArray( (Object[]) readMethod.invoke(sourceDTO, new Object[] {}), targetpds[i].getPropertyType().getComponentType()); } else if (sourcepd.getPropertyType().equals(java.util.Calendar.class) && targetpds[i].getPropertyType().equals(java.util.Date.class)) { // if java.util.Calendar => convert to java.util.Date valueObject = readMethod.invoke(sourceDTO, new Object[0]); if (valueObject != null) { valueObject = ((Calendar) valueObject).getTime(); } } else if (sourcepd.getPropertyType().equals(java.util.Date.class) && targetpds[i].getPropertyType().equals(java.util.Calendar.class)) { // if java.util.Date => convert to java.util.Calendar Calendar calendar = Calendar.getInstance(); valueObject = readMethod.invoke(sourceDTO, new Object[0]); if (valueObject != null) { calendar.setTime((Date) valueObject); valueObject = calendar; } } else { valueObject = convertDTO(readMethod.invoke(sourceDTO, new Object[0]), targetpds[i].getPropertyType()); } } else { valueObject = readMethod.invoke(sourceDTO, new Object[0]); } if (log.isDebugEnabled()) { log.debug("[" + getClass().getSimpleName() + "::convertDTO] writing value: " + valueObject); } writeMethod.invoke(destDTO, new Object[] { valueObject }); } else { if (log.isDebugEnabled()) { log.debug("[" + getClass().getSimpleName() + "::convertDTO] skipping property: " + targetpds[i].getName()); } } } } } } catch (Exception e) { log.error("[" + getClass().getSimpleName() + "::convertDTO] ERROR", e); throw e; } finally { if (log.isDebugEnabled()) { log.debug("[" + getClass().getSimpleName() + "::convertDTO] END"); } } return destDTO; }
From source file:org.alfresco.rest.framework.webscripts.ResourceWebScriptHelper.java
/** * Looks at the object passed in and recursively expands any @EmbeddedEntityResource annotations or related relationship. * {@link org.alfresco.rest.framework.resource.EmbeddedEntityResource EmbeddedEntityResource} is expanded by calling the ReadById method for this entity. * //from w w w . j av a 2 s. c om * Either returns a ExecutionResult object or a CollectionWithPagingInfo containing a collection of ExecutionResult objects. * * @param api Api * @param entityCollectionName String * @param params Params * @param objectToWrap Object * @return Object - Either ExecutionResult or CollectionWithPagingInfo<ExecutionResult> */ public Object processAdditionsToTheResponse(WebScriptResponse res, Api api, String entityCollectionName, Params params, Object objectToWrap) { PropertyCheck.mandatory(this, null, params); if (objectToWrap == null) return null; if (objectToWrap instanceof CollectionWithPagingInfo<?>) { CollectionWithPagingInfo<?> collectionToWrap = (CollectionWithPagingInfo<?>) objectToWrap; Object sourceEntity = executeIncludedSource(api, params, entityCollectionName, collectionToWrap); Collection<Object> resultCollection = new ArrayList(collectionToWrap.getCollection().size()); if (!collectionToWrap.getCollection().isEmpty()) { for (Object obj : collectionToWrap.getCollection()) { resultCollection .add(processAdditionsToTheResponse(res, api, entityCollectionName, params, obj)); } } return CollectionWithPagingInfo.asPaged(collectionToWrap.getPaging(), resultCollection, collectionToWrap.hasMoreItems(), collectionToWrap.getTotalItems(), sourceEntity, collectionToWrap.getContext()); } else { if (BeanUtils.isSimpleProperty(objectToWrap.getClass()) || objectToWrap instanceof Collection) { //Simple property or Collection that can't be embedded so just return it. return objectToWrap; } final ExecutionResult execRes = new ExecutionResult(objectToWrap, params.getFilter()); Map<String, Pair<String, Method>> embeddded = ResourceInspector .findEmbeddedResources(objectToWrap.getClass()); if (embeddded != null && !embeddded.isEmpty()) { Map<String, Object> results = executeEmbeddedResources(api, params, objectToWrap, embeddded); execRes.addEmbedded(results); } if (params.getRelationsFilter() != null && !params.getRelationsFilter().isEmpty()) { Map<String, ResourceWithMetadata> relationshipResources = locator.locateRelationResource(api, entityCollectionName, params.getRelationsFilter().keySet(), HttpMethod.GET); String uniqueEntityId = ResourceInspector.findUniqueId(objectToWrap); Map<String, Object> relatedResources = executeRelatedResources(api, params, relationshipResources, uniqueEntityId); execRes.addRelated(relatedResources); } return execRes; } }