/** * Gets spring expression parser. * * @return the spring expression parser */ protected SpringELExpressionParser getSpringExpressionParser() { final SpelParserConfiguration configuration = new SpelParserConfiguration(); final SpelExpressionParser spelExpressionParser = new SpelExpressionParser(configuration); final SpringELExpressionParser parser = new SpringELExpressionParser(spelExpressionParser, this.flowBuilderServices.getConversionService()); parser.addPropertyAccessor(new ActionPropertyAccessor()); parser.addPropertyAccessor(new BeanFactoryPropertyAccessor()); parser.addPropertyAccessor(new FlowVariablePropertyAccessor()); parser.addPropertyAccessor(new MapAdaptablePropertyAccessor()); parser.addPropertyAccessor(new MessageSourcePropertyAccessor()); parser.addPropertyAccessor(new ScopeSearchingPropertyAccessor()); parser.addPropertyAccessor(new BeanExpressionContextAccessor()); parser.addPropertyAccessor(new MapAccessor()); parser.addPropertyAccessor(new MapAdaptablePropertyAccessor()); parser.addPropertyAccessor(new EnvironmentAccessor()); parser.addPropertyAccessor(new ReflectivePropertyAccessor()); return parser; }
public ElementConfiguration parseProperty(Object value) { LOGGER.debug("value : " + value); if (value instanceof TypedStringValue) { TypedStringValue stringValue = (TypedStringValue) value; if (stringValue.getTargetTypeName() != null) { return getEnumObjectConfiguration(stringValue); } else { PrimitiveConfiguration primitiveConfiguration = objectConfigurationFactory .createPrimitiveConfiguration(); if (useSPEL(stringValue)) { ExpressionParser parser = new SpelExpressionParser(); String expAsStringWithToken = stringValue.getValue().trim(); String expAsString = expAsStringWithToken.substring(2, expAsStringWithToken.length() - 1).trim(); LOGGER.trace("This property is a SPEL expression: " + expAsString); // String regex = "systemProperties\\['([^\\s]+)'\\]"; Expression exp = parser.parseExpression(expAsString); StandardEvaluationContext sec = null; if (sec == null) { sec = new StandardEvaluationContext(); sec.addPropertyAccessor(new EnvironmentAccessor()); sec.addPropertyAccessor(new BeanExpressionContextAccessor()); sec.addPropertyAccessor(new BeanFactoryAccessor()); sec.addPropertyAccessor(new MapAccessor()); } primitiveConfiguration.setValue(String.valueOf(exp.getValue())); } else { LOGGER.trace("This property is NOT a SPEL expression: " + stringValue.getValue()); primitiveConfiguration.setValue(stringValue.getValue()); } return primitiveConfiguration; } } else if (value instanceof RuntimeBeanReference) { RuntimeBeanReference beanReference = (RuntimeBeanReference) value; ReferenceConfiguration referenceConfiguration = objectConfigurationFactory.createReferenceConfiguration(); referenceConfiguration.setReferenceName(beanReference.getBeanName()); return referenceConfiguration; } else if (value instanceof ManagedList<?>) { return parseValueList((ManagedList<?>) value); } else if (value instanceof ManagedMap<?, ?>) { return parseValueMap((ManagedMap<?, ?>) value); } else if (value instanceof BeanDefinitionHolder) { BeanDefinitionHolder beanDefinitionHolder = (BeanDefinitionHolder) value; return parseBeanDefinition(beanDefinitionHolder.getBeanDefinition()); } else { throw new UnsupportedOperationException("The type of property value is not suppported : " + value + " (class : " + value.getClass().getName() + ")"); } }