注入 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();
}
}
我试过了
- 使用默认 属性 文件
- 使用自定义 属性 文件
我已经上传了项目here。任何潜在客户表示赞赏。
更新:
我删除了 String 上的注释并检查了 System.out.println(ConfigResolver.getAllProperties()
的输出。 属性 文件中的所有属性都已加载。在 String
.
上使用 @Inject
和 @ConfigProperty
时出现错误
从覆盖的方法 isScannable
返回 true
有所不同。
我正在关注 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();
}
}
我试过了
- 使用默认 属性 文件
- 使用自定义 属性 文件
我已经上传了项目here。任何潜在客户表示赞赏。
更新:
我删除了 String 上的注释并检查了 System.out.println(ConfigResolver.getAllProperties()
的输出。 属性 文件中的所有属性都已加载。在 String
.
@Inject
和 @ConfigProperty
时出现错误
从覆盖的方法 isScannable
返回 true
有所不同。