【问题标题】:Java EE NullPointerException with CDI and web service带有 CDI 和 Web 服务的 Java EE NullPointerException
【发布时间】:2016-06-06 17:35:19
【问题描述】:

我正在尝试实现一个演示 Web 服务,但我遇到了 CDI。我想将FooFinder 注入FooBooker,但我得到的是null(在调用 FooResponse 期间出现 NullPointerException,因为 fooFinder 为空)。

我有一个界面

@RequestScoped
@Named
public interface FooFinder {

    FooResponse getReply(String origin, String destination);
}

实现方式

@RequestScoped
@Named
public class MockedFoo implements FooFinder {

    @Override
    public FooResponse getReply(String origin, String destination) {
        String s = "SuperFoo";
        Double d = 123.45;
    return new FooResponse(origin, destination, s, d);
    }
}

在网络服务中

@WebService
public class FooBooker {
    @Inject
    FooFinder fooFinder;

    @WebMethod
    public FooResponse getReply(String origin, String destination) {
        return fooFinder.getReply(origin, destination);
    }

    public static void main(String[] argv) {
        Object implementor = new FooBooker();
        String address = "http://localhost:9000/FooBooker";
        Endpoint.publish(address, implementor);
    }
}

【问题讨论】:

  • 将 webservice 注释为 @Stateless 以使其成为 EJB bean,以便可以将其作为 EJB bean 注册到 CDI。此外,您正在从 web 服务调用 main。这不是 Web 服务的设计方式。这应该由具有 EJB 和 CDI 容器的应用程序服务器管理
  • @maress 添加@Stateless 导致加载应用程序时出现异常:CDI 部署失败:WELD-001408:带有限定符@Default 的 FooFinder 类型的依赖关系不满足 main()部分来自 Idea WebServices 示例代码。
  • 确保@RequestScoped 注释是javax.enterprise.context.RequestScoped 而不是javax.faces.bean.RequestScoped

标签: java jakarta-ee jax-ws cdi


【解决方案1】:

事实证明,CDI 库设置存在问题。我正在使用 IntelliJ IDEA,并且在 GlassFish 配置对话框中启用了 CDI 支持。

但是,直到我在模块配置中添加 CDI 支持后,注入才起作用。

【讨论】:

    猜你喜欢
    • 2016-05-19
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    • 1970-01-01
    • 2017-04-22
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多