private XmlReadHandler createReadHandler(String propertyName) throws ParseException { try { final ExpressionMetaData expressionMetaData = ExpressionRegistry.getInstance().getExpressionMetaData(expressionClass); final ExpressionPropertyMetaData propertyDescription = expressionMetaData.getPropertyDescription(propertyName); if (propertyDescription != null) { final Class<? extends UserDefinedExpressionPropertyReadHandler> propertyReadHandler = propertyDescription.getPropertyReadHandler(); if (propertyReadHandler != null) { final UserDefinedExpressionPropertyReadHandler xmlReadHandler = propertyReadHandler.newInstance(); xmlReadHandler.init( beanUtility, originalExpressionClass, expressionClass, expression.getName()); return xmlReadHandler; } } return new ExpressionPropertyReadHandler( beanUtility, originalExpressionClass, expressionClass, expression.getName()); } catch (MetaDataLookupException e) { return new ExpressionPropertyReadHandler( beanUtility, originalExpressionClass, expressionClass, expression.getName()); } catch (Exception e) { throw new ParseException( "Unable to read metadata for property '" + propertyName + "'.", getLocator()); } }
private static ExpressionPropertyWriteHandler createWriteHandler(Expression e, String key) { try { final ExpressionMetaData expressionMetaData = ExpressionRegistry.getInstance().getExpressionMetaData(e.getClass().getName()); final ExpressionPropertyMetaData propertyDescription = expressionMetaData.getPropertyDescription(key); final Class<? extends ExpressionPropertyWriteHandler> writeHandlerRef = propertyDescription.getPropertyWriteHandler(); if (writeHandlerRef != null) { return writeHandlerRef.newInstance(); } } catch (Exception ex) { logger.info("No valid property metadata defined for " + e.getClass() + " on property " + key); } return new DefaultExpressionPropertyWriteHandler(); }