如何使用Web服务 - 不使用wsimport - 使用依赖注入

时间:2015-07-22 22:25:42

标签: java web-services dependency-injection ejb cdi

晚上好人,

我想知道如何在不使用WSIMPORT和注入服务接口的情况下使用Web服务。

让我更具体地说明我在做什么:

  

想象一下,我们有项目:project-ws

     

导出接口和DTO如下

@WebService(targetNamespace = "http://namespace", name = "ServiceName")
public interface Webservice {

    @WebMethod
    public @WebResult List<DTOObject> method() throws WebServiceException;

}

让我们说DTO:

public class DTO {
   /*Attributes and DTO related stuff */
}

然后我想要做的是通过接口和DTO类导出JAR,以便所有客户端都可以通过将这个“JAR-API”添加到类路径来知道“接口内容”,然后只需注入服务类,然后CDI会知道这是一个webservice接口,每次调用它时都会转发到Webservice端点,然后回送到我的调用堆栈。

为什么我要这样做?因为我厌倦了每次在DTO或Webservice界面中更改某些内容时,我必须在所有客户端项目中执行整个WSIMPORT操作并且这会占用大量时间!

我知道这是可能的,我在一个曾经工作的旧项目中看过这个,使用过的是Spring,但我不知道如何用CDI和EJB3完成这个。有可能吗?

非常感谢你们。 问候。

1 个答案:

答案 0 :(得分:0)

经过几天的搜索,我自己已经弄明白了。

为了将来的参考和帮助将来可能会发现这个问题的人我是如何解决这个问题的:

http://tomee.apache.org/examples-trunk/simple-webservice/README.html

整个想法是使用以下两种方式注释Impl Endpoint接口:@Stateless和@WebService

在客户端项目中,在将接口和DTO暴露在单独的JAR文件或链接到Eclipse中的文件夹之后,执行以下操作:

    Service calculatorService = Service.create(
                    new URL("http://127.0.0.1:4204/Calculator?wsdl"),
                    new QName("http://superbiz.org/wsdl", "CalculatorService"));

            CalculatorWs calculator = calculatorService.getPort(CalculatorWs.class);

/*Use your methods Freely!!*/