Class BindMethod
- java.lang.Object
-
- org.apache.felix.scr.impl.inject.methods.BaseMethod<BindParameters,java.util.List<ValueUtils.ValueType>>
-
- org.apache.felix.scr.impl.inject.methods.BindMethod
-
- All Implemented Interfaces:
ReferenceMethod
- Direct Known Subclasses:
UnbindMethod,UpdatedMethod
public class BindMethod extends BaseMethod<BindParameters,java.util.List<ValueUtils.ValueType>> implements ReferenceMethod
Component method to be invoked on service (un)binding.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.apache.felix.scr.impl.inject.methods.BaseMethod
BaseMethod.MethodInfo<T>
-
-
Field Summary
Fields Modifier and Type Field Description private java.util.List<ValueUtils.ValueType>m_paramTypesprivate java.lang.Stringm_referenceClassName-
Fields inherited from interface org.apache.felix.scr.impl.inject.ReferenceMethod
NOPReferenceMethod
-
-
Constructor Summary
Constructors Constructor Description BindMethod(java.lang.String methodName, java.lang.Class<?> componentClass, java.lang.String referenceClassName, DSVersion dsVersion, boolean configurableServiceProperties)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected BaseMethod.MethodInfo<java.util.List<ValueUtils.ValueType>>doFindMethod(java.lang.Class<?> targetClass, boolean acceptPrivate, boolean acceptPackage, ComponentLogger logger)Finds the method named in theBaseMethod.m_methodNamefield in the giventargetClass.private java.lang.reflect.MethodgetComponentObjectsMethod(java.lang.Class<?> targetClass, boolean acceptPrivate, boolean acceptPackage, ComponentLogger logger)private java.lang.reflect.MethodgetMapMethod(java.lang.Class<?> targetClass, java.lang.Class<?> parameterClass, boolean acceptPrivate, boolean acceptPackage, ComponentLogger logger)Returns a method taking a single map parameter ornullif no such method exists.protected java.lang.StringgetMethodNamePrefix()protected java.lang.Object[]getParameters(java.lang.reflect.Method method, BindParameters bp)Returns the parameter array created from therawParameterusing the actual parameter type list of themethod.<S,T>
booleangetServiceObject(BindParameters parameters, org.osgi.framework.BundleContext context)private java.lang.reflect.MethodgetServiceObjectAssignableMethod(java.lang.Class<?> targetClass, java.lang.Class<?> parameterClass, boolean acceptPrivate, boolean acceptPackage, ComponentLogger logger)Returns a method taking a single object whose type is assignment compatible with the declared service type ornullif no such method exists.private java.lang.reflect.MethodgetServiceObjectAssignableWithMapMethod(java.lang.Class<?> targetClass, java.lang.Class<?> parameterClass, boolean acceptPrivate, boolean acceptPackage)Returns a method taking two parameters, the first being an object whose type is assignment compatible with the declared service type and the second being aMapornullif no such method exists.private java.lang.reflect.MethodgetServiceObjectMethod(java.lang.Class<?> targetClass, java.lang.Class<?> parameterClass, boolean acceptPrivate, boolean acceptPackage, ComponentLogger logger)Returns a method taking a single parameter of the exact type declared for the service reference ornullif no such method exists.private java.lang.reflect.MethodgetServiceObjectWithMapMethod(java.lang.Class<?> targetClass, java.lang.Class<?> parameterClass, boolean acceptPrivate, boolean acceptPackage, ComponentLogger logger)Returns a method taking two parameters, the first being of the exact type declared for the service reference and the second being aMapornullif no such method exists.private java.lang.reflect.MethodgetServiceReferenceMethod(java.lang.Class<?> targetClass, boolean acceptPrivate, boolean acceptPackage, ComponentLogger logger)Returns a method taking a singleServiceReferenceobject as a parameter ornullif no such method exists.protected voidsetTypes(java.util.List<ValueUtils.ValueType> types)-
Methods inherited from class org.apache.felix.scr.impl.inject.methods.BaseMethod
accept, getComponentClass, getDSVersion, getMethod, getMethod, getMethodName, getPackageName, getState, invoke, isDS12Felix, methodExists, returnValue, setMethod
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.apache.felix.scr.impl.inject.ReferenceMethod
invoke
-
-
-
-
Field Detail
-
m_referenceClassName
private final java.lang.String m_referenceClassName
-
m_paramTypes
private volatile java.util.List<ValueUtils.ValueType> m_paramTypes
-
-
Constructor Detail
-
BindMethod
public BindMethod(java.lang.String methodName, java.lang.Class<?> componentClass, java.lang.String referenceClassName, DSVersion dsVersion, boolean configurableServiceProperties)
-
-
Method Detail
-
doFindMethod
protected BaseMethod.MethodInfo<java.util.List<ValueUtils.ValueType>> doFindMethod(java.lang.Class<?> targetClass, boolean acceptPrivate, boolean acceptPackage, ComponentLogger logger) throws SuitableMethodNotAccessibleException, java.lang.reflect.InvocationTargetException
Finds the method named in theBaseMethod.m_methodNamefield in the giventargetClass. If the target class has no acceptable method the class hierarchy is traversed until a method is found or the root of the class hierarchy is reached without finding a method.- Specified by:
doFindMethodin classBaseMethod<BindParameters,java.util.List<ValueUtils.ValueType>>- Parameters:
targetClass- The class in which to look for the methodacceptPrivate-trueif private methods should be considered.acceptPackage-trueif package private methods should be considered.logger-- Returns:
- The requested method or
nullif no acceptable method can be found in the target class or any super class. - Throws:
java.lang.reflect.InvocationTargetException- If an unexpected Throwable is caught trying to find the requested method.SuitableMethodNotAccessibleException
-
setTypes
protected void setTypes(java.util.List<ValueUtils.ValueType> types)
- Specified by:
setTypesin classBaseMethod<BindParameters,java.util.List<ValueUtils.ValueType>>
-
getServiceReferenceMethod
private java.lang.reflect.Method getServiceReferenceMethod(java.lang.Class<?> targetClass, boolean acceptPrivate, boolean acceptPackage, ComponentLogger logger) throws SuitableMethodNotAccessibleException, java.lang.reflect.InvocationTargetExceptionReturns a method taking a singleServiceReferenceobject as a parameter ornullif no such method exists.- Parameters:
targetClass- The class in which to look for the method. Only this class is searched for the method.acceptPrivate-trueif private methods should be considered.acceptPackage-trueif package private methods should be considered.logger-- Returns:
- The requested method or
nullif no acceptable method can be found in the target class. - Throws:
SuitableMethodNotAccessibleException- If a suitable method was found which is not accessiblejava.lang.reflect.InvocationTargetException- If an unexpected Throwable is caught trying to find the requested method.
-
getComponentObjectsMethod
private java.lang.reflect.Method getComponentObjectsMethod(java.lang.Class<?> targetClass, boolean acceptPrivate, boolean acceptPackage, ComponentLogger logger) throws SuitableMethodNotAccessibleException, java.lang.reflect.InvocationTargetException- Throws:
SuitableMethodNotAccessibleExceptionjava.lang.reflect.InvocationTargetException
-
getServiceObjectMethod
private java.lang.reflect.Method getServiceObjectMethod(java.lang.Class<?> targetClass, java.lang.Class<?> parameterClass, boolean acceptPrivate, boolean acceptPackage, ComponentLogger logger) throws SuitableMethodNotAccessibleException, java.lang.reflect.InvocationTargetExceptionReturns a method taking a single parameter of the exact type declared for the service reference ornullif no such method exists.- Parameters:
targetClass- The class in which to look for the method. Only this class is searched for the method.acceptPrivate-trueif private methods should be considered.acceptPackage-trueif package private methods should be considered.logger-- Returns:
- The requested method or
nullif no acceptable method can be found in the target class. - Throws:
SuitableMethodNotAccessibleException- If a suitable method was found which is not accessiblejava.lang.reflect.InvocationTargetException- If an unexpected Throwable is caught trying to find the requested method.
-
getServiceObjectAssignableMethod
private java.lang.reflect.Method getServiceObjectAssignableMethod(java.lang.Class<?> targetClass, java.lang.Class<?> parameterClass, boolean acceptPrivate, boolean acceptPackage, ComponentLogger logger) throws SuitableMethodNotAccessibleExceptionReturns a method taking a single object whose type is assignment compatible with the declared service type ornullif no such method exists.- Parameters:
targetClass- The class in which to look for the method. Only this class is searched for the method.acceptPrivate-trueif private methods should be considered.acceptPackage-trueif package private methods should be considered.logger-- Returns:
- The requested method or
nullif no acceptable method can be found in the target class. - Throws:
SuitableMethodNotAccessibleException- If a suitable method was found which is not accessible
-
getServiceObjectWithMapMethod
private java.lang.reflect.Method getServiceObjectWithMapMethod(java.lang.Class<?> targetClass, java.lang.Class<?> parameterClass, boolean acceptPrivate, boolean acceptPackage, ComponentLogger logger) throws SuitableMethodNotAccessibleException, java.lang.reflect.InvocationTargetExceptionReturns a method taking two parameters, the first being of the exact type declared for the service reference and the second being aMapornullif no such method exists.- Parameters:
targetClass- The class in which to look for the method. Only this class is searched for the method.acceptPrivate-trueif private methods should be considered.acceptPackage-trueif package private methods should be considered.logger-- Returns:
- The requested method or
nullif no acceptable method can be found in the target class. - Throws:
SuitableMethodNotAccessibleException- If a suitable method was found which is not accessiblejava.lang.reflect.InvocationTargetException- If an unexpected Throwable is caught trying to find the requested method.
-
getServiceObjectAssignableWithMapMethod
private java.lang.reflect.Method getServiceObjectAssignableWithMapMethod(java.lang.Class<?> targetClass, java.lang.Class<?> parameterClass, boolean acceptPrivate, boolean acceptPackage) throws SuitableMethodNotAccessibleExceptionReturns a method taking two parameters, the first being an object whose type is assignment compatible with the declared service type and the second being aMapornullif no such method exists.- Parameters:
targetClass- The class in which to look for the method. Only this class is searched for the method.acceptPrivate-trueif private methods should be considered.acceptPackage-trueif package private methods should be considered.- Returns:
- The requested method or
nullif no acceptable method can be found in the target class. - Throws:
SuitableMethodNotAccessibleException- If a suitable method was found which is not accessible
-
getMapMethod
private java.lang.reflect.Method getMapMethod(java.lang.Class<?> targetClass, java.lang.Class<?> parameterClass, boolean acceptPrivate, boolean acceptPackage, ComponentLogger logger) throws SuitableMethodNotAccessibleException, java.lang.reflect.InvocationTargetExceptionReturns a method taking a single map parameter ornullif no such method exists.- Parameters:
targetClass- The class in which to look for the method. Only this class is searched for the method.acceptPrivate-trueif private methods should be considered.acceptPackage-trueif package private methods should be considered.logger-- Returns:
- The requested method or
nullif no acceptable method can be found in the target class. - Throws:
SuitableMethodNotAccessibleException- If a suitable method was found which is not accessiblejava.lang.reflect.InvocationTargetException- If an unexpected Throwable is caught trying to find the requested method.
-
getServiceObject
public <S,T> boolean getServiceObject(BindParameters parameters, org.osgi.framework.BundleContext context)
- Specified by:
getServiceObjectin interfaceReferenceMethod
-
getParameters
protected java.lang.Object[] getParameters(java.lang.reflect.Method method, BindParameters bp)Description copied from class:BaseMethodReturns the parameter array created from therawParameterusing the actual parameter type list of themethod.- Specified by:
getParametersin classBaseMethod<BindParameters,java.util.List<ValueUtils.ValueType>>- Returns:
-
getMethodNamePrefix
protected java.lang.String getMethodNamePrefix()
- Overrides:
getMethodNamePrefixin classBaseMethod<BindParameters,java.util.List<ValueUtils.ValueType>>
-
-