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

axis 开发webservice

发布时间:2020-12-16 23:22:34 所属栏目:安全 来源:网络整理
导读:摘要:本节主要用于介绍使用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
3 import java.rmi.RemoteException;
4
5 public interface IBbossGroupInfoService {
6
7 // 根据集团编号查询集团基本信息
8 /** 9 * 集团编号 GROUP_NUM 集团名称 GROUP_NAME 公司地址 CO_ADDR 集团状态 GROUP_STATE 集团开户时间
10 * START_TIME 传真 FAX 企业网址 WEB_URL 证件类型 CARD_TYPE 证件号码 CARD_CODE
11 * 公司邮编CO_POSTCODE 联系电话 TEL_NUM 法人代表名称 PERSON_NAME 发展类型 DEVELOP_TYPE
12 * 地区编码REGION_ID regionId
13 *
14 * @throws Exception
15 */
16 abstract String groupInfo(long groupNo) throws Exception,
17 RemoteException;
18
19 根据集团编号查询集团订购历史20 abstract String groupSubHistoryInfo(throws Exception;
21
22 }

复制代码

?实现类:IBbossGroupInfoServiceImpl.java

复制代码

package com.asiainfo.b2p.soap.impl;
import org.apache.commons.logging.Log;
4 import org.apache.commons.logging.LogFactory;
import com.asiainfo.b2p.soap.interfaces.IBbossGroupInfoService;
7 8 * @Product esop_dev
* @FileName IBbossGroupInfoServiceImpl.java
* @History TODO 根据集团编号,查询集团基本信息、集团用户信息、集团订购历史
* @Version 1.0.0
* @Date Nov 22,2011
* @Author pantaipeng
* @Content 最初版本
16 class IBbossGroupInfoServiceImpl implements IBbossGroupInfoService {
17 private static transient Log log = LogFactory
18 .getLog(IBbossGroupInfoServiceImpl.class);
19
20
21 22 public String groupInfo(23 log.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>集团编号=" + groupNo);
24 方法体我省略了,为了测试我仅加入一句打印语句25 System.out.println("我是一个公共的方法,作用是根据集团编号查询集团基本信息");
26 String xml="<message>public_groupInfo</message>";为了测试,返回的信息我也是随便写的一个字符串27 return xml;
28 }
29
30 31 public String groupSubHistoryInfo(throws Exception {
32
33 log.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>集团编号=" + groupNo);
34 35 System.out.println("我是一个公共的方法,作用是根据集团编号查询集团订购历史");
36 String xml="<message>public_groupSubHistoryInfo</message>";37 38 }
39 }

复制代码

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

(2)wsdd文件

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

1 <service name="GroupInfoService" type=""  provider="java:RPC">
2 <parameter name="className" value="com.asiainfo.b2p.soap.impl.IBbossGroupInfoServiceImpl" ></parameter>
3 <parameter name="allowedMethods" value="*"/>
4 </service>

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

(3)配置web.xml文件

复制代码

1   <servlet>
2 servlet-name>AxisServlet</3 display-name>Apache-Axis Servlet4 servlet-class>org.apache.axis.transport.http.AxisServlet5 6 servlet-mapping7 8 url-pattern>/services/*9 >

复制代码

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

第二步:客户端的开发

(1).动态调用接口

代码如下:

复制代码

package test.webserviceclient;
import java.net.MalformedURLException;
import java.net.URL;
6 import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.ServiceException;
import org.apache.axis.client.Call;
import org.apache.axis.encoding.XMLType;
10
class Test {
12 * 通过genClient.bat文件生成的webservice客户端调用webservice服务的步骤如下:
* 1.创建service对象
* 2.创建url对象
* 3.创建call对象,
17 * 4.调用webservice的方法
18 void test1() {
20 try {
21 1.创建service对象,通过axis自带的类创建22 org.apache.axis.client.Service service = new org.apache.axis.client.Service();
23
24 2.创建url对象25 String wsdlUrl = "http://10.10.146.82:8080/esop_dev/services/GroupInfoService?wsdl";请求服务的URL26 URL url = new URL(wsdlUrl);通过URL类的构造方法传入wsdlUrl地址创建URL对象
27 28 2.创建服务方法的调用者对象call,设置call对象的属性29 Call call = (Call) service.createCall();
30 call.setTargetEndpointAddress(url);给call对象设置请求的URL属性31 String serviceName = "groupInfo";
32 call.setOperationName(serviceName);给call对象设置调用方法名属性33 call.addParameter("groupNo",XMLType.XSD_LONG,ParameterMode.IN); 给call对象设置方法的参数名、参数类型、参数模式34 call.setReturnType(XMLType.SOAP_STRING); 设置调用方法的返回值类型
35 36 4.通过invoke方法调用webservice37 long groupNo = 2100000014L;
38 String res = (String) call.invoke(new Object[] { groupNo });调用服务方法39 System.out.println(res);
40 } catch (MalformedURLException e) {
41 e.printStackTrace();
42 } catch (ServiceException e) {
43 e.printStackTrace();
44 } catch (RemoteException e) {
45 e.printStackTrace();
46 }
47 }
48
49 void main(String[] args) {
50 test1();
51 }
52
53 }

复制代码

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

(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

复制代码

     * 先介绍创建的四个文件分别为:
* IBbossGroupInfoServiceImpl 定义了web服务接口,
* IBbossGroupInfoServiceImplService 定义了用户获取web服务接口的方法
* IBbossGroupInfoServiceImplServiceLocator 接口IBbossGroupInfoServiceImplService的具体实现
* GroupInfoServiceSoapBindingStub web服务客户端桩,通过该类与服务器交互,该类实现了IBbossGroupInfoServiceImpl接口
19 20 21 * 3.创建client对象
22 23 24 25 1.创建一个service对象26 IBbossGroupInfoServiceImplService service = new IBbossGroupInfoServiceImplServiceLocator();
27
28 29 2.创建一个URL对象,传入wsdl的地址够过URL的构造方法创建30 String wsdlUrl = "http://10.10.146.82:8080/esop_dev/services/GroupInfoService?wsdl";
31 URL url = new URL(wsdlUrl);
33 3创建一个client对象34 IBbossGroupInfoServiceImpl client = service
35 .getGroupInfoService(url);
36
4调用webservice的方法38 39 String res = client.groupInfo(groupNo);
40
41 System.out.println(res);
42
43 } 44 e.printStackTrace();
45 } 46 e.printStackTrace();
47 } 48 e.printStackTrace();
49 }
50
53 54 test1();
55 }
56
57 }

复制代码

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

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

test result:

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

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

(编辑:李大同)

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

    推荐文章
      热点阅读