2016-06-06 105 views
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); 
    } 
} 
+0

標註的web服務作爲'''@ Stateless'''使其成爲一個EJB的bean,使之能與CDI作爲EJB bean的註冊。另外,你從webservice調用main。那不是web服務如何設計運作。這應該由具有EJB和CDI容器的應用程序服務器來管理 – maress

+0

@maress在加載應用程序時在_Exception中添加'@ Stateless'結果:CDI部署失敗:WELD-001408:具有限定符的FooFinder類型的不滿意依賴關係@Default_ 'main()'部分來自Idea WebServices示例代碼。 –

+0

確保「@ RequestScoped」註釋是一個「javax.enterprise.context.RequestScoped」而不是「javax.faces.bean.RequestScoped」 – maress

回答

0

原來有一個與CDI庫設置有問題之內。我正在使用IntelliJ IDEA,並且在GlassFish配置對話框中啓用了CDI支持。

GlassFish configuration

注射卻沒有工作,直到我加入模塊的配置CDI的支持。

Modules configuration