2

我有简单宁静的 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);
//...
   }

}  

jax-webserviceIServiceJAX的接口在哪里。@Local我可以注入IServiceJAX使用ServiceRS注释吗?
我不想使用 JNDI 查找...

4

1 回答 1

3

你当然可以。尽管我认为还有其他方法,但我已经成功运行了一个简单的测试项目,该项目@Stateless @WebService通过注释将 的@Local实现interface注入到使用.@EJB@Stateless@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 + " !";
    }
}

服务RS类:

@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);
    }
}

更新

如果你更喜欢 CDI 注入,你可以保留上面的代码并简单@Local@StatelessIServiceJAXImpl. 您可以使用以下方法注入此类的实例:

@Inject private IServiceJAX wsi;

代替

@EJB private IServiceJAX wsi;
于 2012-07-03T19:57:24.493 回答