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的整个过程了,希望对大家有帮助,当然方式肯定不是只有这一种,欢迎大家一起交流. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |