EJB3 发布WebService及客户端调用

    EJB3发布WebService很简单,但是在客户端调用上却遇到了太多的问题,差不多一天的时间终于搞定了,下面是整个过程,我的服务器采用Weblogic10.3

 

发布WebService

 

    /**

     * @author 王硕

     **/

    @WebService

    @SOAPBinding(style=SOAPBinding.Style.DOCUMENT)

    public interface WS {

 

        public int sum(int x, int y);

 

    }

 

    /**

     * @author 王硕

     **/

    @Stateless

    @WebService(serviceName="WSService")

    public class WSImpl implements WS {

 

        @WebMethod

        public int sum(int x, int y) {

            return x + y;

        }

 

    }

 

部署到Weblogic上,WebService就发布成功了,可以查看WL Console, 也可以直接访问http://localhost:7001/WSImpl/WSService?wsdl查看是否成功,这里需要注意的是,WS上的@WebService是必须要有的,因为最后这个接口是要被打成jar供调用Service的客户端使用的,如果没有这个注解的话,Container是无法识别他为一个Service Interface的, 我这里是将session bean作为服务发布的,这样做的好处不少书籍中都介绍了,我这里就不多说了,下面就客户端的调用,我这里建立了一个新的project,过程如下:

    /**

     * 负责调用WS的Client

 

     * @author 王硕

     **/

    @WebServiceClient(wsdlLocation="http://localhost:7001/WSImpl/WSService?wsdl")

    public class WSProxy extends Service {

 

        public WSProxy(URL wsdlDocumentLocation, QName serviceName) {

          super(wsdlDocumentLocation, serviceName); 

        }

 

        public int proxySum() {

 

          int result = 0;

 

          WS ws = this.getPort(WS.class);

          result = ws.sum(1, 1);

 

          return result;

 

        }       

 

    }

 

    /**

 

     * @author 王硕

     **/

    @Local

    public interface WSInvoke {

        public int sum();

    }

 

    /**

 

     * @author 王硕

     **/

    @Stateless

    public class WSInvokeImpl implements WSInvoke {

 

      @WebServiceRef

      private WSProxy proxy;

 

      public int sum() {

        return proxy.proxySum();

      }

 

      public void setProxy(WSProxy proxy) {

        this.proxy = proxy;

      }

 

      public WSProxy getProxy() {

        return proxy;

      }

 

    }

 

将这个session bean注入servlet就可以访问了,这里需要注意的是WS这个接口,这个接口是发布WebService时对应的Service Interface,调用Service的应用一般是独立的应用,当然不会有这个WS,通常如果发布WebService,也会提供相应的Service Interface让你下载加入到自己的应用中,而我们这里只是测试一下,不用那么麻烦,所以可以创建一个与发布时一模一样的WS接口来做测试,但是在创建的时候请注意,这里WS的package必须和发布时的WS的package一致,因为发布时我这里只用了最简单的配置,没有指定发现空间,所以默认采用的是对应的package,所以这里如果是自己创建WS的话,package必须一致,这样Container会根据其package到相应的发布空间查找对应的服务,通常是相应的发布者把对应的Service Interface打成jar供大家下载,加入到自己的应用中,所以package肯定是一致的,所以这里大家还是要注意一些的,以上就是EJB3 发布与调用WebServicer的整个过程了,希望对大家有帮助,当然方式肯定不是只有这一种,欢迎大家一起交流.

你可能感兴趣的:(EJB3 发布WebService及客户端调用)