polishing
This commit is contained in:
parent
09e6a85edd
commit
aec2bc097e
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2008 the original author or authors.
|
* Copyright 2002-2009 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|
@ -75,7 +75,7 @@ public abstract class Conventions {
|
||||||
*/
|
*/
|
||||||
public static String getVariableName(Object value) {
|
public static String getVariableName(Object value) {
|
||||||
Assert.notNull(value, "Value must not be null");
|
Assert.notNull(value, "Value must not be null");
|
||||||
Class valueClass = null;
|
Class valueClass;
|
||||||
boolean pluralize = false;
|
boolean pluralize = false;
|
||||||
|
|
||||||
if (value.getClass().isArray()) {
|
if (value.getClass().isArray()) {
|
||||||
|
|
@ -107,7 +107,7 @@ public abstract class Conventions {
|
||||||
*/
|
*/
|
||||||
public static String getVariableNameForParameter(MethodParameter parameter) {
|
public static String getVariableNameForParameter(MethodParameter parameter) {
|
||||||
Assert.notNull(parameter, "MethodParameter must not be null");
|
Assert.notNull(parameter, "MethodParameter must not be null");
|
||||||
Class valueClass = null;
|
Class valueClass;
|
||||||
boolean pluralize = false;
|
boolean pluralize = false;
|
||||||
|
|
||||||
if (parameter.getParameterType().isArray()) {
|
if (parameter.getParameterType().isArray()) {
|
||||||
|
|
@ -173,7 +173,7 @@ public abstract class Conventions {
|
||||||
return getVariableName(value);
|
return getVariableName(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
Class valueClass = null;
|
Class valueClass;
|
||||||
boolean pluralize = false;
|
boolean pluralize = false;
|
||||||
|
|
||||||
if (resolvedType.isArray()) {
|
if (resolvedType.isArray()) {
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.springframework.core.convert.support;
|
package org.springframework.core.convert.support;
|
||||||
|
|
||||||
import org.springframework.core.convert.TypeDescriptor;
|
import org.springframework.core.convert.TypeDescriptor;
|
||||||
|
|
@ -20,20 +21,23 @@ import org.springframework.core.convert.converter.Converter;
|
||||||
import org.springframework.core.convert.converter.ConverterFactory;
|
import org.springframework.core.convert.converter.ConverterFactory;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Uniform Converter interface used by GenericConversionService.
|
* Uniform converter interface as returned from {@link GenericConversionService#getConverter}.
|
||||||
* This interface is primarily an internal detail of the GenericConversionService implementation.
|
*
|
||||||
* It should generally not be implemented by application code directly.
|
* <p>This interface is primarily an internal detail of the {@link GenericConversionService}
|
||||||
|
* implementation. It should generally not be implemented by application code directly.
|
||||||
* See {@link Converter} and {@link ConverterFactory} interfaces for simpler public converter SPIs.
|
* See {@link Converter} and {@link ConverterFactory} interfaces for simpler public converter SPIs.
|
||||||
|
*
|
||||||
* @author Keith Donald
|
* @author Keith Donald
|
||||||
* @since 3.0
|
* @since 3.0
|
||||||
* @see Converter
|
* @see Converter
|
||||||
* @see ConverterFactory
|
* @see ConverterFactory
|
||||||
|
* @see GenericConversionService
|
||||||
*/
|
*/
|
||||||
public interface GenericConverter {
|
public interface GenericConverter {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert the source to the targetType described by the TypeDescriptor.
|
* Convert the source to the targetType described by the TypeDescriptor.
|
||||||
* @param source the source object to convert (never null)
|
* @param source the source object to convert (never <code>null</code>)
|
||||||
* @param sourceType context about the source type to convert from
|
* @param sourceType context about the source type to convert from
|
||||||
* @param targetType context about the target type to convert to
|
* @param targetType context about the target type to convert to
|
||||||
* @return the converted object
|
* @return the converted object
|
||||||
|
|
|
||||||
|
|
@ -124,7 +124,7 @@ public abstract class AbstractCachingLabeledEnumResolver implements LabeledEnumR
|
||||||
@Override
|
@Override
|
||||||
protected boolean useWeakValue(Class key, Map<Comparable, LabeledEnum> value) {
|
protected boolean useWeakValue(Class key, Map<Comparable, LabeledEnum> value) {
|
||||||
if (!ClassUtils.isCacheSafe(key, AbstractCachingLabeledEnumResolver.this.getClass().getClassLoader())) {
|
if (!ClassUtils.isCacheSafe(key, AbstractCachingLabeledEnumResolver.this.getClass().getClassLoader())) {
|
||||||
if (logger.isDebugEnabled()) {
|
if (logger != null && logger.isDebugEnabled()) {
|
||||||
logger.debug("Not strongly caching class [" + key.getName() + "] because it is not cache-safe");
|
logger.debug("Not strongly caching class [" + key.getName() + "] because it is not cache-safe");
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|
|
||||||
|
|
@ -29,9 +29,9 @@ import java.util.List;
|
||||||
/**
|
/**
|
||||||
* Simple utility class for working with the reflection API and handling
|
* Simple utility class for working with the reflection API and handling
|
||||||
* reflection exceptions.
|
* reflection exceptions.
|
||||||
* <p>
|
*
|
||||||
* Only intended for internal use.
|
* <p>Only intended for internal use.
|
||||||
*
|
*
|
||||||
* @author Juergen Hoeller
|
* @author Juergen Hoeller
|
||||||
* @author Rob Harrop
|
* @author Rob Harrop
|
||||||
* @author Rod Johnson
|
* @author Rod Johnson
|
||||||
|
|
@ -45,7 +45,6 @@ public abstract class ReflectionUtils {
|
||||||
* Attempt to find a {@link Field field} on the supplied {@link Class} with
|
* Attempt to find a {@link Field field} on the supplied {@link Class} with
|
||||||
* the supplied <code>name</code>. Searches all superclasses up to
|
* the supplied <code>name</code>. Searches all superclasses up to
|
||||||
* {@link Object}.
|
* {@link Object}.
|
||||||
*
|
|
||||||
* @param clazz the class to introspect
|
* @param clazz the class to introspect
|
||||||
* @param name the name of the field
|
* @param name the name of the field
|
||||||
* @return the corresponding Field object, or <code>null</code> if not found
|
* @return the corresponding Field object, or <code>null</code> if not found
|
||||||
|
|
@ -58,7 +57,6 @@ public abstract class ReflectionUtils {
|
||||||
* Attempt to find a {@link Field field} on the supplied {@link Class} with
|
* Attempt to find a {@link Field field} on the supplied {@link Class} with
|
||||||
* the supplied <code>name</code> and/or {@link Class type}. Searches all
|
* the supplied <code>name</code> and/or {@link Class type}. Searches all
|
||||||
* superclasses up to {@link Object}.
|
* superclasses up to {@link Object}.
|
||||||
*
|
|
||||||
* @param clazz the class to introspect
|
* @param clazz the class to introspect
|
||||||
* @param name the name of the field (may be <code>null</code> if type is
|
* @param name the name of the field (may be <code>null</code> if type is
|
||||||
* specified)
|
* specified)
|
||||||
|
|
@ -88,10 +86,8 @@ public abstract class ReflectionUtils {
|
||||||
* <code>value</code>. In accordance with {@link Field#set(Object, Object)}
|
* <code>value</code>. In accordance with {@link Field#set(Object, Object)}
|
||||||
* semantics, the new value is automatically unwrapped if the underlying
|
* semantics, the new value is automatically unwrapped if the underlying
|
||||||
* field has a primitive type.
|
* field has a primitive type.
|
||||||
* <p>
|
* <p>Thrown exceptions are handled via a call to
|
||||||
* Thrown exceptions are handled via a call to
|
|
||||||
* {@link #handleReflectionException(Exception)}.
|
* {@link #handleReflectionException(Exception)}.
|
||||||
*
|
|
||||||
* @param field the field to set
|
* @param field the field to set
|
||||||
* @param target the target object on which to set the field
|
* @param target the target object on which to set the field
|
||||||
* @param value the value to set; may be <code>null</code>
|
* @param value the value to set; may be <code>null</code>
|
||||||
|
|
@ -112,10 +108,8 @@ public abstract class ReflectionUtils {
|
||||||
* the specified {@link Object target object}. In accordance with
|
* the specified {@link Object target object}. In accordance with
|
||||||
* {@link Field#get(Object)} semantics, the returned value is automatically
|
* {@link Field#get(Object)} semantics, the returned value is automatically
|
||||||
* wrapped if the underlying field has a primitive type.
|
* wrapped if the underlying field has a primitive type.
|
||||||
* <p>
|
* <p>Thrown exceptions are handled via a call to
|
||||||
* Thrown exceptions are handled via a call to
|
|
||||||
* {@link #handleReflectionException(Exception)}.
|
* {@link #handleReflectionException(Exception)}.
|
||||||
*
|
|
||||||
* @param field the field to get
|
* @param field the field to get
|
||||||
* @param target the target object from which to get the field
|
* @param target the target object from which to get the field
|
||||||
* @return the field's current value
|
* @return the field's current value
|
||||||
|
|
@ -135,9 +129,7 @@ public abstract class ReflectionUtils {
|
||||||
* Attempt to find a {@link Method} on the supplied class with the supplied
|
* Attempt to find a {@link Method} on the supplied class with the supplied
|
||||||
* name and no parameters. Searches all superclasses up to
|
* name and no parameters. Searches all superclasses up to
|
||||||
* <code>Object</code>.
|
* <code>Object</code>.
|
||||||
* <p>
|
* <p>Returns <code>null</code> if no {@link Method} can be found.
|
||||||
* Returns <code>null</code> if no {@link Method} can be found.
|
|
||||||
*
|
|
||||||
* @param clazz the class to introspect
|
* @param clazz the class to introspect
|
||||||
* @param name the name of the method
|
* @param name the name of the method
|
||||||
* @return the Method object, or <code>null</code> if none found
|
* @return the Method object, or <code>null</code> if none found
|
||||||
|
|
@ -150,9 +142,7 @@ public abstract class ReflectionUtils {
|
||||||
* Attempt to find a {@link Method} on the supplied class with the supplied
|
* Attempt to find a {@link Method} on the supplied class with the supplied
|
||||||
* name and parameter types. Searches all superclasses up to
|
* name and parameter types. Searches all superclasses up to
|
||||||
* <code>Object</code>.
|
* <code>Object</code>.
|
||||||
* <p>
|
* <p>Returns <code>null</code> if no {@link Method} can be found.
|
||||||
* Returns <code>null</code> if no {@link Method} can be found.
|
|
||||||
*
|
|
||||||
* @param clazz the class to introspect
|
* @param clazz the class to introspect
|
||||||
* @param name the name of the method
|
* @param name the name of the method
|
||||||
* @param paramTypes the parameter types of the method (may be
|
* @param paramTypes the parameter types of the method (may be
|
||||||
|
|
@ -180,10 +170,8 @@ public abstract class ReflectionUtils {
|
||||||
* Invoke the specified {@link Method} against the supplied target object
|
* Invoke the specified {@link Method} against the supplied target object
|
||||||
* with no arguments. The target object can be <code>null</code> when
|
* with no arguments. The target object can be <code>null</code> when
|
||||||
* invoking a static {@link Method}.
|
* invoking a static {@link Method}.
|
||||||
* <p>
|
* <p>Thrown exceptions are handled via a call to
|
||||||
* Thrown exceptions are handled via a call to
|
|
||||||
* {@link #handleReflectionException}.
|
* {@link #handleReflectionException}.
|
||||||
*
|
|
||||||
* @param method the method to invoke
|
* @param method the method to invoke
|
||||||
* @param target the target object to invoke the method on
|
* @param target the target object to invoke the method on
|
||||||
* @return the invocation result, if any
|
* @return the invocation result, if any
|
||||||
|
|
@ -197,10 +185,8 @@ public abstract class ReflectionUtils {
|
||||||
* Invoke the specified {@link Method} against the supplied target object
|
* Invoke the specified {@link Method} against the supplied target object
|
||||||
* with the supplied arguments. The target object can be <code>null</code>
|
* with the supplied arguments. The target object can be <code>null</code>
|
||||||
* when invoking a static {@link Method}.
|
* when invoking a static {@link Method}.
|
||||||
* <p>
|
* <p>Thrown exceptions are handled via a call to
|
||||||
* Thrown exceptions are handled via a call to
|
|
||||||
* {@link #handleReflectionException}.
|
* {@link #handleReflectionException}.
|
||||||
*
|
|
||||||
* @param method the method to invoke
|
* @param method the method to invoke
|
||||||
* @param target the target object to invoke the method on
|
* @param target the target object to invoke the method on
|
||||||
* @param args the invocation arguments (may be <code>null</code>)
|
* @param args the invocation arguments (may be <code>null</code>)
|
||||||
|
|
@ -219,7 +205,6 @@ public abstract class ReflectionUtils {
|
||||||
/**
|
/**
|
||||||
* Invoke the specified JDBC API {@link Method} against the supplied target
|
* Invoke the specified JDBC API {@link Method} against the supplied target
|
||||||
* object with no arguments.
|
* object with no arguments.
|
||||||
*
|
|
||||||
* @param method the method to invoke
|
* @param method the method to invoke
|
||||||
* @param target the target object to invoke the method on
|
* @param target the target object to invoke the method on
|
||||||
* @return the invocation result, if any
|
* @return the invocation result, if any
|
||||||
|
|
@ -233,7 +218,6 @@ public abstract class ReflectionUtils {
|
||||||
/**
|
/**
|
||||||
* Invoke the specified JDBC API {@link Method} against the supplied target
|
* Invoke the specified JDBC API {@link Method} against the supplied target
|
||||||
* object with the supplied arguments.
|
* object with the supplied arguments.
|
||||||
*
|
|
||||||
* @param method the method to invoke
|
* @param method the method to invoke
|
||||||
* @param target the target object to invoke the method on
|
* @param target the target object to invoke the method on
|
||||||
* @param args the invocation arguments (may be <code>null</code>)
|
* @param args the invocation arguments (may be <code>null</code>)
|
||||||
|
|
@ -260,11 +244,9 @@ public abstract class ReflectionUtils {
|
||||||
/**
|
/**
|
||||||
* Handle the given reflection exception. Should only be called if no
|
* Handle the given reflection exception. Should only be called if no
|
||||||
* checked exception is expected to be thrown by the target method.
|
* checked exception is expected to be thrown by the target method.
|
||||||
* <p>
|
* <p>Throws the underlying RuntimeException or Error in case of an
|
||||||
* Throws the underlying RuntimeException or Error in case of an
|
|
||||||
* InvocationTargetException with such a root cause. Throws an
|
* InvocationTargetException with such a root cause. Throws an
|
||||||
* IllegalStateException with an appropriate message else.
|
* IllegalStateException with an appropriate message else.
|
||||||
*
|
|
||||||
* @param ex the reflection exception to handle
|
* @param ex the reflection exception to handle
|
||||||
*/
|
*/
|
||||||
public static void handleReflectionException(Exception ex) {
|
public static void handleReflectionException(Exception ex) {
|
||||||
|
|
@ -286,10 +268,8 @@ public abstract class ReflectionUtils {
|
||||||
/**
|
/**
|
||||||
* Handle the given invocation target exception. Should only be called if no
|
* Handle the given invocation target exception. Should only be called if no
|
||||||
* checked exception is expected to be thrown by the target method.
|
* checked exception is expected to be thrown by the target method.
|
||||||
* <p>
|
* <p>Throws the underlying RuntimeException or Error in case of such a root
|
||||||
* Throws the underlying RuntimeException or Error in case of such a root
|
|
||||||
* cause. Throws an IllegalStateException else.
|
* cause. Throws an IllegalStateException else.
|
||||||
*
|
|
||||||
* @param ex the invocation target exception to handle
|
* @param ex the invocation target exception to handle
|
||||||
*/
|
*/
|
||||||
public static void handleInvocationTargetException(InvocationTargetException ex) {
|
public static void handleInvocationTargetException(InvocationTargetException ex) {
|
||||||
|
|
@ -301,11 +281,9 @@ public abstract class ReflectionUtils {
|
||||||
* <em>target exception</em> of an {@link InvocationTargetException}. Should
|
* <em>target exception</em> of an {@link InvocationTargetException}. Should
|
||||||
* only be called if no checked exception is expected to be thrown by the
|
* only be called if no checked exception is expected to be thrown by the
|
||||||
* target method.
|
* target method.
|
||||||
* <p>
|
* <p>Rethrows the underlying exception cast to an {@link RuntimeException} or
|
||||||
* Rethrows the underlying exception cast to an {@link RuntimeException} or
|
|
||||||
* {@link Error} if appropriate; otherwise, throws an
|
* {@link Error} if appropriate; otherwise, throws an
|
||||||
* {@link IllegalStateException}.
|
* {@link IllegalStateException}.
|
||||||
*
|
|
||||||
* @param ex the exception to rethrow
|
* @param ex the exception to rethrow
|
||||||
* @throws RuntimeException the rethrown exception
|
* @throws RuntimeException the rethrown exception
|
||||||
*/
|
*/
|
||||||
|
|
@ -324,11 +302,9 @@ public abstract class ReflectionUtils {
|
||||||
* <em>target exception</em> of an {@link InvocationTargetException}. Should
|
* <em>target exception</em> of an {@link InvocationTargetException}. Should
|
||||||
* only be called if no checked exception is expected to be thrown by the
|
* only be called if no checked exception is expected to be thrown by the
|
||||||
* target method.
|
* target method.
|
||||||
* <p>
|
* <p>Rethrows the underlying exception cast to an {@link Exception} or
|
||||||
* Rethrows the underlying exception cast to an {@link Exception} or
|
|
||||||
* {@link Error} if appropriate; otherwise, throws an
|
* {@link Error} if appropriate; otherwise, throws an
|
||||||
* {@link IllegalStateException}.
|
* {@link IllegalStateException}.
|
||||||
*
|
|
||||||
* @param ex the exception to rethrow
|
* @param ex the exception to rethrow
|
||||||
* @throws Exception the rethrown exception (in case of a checked exception)
|
* @throws Exception the rethrown exception (in case of a checked exception)
|
||||||
*/
|
*/
|
||||||
|
|
@ -344,7 +320,6 @@ public abstract class ReflectionUtils {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Throws an IllegalStateException with the given exception as root cause.
|
* Throws an IllegalStateException with the given exception as root cause.
|
||||||
*
|
|
||||||
* @param ex the unexpected exception
|
* @param ex the unexpected exception
|
||||||
*/
|
*/
|
||||||
private static void handleUnexpectedException(Throwable ex) {
|
private static void handleUnexpectedException(Throwable ex) {
|
||||||
|
|
@ -355,7 +330,6 @@ public abstract class ReflectionUtils {
|
||||||
* Determine whether the given method explicitly declares the given
|
* Determine whether the given method explicitly declares the given
|
||||||
* exception or one of its superclasses, which means that an exception of
|
* exception or one of its superclasses, which means that an exception of
|
||||||
* that type can be propagated as-is within a reflective invocation.
|
* that type can be propagated as-is within a reflective invocation.
|
||||||
*
|
|
||||||
* @param method the declaring method
|
* @param method the declaring method
|
||||||
* @param exceptionType the exception to throw
|
* @param exceptionType the exception to throw
|
||||||
* @return <code>true</code> if the exception can be thrown as-is;
|
* @return <code>true</code> if the exception can be thrown as-is;
|
||||||
|
|
@ -374,7 +348,6 @@ public abstract class ReflectionUtils {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Determine whether the given field is a "public static final" constant.
|
* Determine whether the given field is a "public static final" constant.
|
||||||
*
|
|
||||||
* @param field the field to check
|
* @param field the field to check
|
||||||
*/
|
*/
|
||||||
public static boolean isPublicStaticFinal(Field field) {
|
public static boolean isPublicStaticFinal(Field field) {
|
||||||
|
|
@ -384,8 +357,7 @@ public abstract class ReflectionUtils {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Determine whether the given method is an "equals" method.
|
* Determine whether the given method is an "equals" method.
|
||||||
*
|
* @see java.lang.Object#equals(Object)
|
||||||
* @see java.lang.Object#equals
|
|
||||||
*/
|
*/
|
||||||
public static boolean isEqualsMethod(Method method) {
|
public static boolean isEqualsMethod(Method method) {
|
||||||
if (method == null || !method.getName().equals("equals")) {
|
if (method == null || !method.getName().equals("equals")) {
|
||||||
|
|
@ -397,8 +369,7 @@ public abstract class ReflectionUtils {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Determine whether the given method is a "hashCode" method.
|
* Determine whether the given method is a "hashCode" method.
|
||||||
*
|
* @see java.lang.Object#hashCode()
|
||||||
* @see java.lang.Object#hashCode
|
|
||||||
*/
|
*/
|
||||||
public static boolean isHashCodeMethod(Method method) {
|
public static boolean isHashCodeMethod(Method method) {
|
||||||
return (method != null && method.getName().equals("hashCode") && method.getParameterTypes().length == 0);
|
return (method != null && method.getName().equals("hashCode") && method.getParameterTypes().length == 0);
|
||||||
|
|
@ -406,7 +377,6 @@ public abstract class ReflectionUtils {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Determine whether the given method is a "toString" method.
|
* Determine whether the given method is a "toString" method.
|
||||||
*
|
|
||||||
* @see java.lang.Object#toString()
|
* @see java.lang.Object#toString()
|
||||||
*/
|
*/
|
||||||
public static boolean isToStringMethod(Method method) {
|
public static boolean isToStringMethod(Method method) {
|
||||||
|
|
@ -418,7 +388,6 @@ public abstract class ReflectionUtils {
|
||||||
* necessary. The <code>setAccessible(true)</code> method is only called
|
* necessary. The <code>setAccessible(true)</code> method is only called
|
||||||
* when actually necessary, to avoid unnecessary conflicts with a JVM
|
* when actually necessary, to avoid unnecessary conflicts with a JVM
|
||||||
* SecurityManager (if active).
|
* SecurityManager (if active).
|
||||||
*
|
|
||||||
* @param field the field to make accessible
|
* @param field the field to make accessible
|
||||||
* @see java.lang.reflect.Field#setAccessible
|
* @see java.lang.reflect.Field#setAccessible
|
||||||
*/
|
*/
|
||||||
|
|
@ -434,7 +403,6 @@ public abstract class ReflectionUtils {
|
||||||
* necessary. The <code>setAccessible(true)</code> method is only called
|
* necessary. The <code>setAccessible(true)</code> method is only called
|
||||||
* when actually necessary, to avoid unnecessary conflicts with a JVM
|
* when actually necessary, to avoid unnecessary conflicts with a JVM
|
||||||
* SecurityManager (if active).
|
* SecurityManager (if active).
|
||||||
*
|
|
||||||
* @param method the method to make accessible
|
* @param method the method to make accessible
|
||||||
* @see java.lang.reflect.Method#setAccessible
|
* @see java.lang.reflect.Method#setAccessible
|
||||||
*/
|
*/
|
||||||
|
|
@ -450,7 +418,6 @@ public abstract class ReflectionUtils {
|
||||||
* if necessary. The <code>setAccessible(true)</code> method is only called
|
* if necessary. The <code>setAccessible(true)</code> method is only called
|
||||||
* when actually necessary, to avoid unnecessary conflicts with a JVM
|
* when actually necessary, to avoid unnecessary conflicts with a JVM
|
||||||
* SecurityManager (if active).
|
* SecurityManager (if active).
|
||||||
*
|
|
||||||
* @param ctor the constructor to make accessible
|
* @param ctor the constructor to make accessible
|
||||||
* @see java.lang.reflect.Constructor#setAccessible
|
* @see java.lang.reflect.Constructor#setAccessible
|
||||||
*/
|
*/
|
||||||
|
|
@ -464,10 +431,8 @@ public abstract class ReflectionUtils {
|
||||||
/**
|
/**
|
||||||
* Perform the given callback operation on all matching methods of the given
|
* Perform the given callback operation on all matching methods of the given
|
||||||
* class and superclasses.
|
* class and superclasses.
|
||||||
* <p>
|
* <p>The same named method occurring on subclass and superclass will appear
|
||||||
* The same named method occurring on subclass and superclass will appear
|
|
||||||
* twice, unless excluded by a {@link MethodFilter}.
|
* twice, unless excluded by a {@link MethodFilter}.
|
||||||
*
|
|
||||||
* @param targetClass class to start looking at
|
* @param targetClass class to start looking at
|
||||||
* @param mc the callback to invoke for each method
|
* @param mc the callback to invoke for each method
|
||||||
* @see #doWithMethods(Class, MethodCallback, MethodFilter)
|
* @see #doWithMethods(Class, MethodCallback, MethodFilter)
|
||||||
|
|
@ -479,10 +444,8 @@ public abstract class ReflectionUtils {
|
||||||
/**
|
/**
|
||||||
* Perform the given callback operation on all matching methods of the given
|
* Perform the given callback operation on all matching methods of the given
|
||||||
* class and superclasses.
|
* class and superclasses.
|
||||||
* <p>
|
* <p>The same named method occurring on subclass and superclass will appear
|
||||||
* The same named method occurring on subclass and superclass will appear
|
|
||||||
* twice, unless excluded by the specified {@link MethodFilter}.
|
* twice, unless excluded by the specified {@link MethodFilter}.
|
||||||
*
|
|
||||||
* @param targetClass class to start looking at
|
* @param targetClass class to start looking at
|
||||||
* @param mc the callback to invoke for each method
|
* @param mc the callback to invoke for each method
|
||||||
* @param mf the filter that determines the methods to apply the callback to
|
* @param mf the filter that determines the methods to apply the callback to
|
||||||
|
|
@ -516,7 +479,6 @@ public abstract class ReflectionUtils {
|
||||||
public static Method[] getAllDeclaredMethods(Class<?> leafClass) throws IllegalArgumentException {
|
public static Method[] getAllDeclaredMethods(Class<?> leafClass) throws IllegalArgumentException {
|
||||||
final List<Method> methods = new ArrayList<Method>(32);
|
final List<Method> methods = new ArrayList<Method>(32);
|
||||||
doWithMethods(leafClass, new MethodCallback() {
|
doWithMethods(leafClass, new MethodCallback() {
|
||||||
|
|
||||||
public void doWith(Method method) {
|
public void doWith(Method method) {
|
||||||
methods.add(method);
|
methods.add(method);
|
||||||
}
|
}
|
||||||
|
|
@ -527,7 +489,6 @@ public abstract class ReflectionUtils {
|
||||||
/**
|
/**
|
||||||
* Invoke the given callback on all fields in the target class, going up the
|
* Invoke the given callback on all fields in the target class, going up the
|
||||||
* class hierarchy to get all declared fields.
|
* class hierarchy to get all declared fields.
|
||||||
*
|
|
||||||
* @param targetClass the target class to analyze
|
* @param targetClass the target class to analyze
|
||||||
* @param fc the callback to invoke for each field
|
* @param fc the callback to invoke for each field
|
||||||
*/
|
*/
|
||||||
|
|
@ -538,7 +499,6 @@ public abstract class ReflectionUtils {
|
||||||
/**
|
/**
|
||||||
* Invoke the given callback on all fields in the target class, going up the
|
* Invoke the given callback on all fields in the target class, going up the
|
||||||
* class hierarchy to get all declared fields.
|
* class hierarchy to get all declared fields.
|
||||||
*
|
|
||||||
* @param targetClass the target class to analyze
|
* @param targetClass the target class to analyze
|
||||||
* @param fc the callback to invoke for each field
|
* @param fc the callback to invoke for each field
|
||||||
* @param ff the filter that determines the fields to apply the callback to
|
* @param ff the filter that determines the fields to apply the callback to
|
||||||
|
|
@ -571,7 +531,6 @@ public abstract class ReflectionUtils {
|
||||||
* Given the source object and the destination, which must be the same class
|
* Given the source object and the destination, which must be the same class
|
||||||
* or a subclass, copy all fields, including inherited fields. Designed to
|
* or a subclass, copy all fields, including inherited fields. Designed to
|
||||||
* work on objects with public no-arg constructors.
|
* work on objects with public no-arg constructors.
|
||||||
*
|
|
||||||
* @throws IllegalArgumentException if the arguments are incompatible
|
* @throws IllegalArgumentException if the arguments are incompatible
|
||||||
*/
|
*/
|
||||||
public static void shallowCopyFieldState(final Object src, final Object dest) throws IllegalArgumentException {
|
public static void shallowCopyFieldState(final Object src, final Object dest) throws IllegalArgumentException {
|
||||||
|
|
@ -603,21 +562,19 @@ public abstract class ReflectionUtils {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Perform an operation using the given method.
|
* Perform an operation using the given method.
|
||||||
*
|
|
||||||
* @param method the method to operate on
|
* @param method the method to operate on
|
||||||
*/
|
*/
|
||||||
void doWith(Method method) throws IllegalArgumentException, IllegalAccessException;
|
void doWith(Method method) throws IllegalArgumentException, IllegalAccessException;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Callback optionally used to method fields to be operated on by a method
|
* Callback optionally used to method fields to be operated on by a method callback.
|
||||||
* callback.
|
|
||||||
*/
|
*/
|
||||||
public static interface MethodFilter {
|
public static interface MethodFilter {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Determine whether the given method matches.
|
* Determine whether the given method matches.
|
||||||
*
|
|
||||||
* @param method the method to check
|
* @param method the method to check
|
||||||
*/
|
*/
|
||||||
boolean matches(Method method);
|
boolean matches(Method method);
|
||||||
|
|
@ -630,21 +587,19 @@ public abstract class ReflectionUtils {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Perform an operation using the given field.
|
* Perform an operation using the given field.
|
||||||
*
|
|
||||||
* @param field the field to operate on
|
* @param field the field to operate on
|
||||||
*/
|
*/
|
||||||
void doWith(Field field) throws IllegalArgumentException, IllegalAccessException;
|
void doWith(Field field) throws IllegalArgumentException, IllegalAccessException;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Callback optionally used to filter fields to be operated on by a field
|
* Callback optionally used to filter fields to be operated on by a field callback.
|
||||||
* callback.
|
|
||||||
*/
|
*/
|
||||||
public static interface FieldFilter {
|
public static interface FieldFilter {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Determine whether the given field matches.
|
* Determine whether the given field matches.
|
||||||
*
|
|
||||||
* @param field the field to check
|
* @param field the field to check
|
||||||
*/
|
*/
|
||||||
boolean matches(Field field);
|
boolean matches(Field field);
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2008 the original author or authors.
|
* Copyright 2002-2009 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
|
@ -75,8 +75,7 @@ public abstract class AbstractDetectingUrlHandlerMapping extends AbstractUrlHand
|
||||||
getApplicationContext().getBeanNamesForType(Object.class));
|
getApplicationContext().getBeanNamesForType(Object.class));
|
||||||
|
|
||||||
// Take any bean name that we can determine URLs for.
|
// Take any bean name that we can determine URLs for.
|
||||||
for (int i = 0; i < beanNames.length; i++) {
|
for (String beanName : beanNames) {
|
||||||
String beanName = beanNames[i];
|
|
||||||
String[] urls = determineUrlsForHandler(beanName);
|
String[] urls = determineUrlsForHandler(beanName);
|
||||||
if (!ObjectUtils.isEmpty(urls)) {
|
if (!ObjectUtils.isEmpty(urls)) {
|
||||||
// URL paths found: Let's consider it a handler.
|
// URL paths found: Let's consider it a handler.
|
||||||
|
|
@ -84,7 +83,7 @@ public abstract class AbstractDetectingUrlHandlerMapping extends AbstractUrlHand
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (logger.isDebugEnabled()) {
|
if (logger.isDebugEnabled()) {
|
||||||
logger.debug("Rejected bean name '" + beanNames[i] + "': no URL paths identified");
|
logger.debug("Rejected bean name '" + beanName + "': no URL paths identified");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -454,7 +454,8 @@ public class AnnotationMethodHandlerAdapter extends WebContentGenerator implemen
|
||||||
if (match && mappingInfo.methods.length == 0 && mappingInfo.params.length == 0 &&
|
if (match && mappingInfo.methods.length == 0 && mappingInfo.params.length == 0 &&
|
||||||
resolvedMethodName != null && !resolvedMethodName.equals(handlerMethod.getName())) {
|
resolvedMethodName != null && !resolvedMethodName.equals(handlerMethod.getName())) {
|
||||||
match = false;
|
match = false;
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
for (RequestMethod requestMethod : mappingInfo.methods) {
|
for (RequestMethod requestMethod : mappingInfo.methods) {
|
||||||
allowedMethods.add(requestMethod.toString());
|
allowedMethods.add(requestMethod.toString());
|
||||||
}
|
}
|
||||||
|
|
@ -786,7 +787,7 @@ public class AnnotationMethodHandlerAdapter extends WebContentGenerator implemen
|
||||||
for (MediaType acceptedMediaType : acceptedMediaTypes) {
|
for (MediaType acceptedMediaType : acceptedMediaTypes) {
|
||||||
if (supportedMediaType.includes(acceptedMediaType)) {
|
if (supportedMediaType.includes(acceptedMediaType)) {
|
||||||
messageConverter.write(returnValue, outputMessage);
|
messageConverter.write(returnValue, outputMessage);
|
||||||
responseArgumentUsed = true;
|
this.responseArgumentUsed = true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -811,8 +812,8 @@ public class AnnotationMethodHandlerAdapter extends WebContentGenerator implemen
|
||||||
|
|
||||||
String[] headers = new String[0];
|
String[] headers = new String[0];
|
||||||
|
|
||||||
String bestMatchedPath() {
|
public String bestMatchedPath() {
|
||||||
return matchedPaths.isEmpty() ? null : matchedPaths.get(0);
|
return (!this.matchedPaths.isEmpty() ? this.matchedPaths.get(0) : null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean matches(HttpServletRequest request) {
|
public boolean matches(HttpServletRequest request) {
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,6 @@ abstract class ServletAnnotationMappingUtils {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check whether the given request matches the specified request methods.
|
* Check whether the given request matches the specified request methods.
|
||||||
*
|
|
||||||
* @param methods the HTTP request methods to check against
|
* @param methods the HTTP request methods to check against
|
||||||
* @param request the current HTTP request to check
|
* @param request the current HTTP request to check
|
||||||
*/
|
*/
|
||||||
|
|
@ -53,8 +52,7 @@ abstract class ServletAnnotationMappingUtils {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check whether the given request matches the specified parameter conditions.
|
* Check whether the given request matches the specified parameter conditions.
|
||||||
*
|
* @param params the parameter conditions, following {@link RequestMapping#params()}
|
||||||
* @param params the parameter conditions, following {@link org.springframework.web.bind.annotation.RequestMapping#params()}
|
|
||||||
* @param request the current HTTP request to check
|
* @param request the current HTTP request to check
|
||||||
*/
|
*/
|
||||||
public static boolean checkParameters(String[] params, HttpServletRequest request) {
|
public static boolean checkParameters(String[] params, HttpServletRequest request) {
|
||||||
|
|
@ -85,8 +83,7 @@ abstract class ServletAnnotationMappingUtils {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check whether the given request matches the specified header conditions.
|
* Check whether the given request matches the specified header conditions.
|
||||||
*
|
* @param headers the header conditions, following {@link RequestMapping#headers()}
|
||||||
* @param headers the header conditions, following {@link org.springframework.web.bind.annotation.RequestMapping#headers()}
|
|
||||||
* @param request the current HTTP request to check
|
* @param request the current HTTP request to check
|
||||||
*/
|
*/
|
||||||
public static boolean checkHeaders(String[] headers, HttpServletRequest request) {
|
public static boolean checkHeaders(String[] headers, HttpServletRequest request) {
|
||||||
|
|
@ -95,11 +92,11 @@ abstract class ServletAnnotationMappingUtils {
|
||||||
int separator = header.indexOf('=');
|
int separator = header.indexOf('=');
|
||||||
if (separator == -1) {
|
if (separator == -1) {
|
||||||
if (header.startsWith("!")) {
|
if (header.startsWith("!")) {
|
||||||
if (hasHeader(request, header.substring(1))) {
|
if (request.getHeader(header.substring(1)) != null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (!hasHeader(request, header)) {
|
else if (request.getHeader(header) == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -111,9 +108,9 @@ abstract class ServletAnnotationMappingUtils {
|
||||||
List<MediaType> valueMediaTypes = MediaType.parseMediaTypes(value);
|
List<MediaType> valueMediaTypes = MediaType.parseMediaTypes(value);
|
||||||
boolean found = false;
|
boolean found = false;
|
||||||
for (Iterator<MediaType> valIter = valueMediaTypes.iterator(); valIter.hasNext() && !found;) {
|
for (Iterator<MediaType> valIter = valueMediaTypes.iterator(); valIter.hasNext() && !found;) {
|
||||||
MediaType valueMediaType = valIter.next();
|
MediaType valueMediaType = valIter.next();
|
||||||
for (Iterator<MediaType> reqIter = requestMediaTypes.iterator(); reqIter.hasNext() && !found;) {
|
for (Iterator<MediaType> reqIter = requestMediaTypes.iterator(); reqIter.hasNext() && !found;) {
|
||||||
MediaType requestMediaType = reqIter.next();
|
MediaType requestMediaType = reqIter.next();
|
||||||
if (valueMediaType.includes(requestMediaType)) {
|
if (valueMediaType.includes(requestMediaType)) {
|
||||||
found = true;
|
found = true;
|
||||||
}
|
}
|
||||||
|
|
@ -133,10 +130,6 @@ abstract class ServletAnnotationMappingUtils {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean hasHeader(HttpServletRequest request, String headerName) {
|
|
||||||
return request.getHeader(headerName) != null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static boolean isMediaTypeHeader(String headerName) {
|
private static boolean isMediaTypeHeader(String headerName) {
|
||||||
return "Accept".equalsIgnoreCase(headerName) || "Content-Type".equalsIgnoreCase(headerName);
|
return "Accept".equalsIgnoreCase(headerName) || "Content-Type".equalsIgnoreCase(headerName);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue