加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

axis开发webservice

发布时间:2020-12-17 00:19:19 所属栏目:安全 来源:网络整理
导读:摘要:本节主要用于介绍使用axis开发webservice,包括服务端的创建、webservice的部署、客户端的调用。 preparation: 说明:相关的可能要了解SOAP(简单对象访问协议)、WSDL(web服务描述语言)、XML(可扩展标记语言)、axis(阿帕奇可扩展交互系统)等相

摘要:本节主要用于介绍使用axis开发webservice,包括服务端的创建、webservice的部署、客户端的调用。

preparation:

说明:相关的可能要了解SOAP(简单对象访问协议)、WSDL(web服务描述语言)、XML(可扩展标记语言)、axis(阿帕奇可扩展交互系统)等相关知识。

1.下载axis的jar包,请到apache官网或者在百度自行下载,然后导入jar包,不清楚的话导入所有的jar包就好了。(本人用的是axis1的版本,因为项目中用的是axis1的版本)

2.webservice客户端生成工具genclient.bat(后面会对这个工具做一个简单的说明)

之前介绍没有说明本机的环境,现在把本机环境罗列一下:

系统:XP?myeclipse:6.5?tomcat:5.X?JDK:1.5

生成webservice的方式有XFire、Jax-WS、axis等,使用axis调用webservi有三种方式:动态调用接口、使用动态代理Dynamic?Proxy、使用从WSDL生成的存根generated?Stubs?from?Service?WSDL?description,由于本人工作中使用的是axis,调用webservice的方式用到的有动态调用接口、使用从WSDL生成的存根generated?Stubs?from?Service?WSDL?description,故本节只介绍用axis调用webservice的这两种方式。后续的拓展部分根据需要再说。

start:

第一步:服务器端的开发

(1)开发java文件

代码如下:

接口文件:IBbossGroupInfoService.java

 
 
  1. package?com.asiainfo.b2p.soap.interfaces;???

  2. import?java.rmi.RemoteException;??

  3. publicinterface?IBbossGroupInfoService?{??

  4. //?根据集团编号查询集团基本信息?

  5. /**?

  6. ?????*?集团编号?GROUP_NUM?集团名称?GROUP_NAME?公司地址?CO_ADDR?集团状态?GROUP_STATE?集团开户时间?

  7. ?????*?START_TIME?传真?FAX?企业网址?WEB_URL?证件类型?CARD_TYPE?证件号码?CARD_CODE?

  8. ?????*?公司邮编CO_POSTCODE?联系电话?TEL_NUM?法人代表名称?PERSON_NAME?发展类型?DEVELOP_TYPE?

  9. ?????*?地区编码REGION_ID?regionId?

  10. ?????*??

  11. ?????*?@throws?Exception?

  12. */

  13. publicabstract?String?groupInfo(long?groupNo)?throws?Exception,??

  14. ????????????RemoteException;???

  15. //?根据集团编号查询集团订购历史?

  16. publicabstract?String?groupSubHistoryInfo(long?groupNo)?throws?Exception;??

  17. }??

实现类:IBbossGroupInfoServiceImpl.java

 
 
  1. package?com.asiainfo.b2p.soap.impl;?

  2. import?org.apache.commons.logging.Log;?

  3. import?org.apache.commons.logging.LogFactory;?

  4. import?com.asiainfo.b2p.soap.interfaces.IBbossGroupInfoService;?

  5. /**

  6. ?*?@Product?esop_dev

  7. ?*?@FileName?IBbossGroupInfoServiceImpl.java

  8. ?*?@History?TODO?根据集团编号,查询集团基本信息、集团用户信息、集团订购历史

  9. ?*?@Version?1.0.0

  10. ?*?@Date?Nov?22,?2011

  11. ?*?@Author?pantaipeng

  12. ?*?@Content?最初版本

  13. */

  14. publicclass?IBbossGroupInfoServiceImpl?implements?IBbossGroupInfoService?{?

  15. privatestatictransient?Log?log?=?LogFactory?

  16. ????????????.getLog(IBbossGroupInfoServiceImpl.class);?

  17. //?根据集团编号查询集团基本信息

  18. public?String?groupInfo(long?groupNo)?throws?Exception,?RemoteException?{?

  19. ????????log.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>集团编号="?+?groupNo);?

  20. //方法体我省略了,为了测试我仅加入一句打印语句

  21. ????????System.out.println("我是一个公共的方法,作用是根据集团编号查询集团基本信息");?

  22. ????????String?xml="<message>public_groupInfo</message>";//为了测试,返回的信息我也是随便写的一个字符串

  23. return?xml;?

  24. ????}?

  25. //?根据集团编号查询集团订购历史

  26. public?String?groupSubHistoryInfo(long?groupNo)?throws?Exception?{?

  27. ????????log.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>集团编号="?+?groupNo);?

  28. //方法体我省略了,为了测试我仅加入一句打印语句

  29. ????????System.out.println("我是一个公共的方法,作用是根据集团编号查询集团订购历史");?

  30. ????????String?xml="<message>public_groupSubHistoryInfo</message>";//为了测试,返回的信息我也是随便写的一个字符串

  31. return?xml;?

  32. ????}?

  33. }?

说明:为了更加的接近实际的开发,这个是本机上运行的程序,实现的功能是通过一个编号查询相关信息拼成一个字符串,方法体的部分我删除了,你需要用这个代码的话,直接拷贝修改包名称就可以直接用了。

(2)wsdd文件

wsdd文件只需加入一列几行(前提是你之前已经有wsdd文件了,没有的话可以在下载的apache的demo中拷贝一个):

 
 
  1. <servicename="GroupInfoService"type=""provider="java:RPC">

  2. <parametername="className"value="com.asiainfo.b2p.soap.impl.IBbossGroupInfoServiceImpl"></parameter>

  3. <parametername="allowedMethods"value="*"/>

  4. </service>

这个文件放在项目的WEB-INF下面。<service>标签的name属性是发布的webservice的名称,可以自己命名,第一个<parameter>标签的value属性指定实现类的完整路径,包括类名。其他的地方默认就好。
(3)配置web.xml文件

 
 
  1. <servlet>

  2. <servlet-name>AxisServlet</servlet-name>

  3. <display-name>Apache-Axis?Servlet</display-name>

  4. <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>

  5. </servlet>

  6. <servlet-mapping>

  7. <servlet-name>AxisServlet</servlet-name>

  8. <url-pattern>/services/*</url-pattern>

  9. </servlet-mapping>

指定处理类以及映射就好,如果像这样配置的话,后面再写webservice的话,这个文件就不用再配置了。

第二步:客户端的开发

(1).动态调用接口

代码如下:

 
 
  1. package?test.webserviceclient;?

  2. import?java.net.MalformedURLException;?

  3. import?java.net.URL;?

  4. import?java.rmi.RemoteException;?

  5. import?javax.xml.rpc.ParameterMode;?

  6. import?javax.xml.rpc.ServiceException;?

  7. import?org.apache.axis.client.Call;?

  8. import?org.apache.axis.encoding.XMLType;?

  9. publicclass?Test?{?

  10. /**

  11. ?????*?通过genClient.bat文件生成的webservice客户端调用webservice服务的步骤如下:

  12. ?????*?1.创建service对象?

  13. ?????*?2.创建url对象?

  14. ?????*?3.创建call对象,

  15. ?????*?4.调用webservice的方法

  16. */

  17. publicstaticvoid?test1()?{?

  18. try?{?

  19. //?1.创建service对象,通过axis自带的类创建

  20. ????????????org.apache.axis.client.Service?service?=?new?org.apache.axis.client.Service();?

  21. //?2.创建url对象

  22. ????????????String?wsdlUrl?=?"http://10.10.146.82:8080/esop_dev/services/GroupInfoService?wsdl";//请求服务的URL?

  23. ????????????URL?url?=?new?URL(wsdlUrl);//通过URL类的构造方法传入wsdlUrl地址创建URL对象

  24. //?2.创建服务方法的调用者对象call,设置call对象的属性

  25. ????????????Call?call?=?(Call)?service.createCall();?

  26. ????????????call.setTargetEndpointAddress(url);//给call对象设置请求的URL属性

  27. ????????????String?serviceName?=?"groupInfo";?

  28. ????????????call.setOperationName(serviceName);//给call对象设置调用方法名属性

  29. ????????????call.addParameter("groupNo",?XMLType.XSD_LONG,?ParameterMode.IN);//?给call对象设置方法的参数名、参数类型、参数模式

  30. ????????????call.setReturnType(XMLType.SOAP_STRING);//?设置调用方法的返回值类型

  31. //4.通过invoke方法调用webservice

  32. long?groupNo?=?2100000014L;?

  33. ????????????String?res?=?(String)?call.invoke(new?Object[]?{?groupNo?});//调用服务方法

  34. ????????????System.out.println(res);?

  35. ????????}?catch?(MalformedURLException?e)?{?

  36. ????????????e.printStackTrace();?

  37. ????????}?catch?(ServiceException?e)?{?

  38. ????????????e.printStackTrace();?

  39. ????????}?catch?(RemoteException?e)?{?

  40. ????????????e.printStackTrace();?

  41. ????????}?

  42. ????}?

  43. publicstaticvoid?main(String[]?args)?{?

  44. ????????test1();?

  45. ????}?

  46. }?

