From 24d40fa3e03a234586aaf5045dcac36b6d8b4481 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Mon, 13 Jan 2014 22:14:27 +0100 Subject: [PATCH] Fixed resolveProxyTargetClass exception message --- .../support/ScriptFactoryPostProcessor.java | 70 +++++++++++-------- 1 file changed, 39 insertions(+), 31 deletions(-) diff --git a/spring-context/src/main/java/org/springframework/scripting/support/ScriptFactoryPostProcessor.java b/spring-context/src/main/java/org/springframework/scripting/support/ScriptFactoryPostProcessor.java index 2314ac9d1a..01e3c20692 100644 --- a/spring-context/src/main/java/org/springframework/scripting/support/ScriptFactoryPostProcessor.java +++ b/spring-context/src/main/java/org/springframework/scripting/support/ScriptFactoryPostProcessor.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -23,15 +23,11 @@ import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.springframework.asm.Type; - -import org.springframework.cglib.core.Signature; -import org.springframework.cglib.proxy.InterfaceMaker; - import org.springframework.aop.TargetSource; import org.springframework.aop.framework.AopInfrastructureBean; import org.springframework.aop.framework.ProxyFactory; import org.springframework.aop.support.DelegatingIntroductionInterceptor; +import org.springframework.asm.Type; import org.springframework.beans.BeanUtils; import org.springframework.beans.PropertyValue; import org.springframework.beans.factory.BeanClassLoaderAware; @@ -50,6 +46,8 @@ import org.springframework.beans.factory.support.AbstractBeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionValidationException; import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.beans.factory.support.GenericBeanDefinition; +import org.springframework.cglib.core.Signature; +import org.springframework.cglib.proxy.InterfaceMaker; import org.springframework.context.ResourceLoaderAware; import org.springframework.core.Conventions; import org.springframework.core.Ordered; @@ -259,9 +257,11 @@ public class ScriptFactoryPostProcessor extends InstantiationAwareBeanPostProces Class scriptedType = scriptFactory.getScriptedObjectType(scriptSource); if (scriptedType != null) { return scriptedType; - } else if (!ObjectUtils.isEmpty(interfaces)) { + } + else if (!ObjectUtils.isEmpty(interfaces)) { return (interfaces.length == 1 ? interfaces[0] : createCompositeInterface(interfaces)); - } else { + } + else { if (bd.isSingleton()) { Object bean = this.scriptBeanFactory.getBean(scriptedObjectBeanName); if (bean != null) { @@ -269,14 +269,16 @@ public class ScriptFactoryPostProcessor extends InstantiationAwareBeanPostProces } } } - } catch (Exception ex) { + } + catch (Exception ex) { if (ex instanceof BeanCreationException && ((BeanCreationException) ex).getMostSpecificCause() instanceof BeanCurrentlyInCreationException) { if (logger.isTraceEnabled()) { logger.trace("Could not determine scripted object type for bean '" + beanName + "': " + ex.getMessage()); } - } else { + } + else { if (logger.isDebugEnabled()) { logger.debug("Could not determine scripted object type for bean '" + beanName + "'", ex); } @@ -307,9 +309,10 @@ public class ScriptFactoryPostProcessor extends InstantiationAwareBeanPostProces if (scriptedObjectType != null) { isFactoryBean = FactoryBean.class.isAssignableFrom(scriptedObjectType); } - } catch (Exception ex) { - throw new BeanCreationException(beanName, "Could not determine scripted object type for " + scriptFactory, - ex); + } + catch (Exception ex) { + throw new BeanCreationException(beanName, + "Could not determine scripted object type for " + scriptFactory, ex); } long refreshCheckDelay = resolveRefreshCheckDelay(bd); @@ -319,10 +322,10 @@ public class ScriptFactoryPostProcessor extends InstantiationAwareBeanPostProces scriptedObjectBeanName, scriptFactory, scriptSource, isFactoryBean); boolean proxyTargetClass = resolveProxyTargetClass(bd); String language = (String) bd.getAttribute(LANGUAGE_ATTRIBUTE); - if (proxyTargetClass && (language==null || !language.equals("groovy"))) { + if (proxyTargetClass && (language == null || !language.equals("groovy"))) { throw new BeanDefinitionValidationException( - "Cannot use proxyTargetClass=true with script beans where language is not groovy (found " - + language + ")"); + "Cannot use proxyTargetClass=true with script beans where language is not 'groovy': '" + + language + "'"); } ts.setRefreshCheckDelay(refreshCheckDelay); return createRefreshableProxy(ts, interfaces, proxyTargetClass); @@ -389,12 +392,14 @@ public class ScriptFactoryPostProcessor extends InstantiationAwareBeanPostProces Object attributeValue = beanDefinition.getAttribute(REFRESH_CHECK_DELAY_ATTRIBUTE); if (attributeValue instanceof Number) { refreshCheckDelay = ((Number) attributeValue).longValue(); - } else if (attributeValue instanceof String) { + } + else if (attributeValue instanceof String) { refreshCheckDelay = Long.parseLong((String) attributeValue); - } else if (attributeValue != null) { - throw new BeanDefinitionStoreException("Invalid refresh check delay attribute [" - + REFRESH_CHECK_DELAY_ATTRIBUTE + "] with value [" + attributeValue - + "]: needs to be of type Number or String"); + } + else if (attributeValue != null) { + throw new BeanDefinitionStoreException("Invalid refresh check delay attribute [" + + REFRESH_CHECK_DELAY_ATTRIBUTE + "] with value '" + attributeValue + + "': needs to be of type Number or String"); } return refreshCheckDelay; } @@ -403,13 +408,15 @@ public class ScriptFactoryPostProcessor extends InstantiationAwareBeanPostProces boolean proxyTargetClass = this.defaultProxyTargetClass; Object attributeValue = beanDefinition.getAttribute(PROXY_TARGET_CLASS_ATTRIBUTE); if (attributeValue instanceof Boolean) { - proxyTargetClass = ((Boolean) attributeValue).booleanValue(); - } else if (attributeValue instanceof String) { - proxyTargetClass = new Boolean((String) attributeValue); - } else if (attributeValue != null) { - throw new BeanDefinitionStoreException("Invalid refresh check delay attribute [" - + REFRESH_CHECK_DELAY_ATTRIBUTE + "] with value [" + attributeValue - + "]: needs to be of type Number or String"); + proxyTargetClass = (Boolean) attributeValue; + } + else if (attributeValue instanceof String) { + proxyTargetClass = Boolean.valueOf((String) attributeValue); + } + else if (attributeValue != null) { + throw new BeanDefinitionStoreException("Invalid proxy target class attribute [" + + PROXY_TARGET_CLASS_ATTRIBUTE + "] with value '" + attributeValue + + "': needs to be of type Boolean or String"); } return proxyTargetClass; } @@ -463,7 +470,8 @@ public class ScriptFactoryPostProcessor extends InstantiationAwareBeanPostProces if (scriptSourceLocator.startsWith(INLINE_SCRIPT_PREFIX)) { return new StaticScriptSource(scriptSourceLocator.substring(INLINE_SCRIPT_PREFIX.length()), beanName); - } else { + } + else { return new ResourceScriptSource(resourceLoader.getResource(scriptSourceLocator)); } } @@ -489,7 +497,7 @@ public class ScriptFactoryPostProcessor extends InstantiationAwareBeanPostProces String propertyName = pv.getName(); Class propertyType = BeanUtils.findPropertyType(propertyName, interfaces); String setterName = "set" + StringUtils.capitalize(propertyName); - Signature signature = new Signature(setterName, Type.VOID_TYPE, new Type[] { Type.getType(propertyType) }); + Signature signature = new Signature(setterName, Type.VOID_TYPE, new Type[] {Type.getType(propertyType)}); maker.add(signature, new Type[0]); } if (bd instanceof AbstractBeanDefinition) { @@ -560,7 +568,7 @@ public class ScriptFactoryPostProcessor extends InstantiationAwareBeanPostProces } proxyFactory.setInterfaces(interfaces); if (proxyTargetClass) { - classLoader = null; // Force use of Class.getClassLoader() + classLoader = null; // force use of Class.getClassLoader() proxyFactory.setProxyTargetClass(proxyTargetClass); }