Fix deprecations according latest SF

This commit is contained in:
Artem Bilan
2019-03-27 16:21:34 -04:00
committed by Gary Russell
parent 572dc0ec14
commit 56c4458150
3 changed files with 53 additions and 26 deletions

View File

@@ -44,6 +44,8 @@ import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.core.annotation.AnnotatedElementUtils;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.core.annotation.MergedAnnotation;
import org.springframework.core.annotation.MergedAnnotations;
import org.springframework.integration.annotation.Aggregator;
import org.springframework.integration.annotation.BridgeFrom;
import org.springframework.integration.annotation.BridgeTo;
@@ -263,18 +265,17 @@ public class MessagingAnnotationPostProcessor implements BeanPostProcessor, Bean
* @return the hierarchical list of annotations in top-bottom order.
*/
protected List<Annotation> getAnnotationChain(Method method, Class<? extends Annotation> annotationType) {
Annotation[] annotations = AnnotationUtils.getAnnotations(method);
List<Annotation> annotationChain = new LinkedList<>();
if (annotations != null) {
Set<Annotation> visited = new HashSet<>();
for (Annotation ann : annotations) {
recursiveFindAnnotation(annotationType, ann, annotationChain, visited);
if (annotationChain.size() > 0) {
Collections.reverse(annotationChain);
return annotationChain;
}
Set<Annotation> visited = new HashSet<>();
for (MergedAnnotation<Annotation> mergedAnnotation : MergedAnnotations.from(method)) {
recursiveFindAnnotation(annotationType, mergedAnnotation.synthesize(), annotationChain, visited);
if (annotationChain.size() > 0) {
Collections.reverse(annotationChain);
return annotationChain;
}
}
return annotationChain;
}

View File

@@ -16,11 +16,19 @@
package org.springframework.integration.monitor;
import org.springframework.beans.annotation.AnnotationBeanUtils;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.springframework.beans.MutablePropertyValues;
import org.springframework.beans.PropertyAccessorFactory;
import org.springframework.beans.PropertyValue;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.beans.factory.config.EmbeddedValueResolver;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.core.annotation.MergedAnnotation;
import org.springframework.core.annotation.MergedAnnotations;
import org.springframework.integration.support.management.IntegrationManagedResource;
import org.springframework.jmx.export.annotation.AnnotationJmxAttributeSource;
import org.springframework.jmx.export.metadata.InvalidMetadataException;
@@ -33,16 +41,13 @@ import org.springframework.util.StringValueResolver;
*
* @author Gary Russell
* @author Artem Bilan
*
* @since 4.3
*/
public class IntegrationJmxAttributeSource extends AnnotationJmxAttributeSource {
private StringValueResolver valueResolver;
public void setValueResolver(StringValueResolver valueResolver) {
this.valueResolver = valueResolver;
}
@Override
public void setBeanFactory(BeanFactory beanFactory) {
super.setBeanFactory(beanFactory);
@@ -53,13 +58,34 @@ public class IntegrationJmxAttributeSource extends AnnotationJmxAttributeSource
@Override
public ManagedResource getManagedResource(Class<?> beanClass) throws InvalidMetadataException {
IntegrationManagedResource ann = AnnotationUtils.getAnnotation(beanClass, IntegrationManagedResource.class);
if (ann == null) {
MergedAnnotation<IntegrationManagedResource> ann =
MergedAnnotations.from(beanClass, MergedAnnotations.SearchStrategy.EXHAUSTIVE)
.get(IntegrationManagedResource.class)
.withNonMergedAttributes();
if (!ann.isPresent()) {
return null;
}
ManagedResource managedResource = new ManagedResource();
AnnotationBeanUtils.copyPropertiesToBean(ann, managedResource, this.valueResolver);
return managedResource;
Class<?> declaringClass = (Class<?>) ann.getSource();
Class<?> target = (declaringClass != null && !declaringClass.isInterface() ? declaringClass : beanClass);
if (!Modifier.isPublic(target.getModifiers())) {
throw new InvalidMetadataException("@IntegrationManagedResource class '" + target.getName() +
"' must be public");
}
ManagedResource bean = new ManagedResource();
Map<String, Object> map = ann.asMap();
List<PropertyValue> list = new ArrayList<>(map.size());
map.forEach((attrName, attrValue) -> {
if (!"value".equals(attrName)) {
Object value = attrValue;
if (this.valueResolver != null && value instanceof String) {
value = this.valueResolver.resolveStringValue((String) value);
}
list.add(new PropertyValue(attrName, value));
}
});
PropertyAccessorFactory.forBeanPropertyAccess(bean).setPropertyValues(new MutablePropertyValues(list));
return bean;
}
}

View File

@@ -37,10 +37,10 @@ import javax.management.modelmbean.ModelMBean;
import org.springframework.aop.TargetSource;
import org.springframework.aop.framework.Advised;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.config.DestructionAwareBeanPostProcessor;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.EmbeddedValueResolverAware;
import org.springframework.context.Lifecycle;
import org.springframework.integration.channel.QueueChannel;
import org.springframework.integration.config.IntegrationManagementConfigurer;
@@ -84,7 +84,6 @@ import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.MessageHandler;
import org.springframework.util.Assert;
import org.springframework.util.ReflectionUtils;
import org.springframework.util.StringValueResolver;
/**
* <p>
@@ -115,8 +114,8 @@ import org.springframework.util.StringValueResolver;
* @author Meherzad Lahewala
*/
@ManagedResource
public class IntegrationMBeanExporter extends MBeanExporter implements ApplicationContextAware,
EmbeddedValueResolverAware, DestructionAwareBeanPostProcessor {
public class IntegrationMBeanExporter extends MBeanExporter
implements ApplicationContextAware, DestructionAwareBeanPostProcessor {
private static final String SI_PACKAGE = "org.springframework.integration";
@@ -217,8 +216,9 @@ public class IntegrationMBeanExporter extends MBeanExporter implements Applicati
}
@Override
public void setEmbeddedValueResolver(StringValueResolver resolver) {
this.attributeSource.setValueResolver(resolver);
public void setBeanFactory(BeanFactory beanFactory) {
super.setBeanFactory(beanFactory);
this.attributeSource.setBeanFactory(beanFactory);
}
@Override