final String methodName = ad.getAnnotatedMethod().getName();
final String defaultUnbindMethodName;
final String refNameByMethod;
ref.setBind(ad.getAnnotatedMethod().getName());
final String unbind = ad.getStringValue("unbind",
this.hasMethod(describedClass, defaultUnbindMethodName) ? defaultUnbindMethodName : "-");
if ( !unbind.equals("-") ) {
final String updated = ad.getStringValue("updated",
this.hasMethod(describedClass, defaultUpdateMethodName) ? defaultUpdateMethodName : "-");
if ( !updated.equals("-") ) {
ref.setName(ad.getStringValue("name", refNameByMethod));
final String serviceName = ad.getStringValue("service", null);
if ( serviceName != null ) {
ref.setInterfaceName(serviceName);
} else {
final Class<?>[] params = ad.getAnnotatedMethod().getParameterTypes();
if ( params != null && params.length > 0 ) {
ref.setInterfaceName(params[0].getName());
final String cardinality = ad.getEnumValue("cardinality", "MANDATORY");
if ( cardinality.equals("OPTIONAL") ) {
ref.setCardinality(ReferenceCardinality.OPTIONAL_UNARY);
ref.setPolicy(ReferencePolicy.valueOf(ad.getEnumValue("policy", ReferencePolicy.STATIC.name())));