diff --git a/spring-context/src/main/java/org/springframework/context/annotation/ComponentScanBeanDefinitionParser.java b/spring-context/src/main/java/org/springframework/context/annotation/ComponentScanBeanDefinitionParser.java index e6a5ef274a..3a4bf809b0 100644 --- a/spring-context/src/main/java/org/springframework/context/annotation/ComponentScanBeanDefinitionParser.java +++ b/spring-context/src/main/java/org/springframework/context/annotation/ComponentScanBeanDefinitionParser.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2014 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. @@ -258,7 +258,7 @@ public class ComponentScanBeanDefinitionParser implements BeanDefinitionParser { @SuppressWarnings("unchecked") private Object instantiateUserDefinedStrategy(String className, Class strategyType, ClassLoader classLoader) { - Object result = null; + Object result; try { result = classLoader.loadClass(className).newInstance(); } @@ -268,7 +268,7 @@ public class ComponentScanBeanDefinitionParser implements BeanDefinitionParser { } catch (Exception ex) { throw new IllegalArgumentException("Unable to instantiate class [" + className + "] for strategy [" + - strategyType.getName() + "]. A zero-argument constructor is required", ex); + strategyType.getName() + "]: a zero-argument constructor is required", ex); } if (!strategyType.isAssignableFrom(result.getClass())) { diff --git a/spring-core/src/main/java/org/springframework/core/LocalVariableTableParameterNameDiscoverer.java b/spring-core/src/main/java/org/springframework/core/LocalVariableTableParameterNameDiscoverer.java index 1c0c9ad1ee..73dbe2c8eb 100644 --- a/spring-core/src/main/java/org/springframework/core/LocalVariableTableParameterNameDiscoverer.java +++ b/spring-core/src/main/java/org/springframework/core/LocalVariableTableParameterNameDiscoverer.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2013 the original author or authors. + * Copyright 2002-2014 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. @@ -103,8 +103,8 @@ public class LocalVariableTableParameterNameDiscoverer implements ParameterNameD // We couldn't load the class file, which is not fatal as it // simply means this method of discovering parameter names won't work. if (logger.isDebugEnabled()) { - logger.debug("Cannot find '.class' file for class [" + clazz - + "] - unable to determine constructors/methods parameter names"); + logger.debug("Cannot find '.class' file for class [" + clazz + + "] - unable to determine constructor/method parameter names"); } return NO_DEBUG_INFO_MAP; } @@ -117,14 +117,14 @@ public class LocalVariableTableParameterNameDiscoverer implements ParameterNameD catch (IOException ex) { if (logger.isDebugEnabled()) { logger.debug("Exception thrown while reading '.class' file for class [" + clazz + - "] - unable to determine constructors/methods parameter names", ex); + "] - unable to determine constructor/method parameter names", ex); } } catch (IllegalArgumentException ex) { if (logger.isDebugEnabled()) { logger.debug("ASM ClassReader failed to parse class file [" + clazz + "], probably due to a new Java class file version that isn't supported yet " + - "- unable to determine constructors/methods parameter names", ex); + "- unable to determine constructor/method parameter names", ex); } } finally { @@ -148,6 +148,7 @@ public class LocalVariableTableParameterNameDiscoverer implements ParameterNameD private static final String STATIC_CLASS_INIT = ""; private final Class clazz; + private final Map memberMap; public ParameterNameDiscoveringVisitor(Class clazz, Map memberMap) { @@ -180,12 +181,17 @@ public class LocalVariableTableParameterNameDiscoverer implements ParameterNameD private static final String CONSTRUCTOR = ""; private final Class clazz; + private final Map memberMap; + private final String name; + private final Type[] args; + + private final String[] parameterNames; + private final boolean isStatic; - private String[] parameterNames; private boolean hasLvtInfo = false; /* @@ -194,25 +200,22 @@ public class LocalVariableTableParameterNameDiscoverer implements ParameterNameD */ private final int[] lvtSlotIndex; - public LocalVariableTableVisitor(Class clazz, Map map, String name, String desc, - boolean isStatic) { + public LocalVariableTableVisitor(Class clazz, Map map, String name, String desc, boolean isStatic) { super(SpringAsmInfo.ASM_VERSION); this.clazz = clazz; this.memberMap = map; this.name = name; - // determine args - args = Type.getArgumentTypes(desc); - this.parameterNames = new String[args.length]; + this.args = Type.getArgumentTypes(desc); + this.parameterNames = new String[this.args.length]; this.isStatic = isStatic; - this.lvtSlotIndex = computeLvtSlotIndices(isStatic, args); + this.lvtSlotIndex = computeLvtSlotIndices(isStatic, this.args); } @Override - public void visitLocalVariable(String name, String description, String signature, Label start, Label end, - int index) { + public void visitLocalVariable(String name, String description, String signature, Label start, Label end, int index) { this.hasLvtInfo = true; - for (int i = 0; i < lvtSlotIndex.length; i++) { - if (lvtSlotIndex[i] == index) { + for (int i = 0; i < this.lvtSlotIndex.length; i++) { + if (this.lvtSlotIndex[i] == index) { this.parameterNames[i] = name; } } @@ -225,27 +228,25 @@ public class LocalVariableTableParameterNameDiscoverer implements ParameterNameD // which doesn't use any local variables. // This means that hasLvtInfo could be false for that kind of methods // even if the class has local variable info. - memberMap.put(resolveMember(), parameterNames); + this.memberMap.put(resolveMember(), this.parameterNames); } } private Member resolveMember() { - ClassLoader loader = clazz.getClassLoader(); - Class[] classes = new Class[args.length]; - - // resolve args - for (int i = 0; i < args.length; i++) { - classes[i] = ClassUtils.resolveClassName(args[i].getClassName(), loader); + ClassLoader loader = this.clazz.getClassLoader(); + Class[] argTypes = new Class[this.args.length]; + for (int i = 0; i < this.args.length; i++) { + argTypes[i] = ClassUtils.resolveClassName(this.args[i].getClassName(), loader); } try { - if (CONSTRUCTOR.equals(name)) { - return clazz.getDeclaredConstructor(classes); + if (CONSTRUCTOR.equals(this.name)) { + return this.clazz.getDeclaredConstructor(argTypes); } - - return clazz.getDeclaredMethod(name, classes); - } catch (NoSuchMethodException ex) { - throw new IllegalStateException("Method [" + name - + "] was discovered in the .class file but cannot be resolved in the class object", ex); + return this.clazz.getDeclaredMethod(this.name, argTypes); + } + catch (NoSuchMethodException ex) { + throw new IllegalStateException("Method [" + this.name + + "] was discovered in the .class file but cannot be resolved in the class object", ex); } } @@ -256,7 +257,8 @@ public class LocalVariableTableParameterNameDiscoverer implements ParameterNameD lvtIndex[i] = nextIndex; if (isWideType(paramTypes[i])) { nextIndex += 2; - } else { + } + else { nextIndex++; } } diff --git a/spring-oxm/src/main/java/org/springframework/oxm/xmlbeans/XmlBeansMarshaller.java b/spring-oxm/src/main/java/org/springframework/oxm/xmlbeans/XmlBeansMarshaller.java index 37b0cb3dec..f29306a742 100644 --- a/spring-oxm/src/main/java/org/springframework/oxm/xmlbeans/XmlBeansMarshaller.java +++ b/spring-oxm/src/main/java/org/springframework/oxm/xmlbeans/XmlBeansMarshaller.java @@ -125,7 +125,7 @@ public class XmlBeansMarshaller extends AbstractMarshaller { @Override protected void marshalDomNode(Object graph, Node node) throws XmlMappingException { - Document document = node.getNodeType() == Node.DOCUMENT_NODE ? (Document) node : node.getOwnerDocument(); + Document document = (node.getNodeType() == Node.DOCUMENT_NODE ? (Document) node : node.getOwnerDocument()); Node xmlBeansNode = ((XmlObject) graph).newDomNode(getXmlOptions()); NodeList xmlBeansChildNodes = xmlBeansNode.getChildNodes(); for (int i = 0; i < xmlBeansChildNodes.getLength(); i++) { @@ -277,19 +277,27 @@ public class XmlBeansMarshaller extends AbstractMarshaller { */ protected void validate(XmlObject object) throws ValidationFailureException { if (isValidating() && object != null) { - // create a temporary xmlOptions just for validation - XmlOptions validateOptions = getXmlOptions() != null ? getXmlOptions() : new XmlOptions(); + XmlOptions validateOptions = getXmlOptions(); + if (validateOptions == null) { + // Create temporary XmlOptions just for validation + validateOptions = new XmlOptions(); + } List errorsList = new ArrayList(); validateOptions.setErrorListener(errorsList); if (!object.validate(validateOptions)) { - StringBuilder builder = new StringBuilder("Could not validate XmlObject :"); + StringBuilder sb = new StringBuilder("Failed to validate XmlObject: "); + boolean first = true; for (XmlError error : errorsList) { if (error instanceof XmlValidationError) { - builder.append(error.toString()); + if (!first) { + sb.append("; "); + } + sb.append(error.toString()); + first = false; } } throw new ValidationFailureException("XMLBeans validation failure", - new XmlException(builder.toString(), null, errorsList)); + new XmlException(sb.toString(), null, errorsList)); } } } @@ -306,7 +314,7 @@ public class XmlBeansMarshaller extends AbstractMarshaller { */ protected XmlMappingException convertXmlBeansException(Exception ex, boolean marshalling) { if (ex instanceof XMLStreamValidationException) { - return new ValidationFailureException("XmlBeans validation exception", ex); + return new ValidationFailureException("XMLBeans validation exception", ex); } else if (ex instanceof XmlException || ex instanceof SAXException) { if (marshalling) { diff --git a/spring-web/src/main/java/org/springframework/web/filter/OncePerRequestFilter.java b/spring-web/src/main/java/org/springframework/web/filter/OncePerRequestFilter.java index e159a328db..db7fc15216 100644 --- a/spring-web/src/main/java/org/springframework/web/filter/OncePerRequestFilter.java +++ b/spring-web/src/main/java/org/springframework/web/filter/OncePerRequestFilter.java @@ -45,14 +45,14 @@ import org.springframework.web.util.WebUtils; * and so on. This mechanism complements and does not replace the need to * configure a filter in {@code web.xml} with dispatcher types. * - *

Sub-classes may use {@link #isAsyncDispatch(HttpServletRequest)} to - * determine when a filter is invoked as part of an async dispatch, and - * use {@link #isAsyncStarted(HttpServletRequest)} to determine when the - * request has been placed in async mode and therefore the current dispatch - * won't be the last one. + *

Subclasses may use {@link #isAsyncDispatch(HttpServletRequest)} to + * determine when a filter is invoked as part of an async dispatch, and use + * {@link #isAsyncStarted(HttpServletRequest)} to determine when the request + * has been placed in async mode and therefore the current dispatch won't be + * the last one for the given request. * *

Yet another dispatch type that also occurs in its own thread is - * {@link javax.servlet.DispatcherType#ERROR ERROR}. Sub-classes can override + * {@link javax.servlet.DispatcherType#ERROR ERROR}. Subclasses can override * {@link #shouldNotFilterErrorDispatch()} if they wish to declare statically * if they should be invoked once during error dispatches. *