/** * Invokes setter, but first converts type to match the setter type. */ protected Object invokeSetter(final Setter setter, final BeanProperty bp, Object value) { try { final MapperFunction setterMapperFunction = setter.getMapperFunction(); if (setterMapperFunction != null) { value = setterMapperFunction.apply(value); } final Class type = setter.getSetterRawType(); if (ClassUtil.isTypeOf(type, Collection.class)) { Class componentType = setter.getSetterRawComponentType(); value = convertToCollection(value, type, componentType); } else { // no collections value = convertType(value, type); } setter.invokeSetter(bp.bean, value); } catch (Exception ex) { if (isSilent) { return null; } throw new BeanException("Setter failed: " + setter, ex); } return value; }
/** * Sets the property value. */ private void setValue(final Object target, final PropertyDescriptor pd, Object value) throws InvocationTargetException, IllegalAccessException { Class propertyType; Setter setter = pd.getSetter(true); if (setter != null) { if (value != null) { propertyType = setter.getSetterRawType(); value = jsonParser.convertType(value, propertyType); } setter.invokeSetter(target, value); } }
/** * Invokes setter, but first converts type to match the setter type. */ protected Object invokeSetter(Setter setter, BeanProperty bp, Object value) { try { Class type = setter.getSetterRawType(); if (ReflectUtil.isTypeOf(type, Collection.class)) { Class componentType = setter.getSetterRawComponentType(); value = convertToCollection(value, type, componentType); } else { // no collections value = convertType(value, type); } setter.invokeSetter(bp.bean, value); } catch (Exception ex) { if (isSilent) { return null; } throw new BeanException("Setter failed: " + setter, ex); } return value; }
/** * Injects value into the targets property. */ protected void injectValueIntoObject(final Object target, final PropertyDescriptor pd, final Object value) { Object convertedValue = value; if (value != null) { Class targetClass = pd.getType(); convertedValue = convertType(value, targetClass); } try { Setter setter = pd.getSetter(true); if (setter != null) { setter.invokeSetter(target, convertedValue); } } catch (Exception ex) { throw new JsonException(ex); } }
/** * Creates new instance for current property name through its setter. * It uses default constructor! */ protected Object createBeanProperty(BeanProperty bp) { Setter setter = bp.getSetter(true); if (setter == null) { return null; } Class type = setter.getSetterRawType(); Object newInstance; try { newInstance = ReflectUtil.newInstance(type); } catch (Exception ex) { if (isSilent) { return null; } throw new BeanException("Invalid property: " + bp.name, bp, ex); } newInstance = invokeSetter(setter, bp, newInstance); return newInstance; }
protected void wireSets() { for (final SetInjectionPoint sip : definition().sets) { String[] beanNames = pc.resolveBeanNamesForType(sip.targetClass); Collection beans = sip.createSet(beanNames.length); for (String beanName : beanNames) { if (!beanName.equals(definition().name)) { Object value = pc.getBean(beanName); beans.add(value); } } //BeanUtil.setDeclaredProperty(bean, sip.field.getName(), beans); final Setter setter = sip.propertyDescriptor.getSetter(true); try { setter.invokeSetter(bean, beans); } catch (Exception ex) { throw new PetiteException("Wiring failed", ex); } } }
/** * Creates new instance for current property name through its setter. * It uses default constructor! */ protected Object createBeanProperty(final BeanProperty bp) { Setter setter = bp.getSetter(true); if (setter == null) { return null; } Class type = setter.getSetterRawType(); Object newInstance; try { newInstance = ClassUtil.newInstance(type); } catch (Exception ex) { if (isSilent) { return null; } throw new BeanException("Invalid property: " + bp.name, bp, ex); } newInstance = invokeSetter(setter, bp, newInstance); return newInstance; }
/** * Invokes setter, but first converts type to match the setter type. */ protected Object invokeSetter(final Setter setter, final BeanProperty bp, Object value) { try { final MapperFunction setterMapperFunction = setter.getMapperFunction(); if (setterMapperFunction != null) { value = setterMapperFunction.apply(value); } final Class type = setter.getSetterRawType(); if (ClassUtil.isTypeOf(type, Collection.class)) { Class componentType = setter.getSetterRawComponentType(); value = convertToCollection(value, type, componentType); } else { // no collections value = convertType(value, type); } setter.invokeSetter(bp.bean, value); } catch (Exception ex) { if (isSilent) { return null; } throw new BeanException("Setter failed: " + setter, ex); } return value; }
protected void wireProperties() { for (PropertyInjectionPoint pip : beanDefinition.properties) { final BeanReferences refNames = pip.references; final Object value = pc.lookupMixingScopedBean(this.definition(), refNames); if (value == null) { if ((beanDefinition.wiringMode == WiringMode.STRICT)) { throw new PetiteException("Wiring failed. Beans references: '" + refNames + "' not found for property: " + beanDefinition.type.getName() + '#' + pip.propertyDescriptor.getName()); } continue; } // BeanUtil.setDeclaredProperty(bean, pip.propertyDescriptor.getName(), value); final Setter setter = pip.propertyDescriptor.getSetter(true); try { setter.invokeSetter(bean, value); } catch (Exception ex) { throw new PetiteException("Wiring failed", ex); } } }
/** * Creates new instance for current property name through its setter. * It uses default constructor! */ protected Object createBeanProperty(final BeanProperty bp) { Setter setter = bp.getSetter(true); if (setter == null) { return null; } Class type = setter.getSetterRawType(); Object newInstance; try { newInstance = ClassUtil.newInstance(type); } catch (Exception ex) { if (isSilent) { return null; } throw new BeanException("Invalid property: " + bp.name, bp, ex); } newInstance = invokeSetter(setter, bp, newInstance); return newInstance; }
setter.invokeSetter(one, "one!"); setter.invokeSetter(one, Long.valueOf("99")); assertEquals(99, one.whynot());
@Test void testPropertiesOneSubClass() throws InvocationTargetException, IllegalAccessException { ClassDescriptor cd = ClassIntrospector.get().lookup(OneSub.class); PropertyDescriptor[] propertyDescriptors = cd.getAllPropertyDescriptors(); assertEquals(2, propertyDescriptors.length); assertEquals("fone", propertyDescriptors[0].getName()); assertEquals("ftwo", propertyDescriptors[1].getName()); for (int i = 0; i < 2; i++) { assertNull(propertyDescriptors[i].getWriteMethodDescriptor()); assertNotNull(propertyDescriptors[i].getReadMethodDescriptor()); assertNotNull(propertyDescriptors[i].getFieldDescriptor()); } // change value OneSub one = new OneSub(); Setter setter = propertyDescriptors[0].getSetter(true); setter.invokeSetter(one, "one!"); assertEquals("one!", one.getFone()); // fields FieldDescriptor[] fieldDescriptors = cd.getAllFieldDescriptors(); assertEquals(1, fieldDescriptors.length); assertEquals("ftwo", fieldDescriptors[0].getName()); // beanutil BeanUtil.declared.setProperty(one, "fone", "!!!"); assertEquals("!!!", one.getFone()); }
@Test void testPropertiesTwoSubClass() throws InvocationTargetException, IllegalAccessException { ClassDescriptor cd = ClassIntrospector.get().lookup(TwoSub.class); PropertyDescriptor[] propertyDescriptors = cd.getAllPropertyDescriptors(); assertEquals(2, propertyDescriptors.length); assertEquals("fone", propertyDescriptors[0].getName()); assertEquals("ftwo", propertyDescriptors[1].getName()); for (int i = 0; i < 2; i++) { assertNull(propertyDescriptors[i].getWriteMethodDescriptor()); assertNotNull(propertyDescriptors[i].getReadMethodDescriptor()); assertNotNull(propertyDescriptors[i].getFieldDescriptor()); } // change value TwoSub one = new TwoSub(); Setter setter = propertyDescriptors[0].getSetter(true); setter.invokeSetter(one, "one!"); assertEquals("one!", one.getFone()); // fields FieldDescriptor[] fieldDescriptors = cd.getAllFieldDescriptors(); assertEquals(1, fieldDescriptors.length); assertEquals("ftwo", fieldDescriptors[0].getName()); // beanutil BeanUtil.declared.setProperty(one, "fone", "!!!"); assertEquals("!!!", one.getFone()); }
protected void wireSets() { for (final SetInjectionPoint sip : definition().sets) { String[] beanNames = pc.resolveBeanNamesForType(sip.targetClass); Collection beans = sip.createSet(beanNames.length); for (String beanName : beanNames) { if (!beanName.equals(definition().name)) { Object value = pc.getBean(beanName); beans.add(value); } } //BeanUtil.setDeclaredProperty(bean, sip.field.getName(), beans); final Setter setter = sip.propertyDescriptor.getSetter(true); try { setter.invokeSetter(bean, beans); } catch (Exception ex) { throw new PetiteException("Wiring failed", ex); } } }
protected void wireProperties() { for (PropertyInjectionPoint pip : beanDefinition.properties) { final BeanReferences refNames = pip.references; final Object value = pc.lookupMixingScopedBean(this.definition(), refNames); if (value == null) { if ((beanDefinition.wiringMode == WiringMode.STRICT)) { throw new PetiteException("Wiring failed. Beans references: '" + refNames + "' not found for property: " + beanDefinition.type.getName() + '#' + pip.propertyDescriptor.getName()); } continue; } // BeanUtil.setDeclaredProperty(bean, pip.propertyDescriptor.getName(), value); final Setter setter = pip.propertyDescriptor.getSetter(true); try { setter.invokeSetter(bean, value); } catch (Exception ex) { throw new PetiteException("Wiring failed", ex); } } }