2012-07-03 79 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