0
我想實現演示Web服務,但我與CDI鬥爭。我想將FooFinder
注入FooBooker
,但我得到的是null
(因爲fooFinder爲空,所以在調用FooResponse期間存在NullPointerException)。Java EE NullPointerException與CDI和網絡服務
我有一個接口
@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);
}
}
Web服務
@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);
}
}
標註的web服務作爲'''@ Stateless'''使其成爲一個EJB的bean,使之能與CDI作爲EJB bean的註冊。另外,你從webservice調用main。那不是web服務如何設計運作。這應該由具有EJB和CDI容器的應用程序服務器來管理 – maress
@maress在加載應用程序時在_Exception中添加'@ Stateless'結果:CDI部署失敗:WELD-001408:具有限定符的FooFinder類型的不滿意依賴關係@Default_ 'main()'部分來自Idea WebServices示例代碼。 –
確保「@ RequestScoped」註釋是一個「javax.enterprise.context.RequestScoped」而不是「javax.faces.bean.RequestScoped」 – maress