设为首页 收藏本站
查看: 783|回复: 0

[经验分享] 使用Eclipse+Axis2+Tomcat构建Web Services应用(实例讲解篇)

[复制链接]

尚未签到

发表于 2017-2-10 11:29:48 | 显示全部楼层 |阅读模式
一、建立要发布的Web Service
  1.1 解压所下载的axis2-1.6.0-bin.zip,在Eclipse中的Windows\Preferences下new一个User Libraries,命名为axis2,将解压后文件夹中 axis2-1.6.0\lib 下的包均添加进来。这一步操作的目的是为了以后工程方便添加axis2所需的 jar文件。
  
DSC0000.jpg
  1.2 建立一个JavaProject,命名为sayHello,将axis2用户库加入到build path中

1.3 现在开始编写要发布的WebService,在src包中建包Hi,建立Hello类如下:

package Hi;
publicclass Hello {
public String sayHello(String user) {
return"Hello, "+ user;
}
}
  此时sayHello工程结构如下:
  
DSC0001.jpg

二、发布Web Service
  

2.1 编译刚刚建立的Hello类,类编译后,会在workspace中对应工程目录下的bin文件夹下生成Hello.class文件

2.2 打包要发布的Service, 点击Eclipse中New ——> File ——> Other ——> Axis2 wizards ——> Axis2 Services Archiver,按照向导选择刚建立的类编译后的class文件。

注意点:


1、在我的工程中,workspace是D:\eclipse-sdk\sdkProject,选择class目录,本工程中class Hello是带包Hi的,因此我们不能选成D:\eclipse-sdk\sdkProject\sayHello\bin\Hi,而应该选择D:\eclipse-sdk\sdkProject\sayHello\bin,如图所示:
  
DSC0002.jpg
  


  2、默认选择Skip WSDL


  3、继续next,这两步默认,什么都不选

  
DSC0003.jpg
  
DSC0004.jpg
  4、设定服务名称和所使用的类名,点击Load如下所示:




  
DSC0005.jpg
  



  注意Class name请务必设为Hi.Hello,代表使用的类是D:\eclipse-sdk\sdkProject\sayHello\bin路径下,文件夹Hi下的Hello类,否则Load不上的。

  5 设置输出路径为: D:\tomcat7\webapps\axis2\WEB-INF\services

  
DSC0006.jpg
  
6 点击Finish完成发布。



三、测试所发布的Web Service





  


  打开http://localhost:8080/axis2/services/listServices页面,可以看到sayHello服务:



  
DSC0007.jpg
  点击进到sayHello的wsdl页面:http://localhost:8080/axis2/services/sayHello?wsdl,表明服务部署正确。
  
DSC0008.jpg

四、编写客户端代码调用WebService
  

本文例子与其他例子最大的不同就在这里,其他例子一般需要根据刚才的服务wsdl生成客户端stub,然后通过stub来调用服务,这种方式显得比较单一,客户端必须需要stub存根才能够访问服务,很不方面。

本例子的客户端不采用stub方式,而是一种实现通用的调用方式,不需要任何客户端存根即可访问服务。只需要指定对于的web servce地址、操作名、参数和函数返回类型即可。工程结构如下:
  
DSC0009.jpg
  代码如下:

package Hi;
import javax.xml.namespace.QName;
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient;
publicclass myClient {
private RPCServiceClient serviceClient;
private Options options;
private EndpointReference targetEPR;
public myClient(String endpoint) throws AxisFault {
serviceClient =new RPCServiceClient();
options = serviceClient.getOptions();
targetEPR =new EndpointReference(endpoint);
options.setTo(targetEPR);
}
public Object[] invokeOp(String targetNamespace, String opName,
Object[] opArgs, Class<?>[] opReturnType) throws AxisFault,
ClassNotFoundException {
// 设定操作的名称
QName opQName =new QName(targetNamespace, opName);
// 设定返回值
//Class<?>[] opReturn = new Class[] { opReturnType };
// 操作需要传入的参数已经在参数中给定,这里直接传入方法中调用
return serviceClient.invokeBlocking(opQName, opArgs, opReturnType);
}
/**
* @param args
* @throws AxisFault
* @throws ClassNotFoundException
*/
publicstaticvoid main(String[] args) throws AxisFault, ClassNotFoundException {
// TODO Auto-generated method stub
final String endPointReference ="http://localhost:8080/axis2/services/sayHello";
final String targetNamespace ="http://Hi";
myClient client =new myClient(endPointReference);
String opName ="sayHello";
Object[] opArgs =new Object[]{"My Friends"};
Class<?>[] opReturnType =new Class[]{String[].class};
Object[] response = client.invokeOp(targetNamespace, opName, opArgs, opReturnType);
System.out.println(((String[])response[0])[0]);
}
}
  运行该程序,点击Run As->Java application,可以看到控制台端口的输出是:Hello, My Friends,表明客户端调用成功。

    该例子最大的不同和优势表现在客户端的调用方式,或者说是发起服务调用的方式,虽然比起客户端stub存根的方式,代码稍多,但是这种方式统一,不需要生产stub存根代码,解决了客户端有很多类的问题。如果读者对这些代码进一步封装,我想调用方式很简单,只需要传递相关参数,这更好地说明了服务调用的优势。而且这种方式更加简单明了,一看便知具体含义。而不需要弄得stub类的一些机制。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-340154-1-1.html 上篇帖子: tomcat plugin for eclipse 下篇帖子: tomcat中运行ofbiz
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表