代码中的注释很详细,我就不介绍了。

(2).使用从WSDL生成的存根generated?Stubs?from?Service?WSDL?description

第一步:配置genclient.bat文件

右键单击“编辑”打开bat文件如下(为了便于说明,每行的意思我就直接写在后面了):

set Axis_Lib=E:esoplib -----指定工程的lib目录
set Java_Cmd=java -Djava.ext.dirs=%Axis_Lib% -----默认
set Output_Path=E:esopsrc -----指定工程的src目录
set Package=com.asiainfo.maks.webservices.pbosswebclient -----指定生成的四个文件的存放位置
%Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% -p%Package% ----- 默认http://10.10.146.82:8080/esop_dev/services/GroupInfoService?wsdl -----指定wsdl文件的路径

第二步:用genclient.bat生成四个客户端类

双击编译好的bat文件,执行后生成的四个java类如下:

第三步:写测试类调用webservice

 
 
  1. package?test.webserviceclient;?

  2. import?java.net.MalformedURLException;?

  3. import?java.net.URL;?

  4. import?java.rmi.RemoteException;?

  5. import?javax.xml.rpc.ParameterMode;?

  6. import?javax.xml.rpc.ServiceException;?

  7. import?org.apache.axis.client.Call;?

  8. import?org.apache.axis.encoding.XMLType;?

  9. publicclass?Test?{?

  10. /**

  11. ?????*?通过genClient.bat文件生成的webservice客户端调用webservice服务的步骤如下:

  12. ?????*?先介绍创建的四个文件分别为:

  13. ?????*?IBbossGroupInfoServiceImpl?定义了web服务接口,

  14. ?????*?IBbossGroupInfoServiceImplService?定义了用户获取web服务接口的方法

  15. ?????*?IBbossGroupInfoServiceImplServiceLocator?接口IBbossGroupInfoServiceImplService的具体实现

  16. ?????*?GroupInfoServiceSoapBindingStub?web服务客户端桩,通过该类与服务器交互,该类实现了IBbossGroupInfoServiceImpl接口

  17. ?????*?1.创建service对象?

  18. ?????*?2.创建url对象?

  19. ?????*?3.创建client对象?

  20. ?????*?4.调用webservice的方法

  21. */

  22. publicstaticvoid?test1()?{?

  23. //?1.创建一个service对象

  24. ????????IBbossGroupInfoServiceImplService?service?=?new?IBbossGroupInfoServiceImplServiceLocator();?

  25. try?{?

  26. //?2.创建一个URL对象,传入wsdl的地址够过URL的构造方法创建

  27. ????????????String?wsdlUrl?=?"http://10.10.146.82:8080/esop_dev/services/GroupInfoService?wsdl";?

  28. ????????????URL?url?=?new?URL(wsdlUrl);?

  29. //?3创建一个client对象

  30. ????????????IBbossGroupInfoServiceImpl?client?=?service?

  31. ????????????????????.getGroupInfoService(url);?

  32. //?4调用webservice的方法

  33. long?groupNo?=?2100000014L;?

  34. ????????????String?res?=?client.groupInfo(groupNo);?

  35. ????????????System.out.println(res);?

  36. ????????}?catch?(MalformedURLException?e)?{?

  37. ????????????e.printStackTrace();?

  38. ????????}?catch?(ServiceException?e)?{?

  39. ????????????e.printStackTrace();?

  40. ????????}?catch?(RemoteException?e)?{?

  41. ????????????e.printStackTrace();?

  42. ????????}?

  43. ????}?

  44. publicstaticvoid?main(String[]?args)?{?

  45. ????????test1();?

  46. ????}?

  47. }?

对这种生成客户端四个类的情况我要说明下,还有通过wsdltojava命令的方式生成客户端类,但是这个都是一种通过axis调用webservice的方式,既然有工具我们为什么不用呢?

所以能使用wsdltojava命令的方式,我就不介绍了。

test?result:

代码的测试截图我就不贴了,感兴趣的可以试试看。

《!--好久没有上来活动了,今天写的是最近用到的一个东东,本人也是个菜鸟,刚刚在项目中用到webservice,如果有不对的,请各位大侠指正。--》

原文链接:http://www.cnblogs.com/java-pan/archive/2011/11/25/axis_webservice.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读