我有简单的REST风格的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
是@Local
JAX-Web服务的接口。 我可以注入IServiceJAX
到ServiceRS
使用注释?
我不想使用JNDI查找...
你当然可以。 虽然我想还有其他的方法,我已经成功地运行了一个简单的测试项目@Stateless
@WebService
, @Local
实现的的interface
,通过注入@EJB
标注成@Stateless
带有加注解的RESTful Web服务@Path
。
这不是一个正确的注射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注射,可以保持上面的代码,只需去除@Local
和@Stateless
从注释IServiceJAXImpl
。 您可以使用注入这个类的一个实例:
@Inject private IServiceJAX wsi;
代替
@EJB private IServiceJAX wsi;