gpt4 book ai didi

java - 吊索@Inject NullPointerError,当@Reference成功时

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:01:48 27 4
gpt4 key购买 nike

当尝试使用 @Inject (javax.inject.Inject) 在 @SlingServlet MyServlet 中注入(inject) MyConfigurationService 时导致 NullPointerError 在构建过程中使用 Maven org.apache.felix.maven-scr-plugin 对 AEM OSGi 容器内的 myConfigurationService 尝试任何操作。

服务实现:

@Service({MyConfigurationService.class})
@Component(immediate = true, metatype = true, label = "My Configuration Service")
public class MyConfigurationServiceImpl implements MyConfigurationService {
@Property(unbounded = PropertyUnbounded.DEFAULT, label = "API URL", description = "API URL")
private static final String API_URL = "apiurl";

private String apiUrl;

@Activate
protected void activate(Map<String, Object> properties) {
this.apiUrl = PropertiesUtil.toString(properties.get(API_URL), "");
}
}

小服务程序:

@SlingServlet(paths = "/bin/myServlet", methods = "POST", metatype = true)
public class MyServlet extends org.apache.sling.api.servlets.SlingAllMethodsServlet {
private static final long serialVersionUID = 1L;
private static final Logger logger = LoggerFactory.getLogger(MyServlet.class);

@Inject
MyConfigurationService myConfigurationService;

@Override
protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServerException, IOException {
// any attempts to use myConfigurationService results in NPE
}
}

然而,使用 @Reference (org.apache.felix.scr.annotations.Reference) 代替 @Inject 成功注入(inject)服务并可在 @SlingServlet doPost等方法:

@Reference
MyConfigurationService myConfigurationService;

为什么 @Inject@Reference 有效时无法将服务注入(inject)到 @SlingServlet 中?

感谢您提供的任何帮助!

最佳答案

我认为您将 sling 模型 @Inject 与 maven SCR 插件使用的 SCR 注释混淆了。

maven SCR 插件定义了在build time 处理的注解,定义在这里:http://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin/scr-annotations.html所有这些注释都在 org.apache.felix.scr.annotations

包下

@Reference 注释只能与@Component、@service、@SlingServlte 或任何其他定义 OSGI 组件的 SCR 类注释一起使用。

javax.inject.Inject 注释是通用的,被许多框架用于依赖注入(inject)。在 AEM 或 Sling 的情况下,它仅表示 Sling 模型(由 org.apache.sling.models.annotations.Model 注释的类)内部的某些内容,阅读有关 @Inject 和其他注释的更多信息用于此处的吊索模型:https://sling.apache.org/documentation/bundles/models.html#basic-usage

关于java - 吊索@Inject NullPointerError,当@Reference成功时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48816544/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com