2012-07-03 84 views
2

我有簡單的REST風格的WS依賴注入寧靜WS

@Path("basic") 
public class ServiceRS 
{ 

    private IServiceJAX service; 

    @GET 
    @Produces(MediaType.APPLICATION_JSON) 
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED) 
    public String find(@FormParam("searchRequest") final String searchRequest) 
    { 
//... 
     final List<Info> response = service.find(search); 
//... 
    } 

} 

哪裏IServiceJAX是JAX-web服務的@Local接口。 可以使用註釋將IServiceJAX注入ServiceRS嗎?
我不想使用JNDI查找...

回答

3

當然,你可以。雖然我想還有其他的方法,我已經成功地運行了@Stateless@WebService一個簡單的測試項目,@Local實施的interface,通過@EJB註釋注入與@Path註釋一個@Stateless RESTful Web服務。

這是不正確的CDI注射,因爲您已經要求,但它很好地工作,並可能適合您的需求無論如何。

IServiceJAX類:

public interface IServiceJAX { 
    public String hello(String txt); 
} 

IServiceJAXImpl類:

@WebService(serviceName = "NewWebService") 
@Local 
@Stateless 
public class IServiceJAXImpl implements IServiceJAX { 

    @WebMethod(operationName = "hello") 
    @Override 
    public String hello(@WebParam(name = "name") String txt) { 
     return "Hello " + txt + " !"; 
    } 
} 

服務商類:

@Path("basic") 
@Stateless 
public class ServiceRS { 

    @EJB private IServiceJAX wsi; 

    @GET 
    @Path("{id}") 
    @Produces(MediaType.APPLICATION_JSON) 
    public String result(@PathParam("id") String id) { 
     return wsi.hello(id); 
    } 
} 

UPDATE

如果你喜歡CDI注射,可以保持上面的代碼,並簡單地從IServiceJAXImpl刪除@Local@Stateless註解。您可以使用此注射類的一個實例:中

@Inject private IServiceJAX wsi; 

代替

@EJB private IServiceJAX wsi; 
+0

感謝幫助我很多 –

+0

的CDI沒有工作的最新情況。爲我提供一個針對對象的空指針 – gshauger