List of usage examples for org.apache.commons.beanutils PropertyUtils getPropertyDescriptor
public static PropertyDescriptor getPropertyDescriptor(Object bean, String name) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException
Retrieve the property descriptor for the specified property of the specified bean, or return null
if there is no such descriptor.
For more details see PropertyUtilsBean
.
From source file:org.openmobster.core.mobileObject.xml.MobileObjectSerializer.java
public Object deserialize(Class pojoClazz, String deviceXml) { try {//from w ww. j a v a 2 s .c o m Object pojo = null; pojo = pojoClazz.newInstance(); Document root = XMLUtilities.parse(deviceXml); //Parse the Object Meta Data List<ArrayMetaData> objectMetaData = new ArrayList<ArrayMetaData>(); NodeList metaDataNodes = root.getElementsByTagName("array-metadata"); if (metaDataNodes != null) { for (int i = 0; i < metaDataNodes.getLength(); i++) { Element metaDataElement = (Element) metaDataNodes.item(i); Element arrayUriElement = (Element) metaDataElement.getElementsByTagName("uri").item(0); Element arrayLengthElement = (Element) metaDataElement.getElementsByTagName("array-length") .item(0); Element arrayClassElement = (Element) metaDataElement.getElementsByTagName("array-class") .item(0); ArrayMetaData arrayMetaData = new ArrayMetaData(); arrayMetaData.arrayUri = arrayUriElement.getTextContent().trim(); arrayMetaData.arrayLength = Integer.parseInt(arrayLengthElement.getTextContent().trim()); arrayMetaData.arrayClass = arrayClassElement.getTextContent().trim(); objectMetaData.add(arrayMetaData); } } //Set the fields Element fieldsElement = (Element) root.getElementsByTagName("fields").item(0); if (fieldsElement != null) { NodeList fieldNodes = fieldsElement.getElementsByTagName("field"); if (fieldNodes != null) { for (int i = 0; i < fieldNodes.getLength(); i++) { Element fieldElement = (Element) fieldNodes.item(i); String name = ((Element) fieldElement.getElementsByTagName("name").item(0)) .getTextContent(); String value = ((Element) fieldElement.getElementsByTagName("value").item(0)) .getTextContent(); String uri = ((Element) fieldElement.getElementsByTagName("uri").item(0)).getTextContent(); String expression = this.parseExpression(uri); if (expression.indexOf('.') == -1 && expression.indexOf('[') == -1) { //Simple Property PropertyDescriptor metaData = PropertyUtils.getPropertyDescriptor(pojo, expression); if (metaData == null || metaData.getPropertyType() == null) { log.error("******************************"); log.error("MetaData Null For: " + expression); log.error("Field Not Found on the MobileBean"); log.error("******************************"); continue; } if (metaData.getPropertyType().isArray() && metaData.getPropertyType().getComponentType().isAssignableFrom(byte.class)) { BeanUtils.setProperty(pojo, expression, Utilities.decodeBinaryData(value)); } else { BeanUtils.setProperty(pojo, expression, value); } } else { //Nested Property this.setNestedProperty(pojo, expression, value, objectMetaData); } } } } return pojo; } catch (Exception e) { log.error(this, e); throw new RuntimeException(e); } }
From source file:org.openmobster.core.mobileObject.xml.MobileObjectSerializer.java
private void setNestedProperty(Object mobileBean, String nestedProperty, String value, List<ArrayMetaData> objectMetaData) { try {//from ww w . j av a2 s . c om StringTokenizer st = new StringTokenizer(nestedProperty, "."); Object courObj = mobileBean; StringBuilder propertyPath = new StringBuilder(); while (st.hasMoreTokens()) { String token = st.nextToken(); propertyPath.append("/" + token); PropertyDescriptor metaData = PropertyUtils.getPropertyDescriptor(courObj, token); if (token.indexOf('[') != -1 && token.indexOf(']') != -1) { String indexedPropertyName = token.substring(0, token.indexOf('[')); metaData = PropertyUtils.getPropertyDescriptor(courObj, indexedPropertyName); } if (metaData == null) { log.error("******************************"); log.error("MetaData Null For: " + token); log.error("Field Not Found on the MobileBean"); log.error("******************************"); continue; } if (!st.hasMoreTokens()) { if (Collection.class.isAssignableFrom(metaData.getPropertyType()) || (metaData.getPropertyType() .isArray() && !metaData.getPropertyType().getComponentType().isAssignableFrom(byte.class))) { //An IndexedProperty this.initializeIndexedProperty(courObj, token, metaData, objectMetaData, propertyPath.toString()); if (metaData.getPropertyType().isArray()) { PropertyUtils.setNestedProperty(mobileBean, nestedProperty, ConvertUtils.convert(value, metaData.getPropertyType().getComponentType())); } else { PropertyUtils.setNestedProperty(mobileBean, nestedProperty, ConvertUtils.convert(value, metaData.getPropertyType())); } } else { //A Simple Property if (metaData.getPropertyType().isArray() && metaData.getPropertyType().getComponentType().isAssignableFrom(byte.class)) { BeanUtils.setProperty(mobileBean, nestedProperty, Utilities.decodeBinaryData(value)); } else { PropertyUtils.setNestedProperty(mobileBean, nestedProperty, ConvertUtils.convert(value, metaData.getPropertyType())); } } } else { if (Collection.class.isAssignableFrom(metaData.getPropertyType()) || metaData.getPropertyType().isArray()) { //An IndexedProperty courObj = this.initializeIndexedProperty(courObj, token, metaData, objectMetaData, propertyPath.toString()); } else { //A Simple Property courObj = this.initializeSimpleProperty(courObj, token, metaData); } } } } catch (Exception e) { log.info("---------------------------------------------------"); log.info("Blowing Up on---------" + nestedProperty); log.info("---------------------------------------------------"); log.error(this, e); throw new RuntimeException(e); } }
From source file:org.openmrs.module.webservices.rest.web.ConversionUtilTest.java
/** * @verifies resolve TypeVariables to actual type * @see ConversionUtil#convert(Object, java.lang.reflect.Type) */// w ww. j a va 2 s . com @Test public void convert_shouldResolveTypeVariablesToActualType() throws Exception { ChildGenericType_Int i = new ChildGenericType_Int(); Method setter = PropertyUtils.getPropertyDescriptor(i, "value").getWriteMethod(); Object result = ConversionUtil.convert("25", setter.getGenericParameterTypes()[0], i); Assert.assertNotNull(result); Assert.assertEquals(25, result); }
From source file:org.openmrs.module.webservices.rest.web.ConversionUtilTest.java
/** * @verifies return the actual type if defined on the parent class * @see ConversionUtil#getTypeVariableClass(Class, java.lang.reflect.TypeVariable) *//*from w ww. j a va2 s. c o m*/ @Test public void getTypeVariableClass_shouldReturnTheActualTypeIfDefinedOnTheParentClass() throws Exception { ChildGenericType_Int i = new ChildGenericType_Int(); ChildGenericType_String s = new ChildGenericType_String(); ChildGenericType_Temp t = new ChildGenericType_Temp(); Method setter = PropertyUtils.getPropertyDescriptor(i, "value").getWriteMethod(); Type type = ConversionUtil.getTypeVariableClass(ChildGenericType_Int.class, (TypeVariable<?>) setter.getGenericParameterTypes()[0]); Assert.assertNotNull(type); Assert.assertEquals(Integer.class, type); setter = PropertyUtils.getPropertyDescriptor(s, "value").getWriteMethod(); type = ConversionUtil.getTypeVariableClass(ChildGenericType_String.class, (TypeVariable<?>) setter.getGenericParameterTypes()[0]); Assert.assertNotNull(type); Assert.assertEquals(String.class, type); setter = PropertyUtils.getPropertyDescriptor(t, "value").getWriteMethod(); type = ConversionUtil.getTypeVariableClass(ChildGenericType_Temp.class, (TypeVariable<?>) setter.getGenericParameterTypes()[0]); Assert.assertNotNull(type); Assert.assertEquals(Temp.class, type); }
From source file:org.openmrs.module.webservices.rest.web.ConversionUtilTest.java
/** * @verifies return the actual type if defined on the grand-parent class * @see ConversionUtil#getTypeVariableClass(Class, java.lang.reflect.TypeVariable) *///from w ww .j a v a 2 s . co m @Test public void getTypeVariableClass_shouldReturnTheActualTypeIfDefinedOnTheGrandparentClass() throws Exception { GrandchildGenericType_Int i = new GrandchildGenericType_Int(); GreatGrandchildGenericType_Int i2 = new GreatGrandchildGenericType_Int(); Method setter = PropertyUtils.getPropertyDescriptor(i, "value").getWriteMethod(); Type type = ConversionUtil.getTypeVariableClass(GrandchildGenericType_Int.class, (TypeVariable<?>) setter.getGenericParameterTypes()[0]); Assert.assertNotNull(type); Assert.assertEquals(Integer.class, type); setter = PropertyUtils.getPropertyDescriptor(i2, "value").getWriteMethod(); type = ConversionUtil.getTypeVariableClass(GreatGrandchildGenericType_Int.class, (TypeVariable<?>) setter.getGenericParameterTypes()[0]); Assert.assertNotNull(type); Assert.assertEquals(Integer.class, type); }
From source file:org.openmrs.module.webservices.rest.web.ConversionUtilTest.java
/** * @verifies return null when actual type cannot be found * @see ConversionUtil#getTypeVariableClass(Class, java.lang.reflect.TypeVariable) *///from w w w . j a va 2 s . c om @Test public void getTypeVariableClass_shouldReturnNullWhenActualTypeCannotBeFound() throws Exception { GrandchildGenericType_Int i = new GrandchildGenericType_Int(); Method setter = PropertyUtils.getPropertyDescriptor(i, "value").getWriteMethod(); Type type = ConversionUtil.getTypeVariableClass(Temp.class, (TypeVariable<?>) setter.getGenericParameterTypes()[0]); Assert.assertNull(type); }
From source file:org.openmrs.module.webservices.rest.web.ConversionUtilTest.java
/** * @verifies return the correct actual type if there are multiple generic types * @see ConversionUtil#getTypeVariableClass(Class, java.lang.reflect.TypeVariable) *//*from ww w . ja v a2 s.c o m*/ @Test public void getTypeVariableClass_shouldReturnTheCorrectActualTypeIfThereAreMultipleGenericTypes() throws Exception { ChildMultiGenericType i = new ChildMultiGenericType(); Method setter = PropertyUtils.getPropertyDescriptor(i, "first").getWriteMethod(); Type type = ConversionUtil.getTypeVariableClass(ChildMultiGenericType.class, (TypeVariable<?>) setter.getGenericParameterTypes()[0]); Assert.assertNotNull(type); Assert.assertEquals(Integer.class, type); setter = PropertyUtils.getPropertyDescriptor(i, "second").getWriteMethod(); type = ConversionUtil.getTypeVariableClass(ChildMultiGenericType.class, (TypeVariable<?>) setter.getGenericParameterTypes()[0]); Assert.assertNotNull(type); Assert.assertEquals(String.class, type); setter = PropertyUtils.getPropertyDescriptor(i, "third").getWriteMethod(); type = ConversionUtil.getTypeVariableClass(ChildMultiGenericType.class, (TypeVariable<?>) setter.getGenericParameterTypes()[0]); Assert.assertNotNull(type); Assert.assertEquals(Temp.class, type); }
From source file:org.openmrs.module.webservices.rest.web.ConversionUtilTest.java
/** * @verifies throw IllegalArgumentException when instance class is null * @see ConversionUtil#getTypeVariableClass(Class, java.lang.reflect.TypeVariable) *//* w ww . jav a 2 s .c o m*/ @Test(expected = IllegalArgumentException.class) public void getTypeVariableClass_shouldThrowIllegalArgumentExceptionWhenInstanceClassIsNull() throws Exception { GrandchildGenericType_Int i = new GrandchildGenericType_Int(); Method setter = PropertyUtils.getPropertyDescriptor(i, "value").getWriteMethod(); Type type = ConversionUtil.getTypeVariableClass(null, (TypeVariable<?>) setter.getGenericParameterTypes()[0]); }
From source file:org.openmrs.module.webservices.rest.web.resource.impl.BaseDelegatingConverter.java
@Override public void setProperty(Object instance, String propertyName, Object value) throws ConversionException { try {// w w w .j a va2s . c o m // try to find a @PropertySetter-annotated method Method annotatedSetter = ReflectionUtil.findPropertySetterMethod(this, propertyName); if (annotatedSetter != null) { Type expectedType = annotatedSetter.getGenericParameterTypes()[1]; value = ConversionUtil.convert(value, expectedType); annotatedSetter.invoke(this, instance, value); return; } // we need the generic type of this property, not just the class Method setter = PropertyUtils.getPropertyDescriptor(instance, propertyName).getWriteMethod(); // Convert the value to the specified type value = ConversionUtil.convert(value, setter.getGenericParameterTypes()[0], instance); setPropertyWhichMayBeAHibernateCollection(instance, propertyName, value); } catch (Exception ex) { throw new ConversionException(propertyName + " on " + instance.getClass(), ex); } }
From source file:org.openmrs.module.webservices.rest.web.resource.impl.BaseDelegatingResource.java
/** * @see org.openmrs.module.webservices.rest.web.resource.api.Converter#setProperty(java.lang.Object, * java.lang.String, java.lang.Object) *//* w ww. ja v a 2s. c o m*/ @Override public void setProperty(Object instance, String propertyName, Object value) throws ConversionException { if (propertiesIgnoredWhenUpdating.contains(propertyName)) { return; } try { DelegatingResourceHandler<? extends T> handler; try { handler = getResourceHandler((T) instance); } catch (Exception e) { // this try/catch isn't really needed because of java erasure behaviour at run time. // but I'm putting in here just in case handler = this; } // try to find a @PropertySetter-annotated method Method annotatedSetter = findSetterMethod(handler, propertyName); if (annotatedSetter != null) { Type expectedType = annotatedSetter.getGenericParameterTypes()[1]; value = ConversionUtil.convert(value, expectedType); annotatedSetter.invoke(handler, instance, value); return; } // we need the generic type of this property, not just the class Method setter = PropertyUtils.getPropertyDescriptor(instance, propertyName).getWriteMethod(); value = ConversionUtil.convert(value, setter.getGenericParameterTypes()[0]); if (value instanceof Collection) { //We need to handle collections in a way that Hibernate can track. Collection<?> newCollection = (Collection<?>) value; Object oldValue = PropertyUtils.getProperty(instance, propertyName); if (oldValue instanceof Collection) { Collection collection = (Collection) oldValue; collection.clear(); collection.addAll(newCollection); } else { PropertyUtils.setProperty(instance, propertyName, value); } } else { PropertyUtils.setProperty(instance, propertyName, value); } } catch (Exception ex) { throw new ConversionException(propertyName + " on " + instance.getClass(), ex); } }