注入 deltaspike 属性时出错

Error while injecting deltaspike properties

我正在关注 github 上的 deltaspike 配置示例。我不断收到此异常:

org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object available for injection at
SystemInjecteeImpl(requiredType=String,parent=AntivaxParentController,qualifiers=
{@org.apache.deltaspike.core.api.config.ConfigProperty(parameterizedBy=org.apache.deltaspike.NullValueMarker, 
defaultValue=null, projectStageAware=true, evaluateVariables=true, 
converter=interface org.apache.deltaspike.core.api.config.ConfigResolver$Converter, 
name=antivax.parents.intelligence)},position=-1,optional=false,self=false,unqualified=null,1961437149)

我添加了自定义配置源提供程序以从特定位置加载属性:

public class MyConfigSourceProvider implements ConfigSourceProvider {
    @Override
    public List<ConfigSource> getConfigSources() {
        return Arrays.asList((ConfigSource) new MyConfigSource());
    }
}

MyConfigSource 的实现是:

public class MyConfigSource extends BaseConfigSource {
    
    private final Properties properties;
    private static final String MY_CONF_FILE_NAME = "G:\antivax-config.properties";
    
    public MyConfigSource() {
        
        properties = new Properties();
        try (InputStream inStream = new FileInputStream(MY_CONF_FILE_NAME)) {
            properties.load(inStream);
        } catch (Exception e) { }
    }

    @Override
    public String getConfigName() {
        return MY_CONF_FILE_NAME;
    }

    @Override
    public int getOrdinal() {
        return 401;
    }

    @Override
    public Map<String, String> getProperties() {
        Map<String, String> propertyMap = new HashMap<>();
        properties.keySet().stream().map(Objects::toString).forEach(key -> propertyMap.put(key, (String)properties.get(key)));
        return propertyMap;
    }

    @Override
    public String getPropertyValue(String key) {
        return properties.getProperty(key);
    }

    @Override
    public boolean isScannable() {
        return false;
    }

}

然而,这失败了..

@Path("parents")
@RequestScoped
public class AntivaxParentController {

    @Inject
    @ConfigProperty(defaultValue = "hello world", name = "antivax.parents.intelligence")
    private String intelligence;

    @GET
    @Path("ping")
    @Produces(MediaType.APPLICATION_JSON)
    public Response givePing() {
        return Response.status(Status.OK).entity(intelligence).build();
    }
}

我试过了

  1. 使用默认 属性 文件
  2. 使用自定义 属性 文件

我已经上传了项目here。任何潜在客户表示赞赏。

更新: 我删除了 String 上的注释并检查了 System.out.println(ConfigResolver.getAllProperties() 的输出。 属性 文件中的所有属性都已加载。在 String.

上使用 @Inject@ConfigProperty 时出现错误

从覆盖的方法 isScannable 返回 true 有所不同。