axis2+spring开发webservice服务器端

需求:开发VAC与SP间订购通知接口服务器端(SP端),给定VacSyncService_SPClient.wsdl文件

首先,官网下载axis2-1.6.2-bin.zip和axis2-1.6.2-war.zip
axis2-1.6.2-bin.zip包含axis2的jar包,工具和例子
axis2-1.6.2-war.zip包含了axis2的web应用,发布web服务时,将自己的程序以特定文件结构发布到axis2的web应用的service目录中

1.根据wsdl生成服务器端代码
解压axis2-1.6.2-bin.zip, cmd命令行进入到axis2-1.6.2bin:

1
cd D:axis2axis2-1.6.2bin

假设wsdl文件存放于D盘根目录,将服务器端代码生成到D:gen_code目录:

1
WSDL2Java -uri D:VacSyncService_SPClient.wsdl -p com.example -s -ss -sd -ssi -o d:gen_code

参数说明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  -o : 指定生成代码的输出路径
  -a : 生成异步模式的代码
  -s : 生成同步模式的代码
  -p : 指定代码的package名称
  -l : 使用的语言(Java/C) 默认是java
  -t : 为代码生成测试用例
  -ss : 生成服务端代码 默认不生成
  -sd : 生成服务描述文件 services.xml,仅与-ss一同使用
  -d : 指定databingding,例如,adb,xmlbean,jibx,jaxme and jaxbri
  -g : 生成服务端和客户端的代码
  -pn : 当WSDL中有多个port时,指定其中一个port
  -sn : 选择WSDL中的一个service
  -u : 展开data-binding的类
  -r : 为代码生成指定一个repository
  -ssi : 为服务端实现代码生成接口类
  -S : 为生成的源码指定存储路径
  -R : 为生成的resources指定存储路径
  --noBuildXML : 输出中不生成build.xml文件
  --noWSDL : 在resources目录中不生成WSDL文件
  --noMessageReceiver : 不生成MessageReceiver类

cmd里执行如上命令之后,d:gen_code会生成如下文件:
/gen_code
/gen_code/resources
/gen_code/resources/services.xml
/gen_code/resources/SyncNotifySPServiceService.wsdl
/gen_code/src
/gen_code/build.xml

2.根据wsdl生成客户端代码
cmd命令行进入到axis2-1.6.2bin:

1
WSDL2Java -uri D:myWebService.wsdl -o d:ws_client

使用:在代码中调用刚刚生成的以Stub结尾的类,可以测试服务器端

3.新建maven web项目
项目的spring配置略…
pom.xml需要添加axis2的依赖
[code lang=”xml”]

org.apache.axis2
axis2-kernel
1.6.2


org.apache.axis2
axis2-adb
1.6.2


org.apache.axis2
axis2-transport-http
1.6.2


org.apache.axis2
axis2-jaxws
1.6.2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

将axis2-1.6.2-war.zip中的war包解压,解压后WEB-INF下的conf,modules,services复制到项目的WEB-INF下
web.xml中的内容复制到web项目的web.xml中,要复制的内容:
[code lang="xml"]

AxisServlet
org.apache.axis2.transport.http.AxisServlet










1


AxisServlet
/servlet/AxisServlet


AxisServlet
*.jws


AxisServlet
/services/*

将生成的服务器端和客户端代码复制到项目中,服务器端代码中以Skeleton结尾的类需要修改并添加业务逻辑代码
此类的spring配置
[code lang=”xml”]


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

在web项目的WEB-INF/services目录下建立自己的webservice目录,如下:
WEB-INF/services/MyWebservice
WEB-INF/services/MyWebservice/META-INF
WEB-INF/services/MyWebservice/META-INF/services.xml

其中的services.xml为之前已生成的/gen_code/resources/services.xml
services.xml内容
[code lang="xml"]








com.bjhrrh.vac.syncservice.SyncNotifySPServiceServiceSkeleton
true
true

http://soap.bossagent.vac.unicom.com/SyncNotifySPService/orderRelationUpdateNotifyRequest
http://soap.bossagent.vac.unicom.com/SyncNotifySPService/orderRelationUpdateNotifyResponse



修改services.xml为
[code lang=”xml” highlight=”10,11”]







com.bjhrrh.vac.syncservice.SyncNotifySPServiceServiceSkeleton
syncNotifySPServiceServiceSkeleton
false
true

http://soap.bossagent.vac.unicom.com/SyncNotifySPService/orderRelationUpdateNotifyRequest
http://soap.bossagent.vac.unicom.com/SyncNotifySPService/orderRelationUpdateNotifyResponse



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
SpringBeanName的值与spring中配置的bean一致
useOriginalwsdl设置为false时,由axis2生成wsdl文件

**4.测试代码**
```java
public class Test {
static SyncNotifySPServiceServiceStub service;

static {
try {
service = new SyncNotifySPServiceServiceStub("http://localhost:8080/vacsyncservice/services/SyncNotifySPServiceService");
} catch (AxisFault e) {
e.printStackTrace();
}
}

public static void main(String[] args) throws RemoteException {
System.out.println("begin...");
OrderRelationUpdateNotify orderRelationUpdateNotify = new OrderRelationUpdateNotify();
OrderRelationUpdateNotifyRequest param = new OrderRelationUpdateNotifyRequest();
orderRelationUpdateNotify.setOrderRelationUpdateNotifyRequest(param);
OrderRelationUpdateNotifyResponseE respE = service.orderRelationUpdateNotify(orderRelationUpdateNotify);
OrderRelationUpdateNotifyResponse resp = respE.getOrderRelationUpdateNotifyReturn();
System.out.println("ResultCode:" + resp.getResultCode());
}
}

原文:大专栏  axis2+spring开发webservice服务器端


你可能感兴趣的:(axis2+spring开发webservice服务器端)