Java 带有 CDI 和 Web 服务的 EE NullPointerException
Java EE NullPointerException with CDI and web service
我正在尝试实现一个演示 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);
}
}
原来是 CDI 库设置有问题。我正在使用 IntelliJ IDEA,并且在 GlassFish 配置对话框中启用了 CDI 支持。
然而,直到我在模块配置中添加 CDI 支持后,注入才起作用。
我正在尝试实现一个演示 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);
}
}
原来是 CDI 库设置有问题。我正在使用 IntelliJ IDEA,并且在 GlassFish 配置对话框中启用了 CDI 支持。
然而,直到我在模块配置中添加 CDI 支持后,注入才起作用。