@Override @Nullable public Object getValue() throws Exception { final Method readMethod = this.pd.getReadMethod(); if (System.getSecurityManager() != null) { AccessController.doPrivileged((PrivilegedAction<Object>) () -> { ReflectionUtils.makeAccessible(readMethod); return null; }); try { return AccessController.doPrivileged((PrivilegedExceptionAction<Object>) () -> readMethod.invoke(getWrappedInstance(), (Object[]) null), acc); } catch (PrivilegedActionException pae) { throw pae.getException(); } } else { ReflectionUtils.makeAccessible(readMethod); return readMethod.invoke(getWrappedInstance(), (Object[]) null); } }
@Override public void setValue(final @Nullable Object value) throws Exception { final Method writeMethod = (this.pd instanceof GenericTypeAwarePropertyDescriptor ? ((GenericTypeAwarePropertyDescriptor) this.pd).getWriteMethodForActualAccess() : this.pd.getWriteMethod()); if (System.getSecurityManager() != null) { AccessController.doPrivileged((PrivilegedAction<Object>) () -> { ReflectionUtils.makeAccessible(writeMethod); return null; }); try { AccessController.doPrivileged((PrivilegedExceptionAction<Object>) () -> writeMethod.invoke(getWrappedInstance(), value), acc); } catch (PrivilegedActionException ex) { throw ex.getException(); } } else { ReflectionUtils.makeAccessible(writeMethod); writeMethod.invoke(getWrappedInstance(), value); } } }
@Override @Nullable public Object getValue() throws Exception { final Method readMethod = this.pd.getReadMethod(); if (System.getSecurityManager() != null) { AccessController.doPrivileged((PrivilegedAction<Object>) () -> { ReflectionUtils.makeAccessible(readMethod); return null; }); try { return AccessController.doPrivileged((PrivilegedExceptionAction<Object>) () -> readMethod.invoke(getWrappedInstance(), (Object[]) null), acc); } catch (PrivilegedActionException pae) { throw pae.getException(); } } else { ReflectionUtils.makeAccessible(readMethod); return readMethod.invoke(getWrappedInstance(), (Object[]) null); } }
@Override public void setValue(final @Nullable Object value) throws Exception { final Method writeMethod = (this.pd instanceof GenericTypeAwarePropertyDescriptor ? ((GenericTypeAwarePropertyDescriptor) this.pd).getWriteMethodForActualAccess() : this.pd.getWriteMethod()); if (System.getSecurityManager() != null) { AccessController.doPrivileged((PrivilegedAction<Object>) () -> { ReflectionUtils.makeAccessible(writeMethod); return null; }); try { AccessController.doPrivileged((PrivilegedExceptionAction<Object>) () -> writeMethod.invoke(getWrappedInstance(), value), acc); } catch (PrivilegedActionException ex) { throw ex.getException(); } } else { ReflectionUtils.makeAccessible(writeMethod); writeMethod.invoke(getWrappedInstance(), value); } } }
/** * Get and modify the PropertyDescriptors associated with the BeanWrapper. * @param bwrap */ protected PropertyDescriptor[] getPropertyDescriptors(BeanWrapperImpl bwrap) { PropertyDescriptor[] descriptors = bwrap.getPropertyDescriptors(); for(PropertyDescriptor pd : descriptors) { if (DescriptorUpdater.class.isAssignableFrom(bwrap.getWrappedClass()) ) { ((DescriptorUpdater) bwrap.getWrappedInstance()).updateDescriptor(pd); } else { defaultUpdateDescriptor(pd); } } return descriptors; }
if (nestedBw == null || nestedBw.getWrappedInstance() != propertyValue) { if (logger.isTraceEnabled()) { logger.trace("Creating new nested BeanWrapper for property '" + canonicalName + "'");
/** * Create new BeanWrapperImpl for the given object, * registering a nested path that the object is in. * @param object object wrapped by this BeanWrapper * @param nestedPath the nested path of the object * @param superBw the containing BeanWrapper (must not be <code>null</code>) */ private BeanWrapperImpl(Object object, String nestedPath, BeanWrapperImpl superBw) { setWrappedInstance(object, nestedPath, superBw.getWrappedInstance()); setExtractOldValueForEditor(superBw.isExtractOldValueForEditor()); setAutoGrowNestedPaths(superBw.isAutoGrowNestedPaths()); setAutoGrowCollectionLimit(superBw.getAutoGrowCollectionLimit()); setConversionService(superBw.getConversionService()); setSecurityContext(superBw.acc); }
@Override public String[] profilesToActivate() { if (beanWrapper.getWrappedInstance() instanceof ProfileNamesProvider) { return ((ProfileNamesProvider) beanWrapper.getWrappedInstance()).profilesToActivate(); } else { return super.profilesToActivate(); } } };
/** * Create new BeanWrapperImpl for the given object, * registering a nested path that the object is in. * @param object object wrapped by this BeanWrapper * @param nestedPath the nested path of the object * @param superBw the containing BeanWrapper (must not be <code>null</code>) */ private BeanWrapperImpl(Object object, String nestedPath, BeanWrapperImpl superBw) { setWrappedInstance(object, nestedPath, superBw.getWrappedInstance()); }
return readMethod.invoke(getWrappedInstance(), (Object[]) null);
/** * Get and modify the PropertyDescriptors associated with the BeanWrapper. * @param bwrap */ protected PropertyDescriptor[] getPropertyDescriptors(BeanWrapperImpl bwrap) { PropertyDescriptor[] descriptors = bwrap.getPropertyDescriptors(); for(PropertyDescriptor pd : descriptors) { if (DescriptorUpdater.class.isAssignableFrom(bwrap.getWrappedClass()) ) { ((DescriptorUpdater) bwrap.getWrappedInstance()).updateDescriptor(pd); } else { defaultUpdateDescriptor(pd); } } return descriptors; }
@SuppressWarnings("unchecked") public static <T> T transferMapToMessage(Class<T> clazz, Map<String, String> map) { MutablePropertyValues propertyValues = toPropertyValues(map); BeanWrapperImpl beanWrapper = new BeanWrapperImpl(clazz); beanWrapper.registerCustomEditor(byte[].class, new ByteArrayBase64PropertyEditor()); beanWrapper.setAutoGrowNestedPaths(true); beanWrapper.setPropertyValues(propertyValues); return (T) beanWrapper.getWrappedInstance(); }
public T read(Class<? extends T> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException { MultiValueMap<String, ?> map = delegate.read(null, inputMessage); BeanWrapperImpl beanWrapper = new BeanWrapperImpl(targetType); initBeanWrapper(beanWrapper); Map<String, Object> props = new HashMap<String, Object>(); for (String key : map.keySet()) { if (beanWrapper.isWritableProperty(key)) { List<?> list = map.get(key); props.put(key, map.get(key).size()>1 ? list : map.getFirst(key)); } } beanWrapper.setPropertyValues(props); @SuppressWarnings("unchecked") T result = (T) beanWrapper.getWrappedInstance(); return result; }
if (nestedBw == null || nestedBw.getWrappedInstance() != propertyValue) { if (logger.isDebugEnabled()) { logger.debug("Creating new nested BeanWrapper for property '" + canonicalName + "'");
@SuppressWarnings("unchecked") private void bindAndValidate(Map<String, String> raw) throws BindException { DataBinder dataBinder = new DataBinder(beanWrapper.getWrappedInstance()); dataBinder.setIgnoreUnknownFields(false); dataBinder.setConversionService(conversionService); MutablePropertySources mps = new MutablePropertySources(); mps.addFirst(new MapPropertySource("options", (Map) raw)); try { dataBinder.bind(new PropertySourcesPropertyValues(mps)); } catch (InvalidPropertyException e) { dataBinder.getBindingResult().addError(new FieldError("options", e.getPropertyName(), e.getMessage())); } CustomValidatorBean validator = new CustomValidatorBean(); validator.afterPropertiesSet(); dataBinder.setValidator(validator); Class<?>[] groups = determineGroupsToUse(beanWrapper.getWrappedInstance()); dataBinder.validate((Object[]) groups); if (dataBinder.getBindingResult().hasErrors()) { throw new BindException(dataBinder.getBindingResult()); } }