zoukankan      html  css  js  c++  java
  • AbstractMethodError: com.alibaba.cloud.sentinel.feign.SentinelContractHolder.parseAndValidateMetadata(Ljava/lang/Class;)Ljava/util/List;

    在整合sentinel和服务的时候,报标题这个错,也是由版本原因导致的

    feign的Contract接口,
    2.2.0.RELEASE:

    // TODO: break this and correct spelling at some point
    List<MethodMetadata> parseAndValidatateMetadata(Class<?> targetType);
    

    2.2.2.RELEASE:

    List<MethodMetadata> parseAndValidateMetadata(Class<?> targetType);
    

    在2.2.0.RELEASE里有一行注释描述,接口方法名拼写错误,在2.2.2.RELEASE方法已修正了,即方法名发生了改变。
    在spring-cloud-alibaba-sentinel中的SentinelContractHolder类,用到了该接口的这个方法(feign2.2.0.RELEASE版本):

    @Override
    public List<MethodMetadata> parseAndValidatateMetadata(Class<?> targetType) {
    	List<MethodMetadata> metadatas = delegate.parseAndValidatateMetadata(targetType);
    	metadatas.forEach(metadata -> METADATA_MAP
    			.put(targetType.getName() + metadata.configKey(), metadata));
    	return metadatas;
    }
    

    解决办法,要不修改版本,要不就是在工程合适的地方,新建包com.alibaba.cloud.sentinel.feign。重新修改一下SentinelContractHolder即可

    /**
     * @author WGR
     * @create 2020/8/21 -- 0:27
     */
    public class SentinelContractHolder implements Contract {
        private final Contract delegate;
    
        /**
         * map key is constructed by ClassFullName + configKey. configKey is constructed by
         * {@link feign.Feign#configKey}
         */
        public final static Map<String, MethodMetadata> METADATA_MAP = new HashMap<>();
    
        public SentinelContractHolder(Contract delegate) {
            this.delegate = delegate;
        }
    
        @Override
        public List<MethodMetadata> parseAndValidateMetadata(Class<?> targetType) {
            List<MethodMetadata> metadatas = delegate.parseAndValidateMetadata(targetType);
            metadatas.forEach(metadata -> METADATA_MAP
                    .put(targetType.getName() + metadata.configKey(), metadata));
            return metadatas;
        }
    }
    
  • 相关阅读:
    解决Python开发中,Pycharm中无法使用中文输入法问题
    PointNet++作者的视频讲解文字版
    StringBuilder
    DropDownList 添加“请选择”
    SQLServer 2008中SQL增强之三 Merge(在一条语句中使用
    ASP.NET Web Forms 的 DI 應用範例
    怎么设置环境变量
    ParameterizedThreadStart,ThreadStart的使用,线程Thread传参数
    异步删除
    SqlCommandBuilder的作用
  • 原文地址:https://www.cnblogs.com/dalianpai/p/13538867.html
Copyright © 2011-2022 走看看