代码之家  ›  专栏  ›  技术社区  ›  AbhiRam

构造函数应该只调用sonar工具中不可重写的方法

  •  0
  • AbhiRam  · 技术社区  · 4 年前

    JersyConfiguration 从构造函数中删除对可重写“register”方法的调用 . 我真的不明白什么样的代码更改可以解决这个问题。这是我的密码:

    球衣配置

    public class JerseyConfiguration extends ResourceConfig {
    
        @Bean
        @Primary
        public ObjectMapper objectMapper() {
            ObjectMapper objectMapper = new ObjectMapper();
            objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
            objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
            objectMapper.enable(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES);
            objectMapper.enable(DeserializationFeature.READ_ENUMS_USING_TO_STRING);
            return objectMapper;
        }
    
    
    
        @Autowired
        public JerseyConfiguration() {
            register(TermsResourceImpl.class);
            register(AccessIDResourceImpl.class);
            register(CatalogResourceImpl.class);
            register(SubmitOrderResourceImpl.class);
            register(ValidateAndQuoteResourceImp.class);
            property(ServletProperties.FILTER_FORWARD_ON_404, true);
            register(DynamicLoggingFeature.class);
            register(ContextFilter.class);
            register(ServiceExceptionMapper.class);
            register(JsonParseExceptionMapper.class, 1);
            register(JsonMappingExceptionMapper.class, 1);
            register(LoggingContextJerseyFilter.class);
            register(FeatureToggleFilterBinder.class);
        }
    
        @Bean
        public Client jerseyClient() {
            return ClientBuilder.newClient(new ClientConfig());
        }
    }
    

     @Override
     public ResourceConfig property(final String name, final Object value) {
         state.property(name, value);
         return this;
     }
    
     @Override
     public ResourceConfig register(final Class<?> componentClass) {
         invalidateCache();
         state.register(componentClass);
         return this;
     }
    

    SonarQube问题

    SonarQube issue description

    0 回复  |  直到 4 年前
        1
  •  0
  •   agabrys    4 年前

    这不是假阳性,因为规则是正确的。您正在调用构造函数中的方法,该方法可以在子类中更改。这种结构可能会导致问题。例子:

    public class BrokenCode extends JerseyConfiguration {
    
        @Override
        public ResourceConfig register(final Class<?> componentClass) {
            // stop invaliding cache, to break the application
            // invalidateCache();
    
            state.register(componentClass);
            return this;
        }
    }
    

    final . 我不了解泽西岛,所以你可以选择:

    是不可能的

    在某些情况下,添加 最终的 Won't Fix

    最终的 是可能的

    1. 如果你能编辑 ResourceConfig 类,然后更改:
    @Override
    public ResourceConfig register(final Class<?> componentClass) {
        invalidateCache();
        state.register(componentClass);
        return this;
    }
    

    @Override
    public final ResourceConfig register(final Class<?> componentClass) {
        invalidateCache();
        state.register(componentClass);
        return this;
    }
    

    如果 invalidateCache 不是 private 最终的

    1. 如果无法编辑 资源配置 JerseyConfiguration 使用以下方法分类:
    @Override
    public final ResourceConfig register(final Class<?> componentClass) {
        super.register(componentClass)
    }
    

    无效缓存

    @Override
    public final void invalidateCache() {
        super.invalidateCache()
    }
    

    选择的“修复”策略还应基于:

    • 二手框架(泽西岛)指南
    • 配置
    • 等。

    无法修复 当应用程序:

    • 在使用的框架文档中使用结构
    • 球衣配置 类)