use of com.alipay.sofa.runtime.api.annotation.SofaReferenceBinding in project sofa-boot by alipay.
the class ServiceBeanFactoryPostProcessor method getSofaReferenceBinding.
/**
* get sofa reference binding annotated on parameter. At present, only jvm sofa reference is supported .
* @param sofaReferenceAnnotation
* @param sofaReferenceBinding
* @return
*/
private List<Binding> getSofaReferenceBinding(SofaReference sofaReferenceAnnotation, SofaReferenceBinding sofaReferenceBinding) {
if (!JvmBinding.XmlConstants.BINDING_TYPE.equals(sofaReferenceBinding.bindingType())) {
throw new ServiceRuntimeException(ErrorCode.convert("01-02005"));
}
List<Binding> bindings = new ArrayList<>();
BindingConverter bindingConverter = bindingConverterFactory.getBindingConverter(new BindingType(sofaReferenceBinding.bindingType()));
if (bindingConverter == null) {
throw new ServiceRuntimeException(ErrorCode.convert("01-00200", sofaReferenceBinding.bindingType()));
}
BindingConverterContext bindingConverterContext = new BindingConverterContext();
bindingConverterContext.setInBinding(true);
bindingConverterContext.setApplicationContext(applicationContext);
bindingConverterContext.setAppName(sofaRuntimeContext.getAppName());
bindingConverterContext.setAppClassLoader(sofaRuntimeContext.getAppClassLoader());
Binding binding = bindingConverter.convert(sofaReferenceAnnotation, sofaReferenceBinding, bindingConverterContext);
bindings.add(binding);
return bindings;
}
use of com.alipay.sofa.runtime.api.annotation.SofaReferenceBinding in project sofa-boot by alipay.
the class AnnotationPlaceHolderTest method testReferenceAnnotationPlaceHolder.
@Test
@SuppressWarnings("unchecked")
public void testReferenceAnnotationPlaceHolder() throws Exception {
PlaceHolderBinder binder = new PlaceHolderBinder() {
@Override
public String bind(String origin) {
return environment.resolvePlaceholders(origin);
}
};
SofaReference sofaReference = AnnotationSampleService.class.getField("sampleService").getAnnotation(SofaReference.class);
PlaceHolderAnnotationInvocationHandler.AnnotationWrapperBuilder<SofaReference> builder = PlaceHolderAnnotationInvocationHandler.AnnotationWrapperBuilder.wrap(sofaReference).withBinder(binder);
SofaReference delegate = builder.build();
Assert.assertEquals("${annotation.sample.ref.uniqueId}", sofaReference.uniqueId());
Assert.assertEquals("sample-reference-uniqueId", delegate.uniqueId());
Assert.assertFalse(sofaReference.jvmFirst());
Assert.assertFalse(delegate.jvmFirst());
SofaReferenceBinding binding = sofaReference.binding();
SofaReferenceBinding delegateBinding = delegate.binding();
Assert.assertEquals("${annotation.sample.ref.bindingType}", binding.bindingType());
Assert.assertEquals("bolt", delegateBinding.bindingType());
Assert.assertEquals("${annotation.sample.ref.direct-url}", binding.directUrl());
Assert.assertEquals("127.0.0.1", delegateBinding.directUrl());
String[] filters = binding.filters();
String[] delegateFilters = delegateBinding.filters();
Assert.assertEquals(2, filters.length);
Assert.assertEquals(2, delegateFilters.length);
Assert.assertEquals("${annotation.sample.ref.filter-1}", filters[0]);
Assert.assertEquals("reference-filter-1", delegateFilters[0]);
Assert.assertEquals("filter-2", filters[1]);
Assert.assertEquals("filter-2", delegateFilters[1]);
Assert.assertTrue(delegate instanceof WrapperAnnotation);
Assert.assertTrue(delegateBinding instanceof WrapperAnnotation);
}
use of com.alipay.sofa.runtime.api.annotation.SofaReferenceBinding in project sofa-boot by sofastack.
the class ServiceBeanFactoryPostProcessor method getSofaReferenceBinding.
/**
* get sofa reference binding annotated on parameter. At present, only jvm sofa reference is supported .
* @param sofaReferenceAnnotation
* @param sofaReferenceBinding
* @return
*/
private List<Binding> getSofaReferenceBinding(SofaReference sofaReferenceAnnotation, SofaReferenceBinding sofaReferenceBinding) {
if (!JvmBinding.XmlConstants.BINDING_TYPE.equals(sofaReferenceBinding.bindingType())) {
throw new ServiceRuntimeException(ErrorCode.convert("01-02005"));
}
List<Binding> bindings = new ArrayList<>();
BindingConverter bindingConverter = bindingConverterFactory.getBindingConverter(new BindingType(sofaReferenceBinding.bindingType()));
if (bindingConverter == null) {
throw new ServiceRuntimeException(ErrorCode.convert("01-00200", sofaReferenceBinding.bindingType()));
}
BindingConverterContext bindingConverterContext = new BindingConverterContext();
bindingConverterContext.setInBinding(true);
bindingConverterContext.setApplicationContext(applicationContext);
bindingConverterContext.setAppName(sofaRuntimeContext.getAppName());
bindingConverterContext.setAppClassLoader(sofaRuntimeContext.getAppClassLoader());
Binding binding = bindingConverter.convert(sofaReferenceAnnotation, sofaReferenceBinding, bindingConverterContext);
bindings.add(binding);
return bindings;
}
use of com.alipay.sofa.runtime.api.annotation.SofaReferenceBinding in project sofa-boot by sofastack.
the class AnnotationPlaceHolderTest method testReferenceAnnotationPlaceHolder.
@Test
@SuppressWarnings("unchecked")
public void testReferenceAnnotationPlaceHolder() throws Exception {
PlaceHolderBinder binder = new PlaceHolderBinder() {
@Override
public String bind(String origin) {
return environment.resolvePlaceholders(origin);
}
};
SofaReference sofaReference = AnnotationSampleService.class.getField("sampleService").getAnnotation(SofaReference.class);
PlaceHolderAnnotationInvocationHandler.AnnotationWrapperBuilder<SofaReference> builder = PlaceHolderAnnotationInvocationHandler.AnnotationWrapperBuilder.wrap(sofaReference).withBinder(binder);
SofaReference delegate = builder.build();
Assert.assertEquals("${annotation.sample.ref.uniqueId}", sofaReference.uniqueId());
Assert.assertEquals("sample-reference-uniqueId", delegate.uniqueId());
Assert.assertFalse(sofaReference.jvmFirst());
Assert.assertFalse(delegate.jvmFirst());
SofaReferenceBinding binding = sofaReference.binding();
SofaReferenceBinding delegateBinding = delegate.binding();
Assert.assertEquals("${annotation.sample.ref.bindingType}", binding.bindingType());
Assert.assertEquals("bolt", delegateBinding.bindingType());
Assert.assertEquals("${annotation.sample.ref.direct-url}", binding.directUrl());
Assert.assertEquals("127.0.0.1", delegateBinding.directUrl());
String[] filters = binding.filters();
String[] delegateFilters = delegateBinding.filters();
Assert.assertEquals(2, filters.length);
Assert.assertEquals(2, delegateFilters.length);
Assert.assertEquals("${annotation.sample.ref.filter-1}", filters[0]);
Assert.assertEquals("reference-filter-1", delegateFilters[0]);
Assert.assertEquals("filter-2", filters[1]);
Assert.assertEquals("filter-2", delegateFilters[1]);
Assert.assertTrue(delegate instanceof WrapperAnnotation);
Assert.assertTrue(delegateBinding instanceof WrapperAnnotation);
}
Aggregations