GWT工程的webService Axis2开发
1、axis2简介
WebService被应用在很多不同的场景。例如,可以使用WebService来发布服务端 Java类的方法,以便使用不同的客户端进行调用。这样可以有效地集成多种不同的技术来完成应用系统。即异构系统之间的相互访问。WebService还经常被使用在SOA中,用于 SOA各个部分交换数据。
Axis2是目前比较流行的WebService引擎,该版本是对Axis1.x重新设计的产物。Axis2不仅支持SOAP1.1和SOAP1.2,还集成了非常流行的REST WebService,同时还支持Spring、JSON等技术。
下面将介绍eclipse中web+GWT的java工程的axis2 webservice开发步骤。
2、下载axis2
下载链接: http://axis.apache.org/axis2/java/core/download.html
3、axis2开发步骤
如上图所示,我们通过Ezone_Explorer工程的去访问PortolSystem 工程,此时Ezone_Explorer为客户端,PortolSystem 为服务端。接下来,我们先配置服务端:
3.1 服务端配置
3.1.1 配置web.xml文件
在web.xml文件中加入axis2的servlet配置:
<servlet>
<servlet-name>AxisServlet</servlet-name>
<servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class>
<load-on-startup>3</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
3.1.2 定义服务类
/**用户信息验证*/
public class PortoalWebServiceImpl{
public User identifuAndGetUserInfo(String userName, String password) {
System.out.println("门户系统接收信息,开始进行门户验证:");
//TODO 获取用户id及权限信息,并赋值
User u = new User("", userName, password);
System.out.println("门户验证结束");
return u;
}
}
public class User implements IsSerializable {
private String id;
private String name; //用户的登录用户名
private String password; //用户的密码
public User() { }
public User(String id, String name, String password) {
super();
this.id = id;
this.name = name;
this.password = password;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
3.1.3 创建services文件
在工程的WEB-INF下,创建目录services/conf/META-INF,并在下面新建一个xml文件,文件名为services.xml
,文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<service name="explorer2portolService">
<description>测试explorer访问门户系统</description>
<!-- 设置WebService对应的类名-->
<parameter name="ServiceClass">
com.net.server.PortoalWebServiceImpl
</parameter>
<!-- 指定WebService类的方法 -->
<operation name="identifuAndGetUserInfo">
<messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
</operation>
</service>
3.1.4 验证配置是否成功
- 运行程序:右键工程->run As ->Web Application
- 运行成功后,在浏览器输入地址:
http://127.0.0.1:8899/services/explorer2portolService?wsdl
查看结果:出现wsdl标签及内容则成功
(注意:这里8899是端口号,我这边配置的是8899,可根据实际情况变更)
3.2 客户端配置
3.2.1 配置web.xml文件
在web.xml文件中加入axis2的servlet配置:
<servlet>
<servlet-name>AxisServlet</servlet-name>
<servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class>
<load-on-startup>3</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
3.2.2 开发访问类
/**主工程访问门户系统*/
public class Explorer2PortolWebService {
public User identifyAndGetUserInfo(String userName, String password,String aixweburl){
try {
//指定客户端访问的webservice服务器端地址
EndpointReference targetEPR = new EndpointReference(aixweburl);
//加载目标服务器
RPCServiceClient sender = new RPCServiceClient();
Options options = sender.getOptions();
options.setTimeOutInMilliSeconds(2*20000L);//超时时间20s
options.setTo(targetEPR);
options.setManageSession(true);
options.setProperty(HTTPConstants.REUSE_HTTP_CLIENT,true);
// 指定命名空间, 指定要调用的方法
QName qname = new QName("http://server.net.com", "identifuAndGetUserInfo");
//调用方法的参数创建:要传送的object
Object[] param = new Object[]{userName,password};
// 创建返回的参数类型
Class<?>[] types = new Class[]{User.class};
//调用远程服务,得到返回的object数组
Object[] response1 = sender.invokeBlocking(qname, param, types);
User u = (User)response1[0];
System.out.println(u.getName()+"-"+u.getPassword());
return u;
} catch (AxisFault e) {
System.err.println("接口响应异常:");
e.printStackTrace();
}
return null;
}
/***测试main函数/
public static void main(String[] args) {
Explorer2PortolWebService service = new Explorer2PortolWebService();
service.identifyAndGetUserInfo("路飞", "1111", "http://127.0.0.1:8899/services/explorer2portolService");
}
}
3.2.3 测试连接验证
- 运行程序:右键工程->run As ->Web Application
(两个工程均启动,注意这里两个工程的端口号不能相同) - 运行成功后,在浏览器输入地址:
http://127.0.0.1:端口port/services/服务名称?webservice函数的方法名
例:http://127.0.0.1:8899/services/explorer2portolService?identifuAndGetUserInfo
查看结果:出现标签及内容则成功 - 然后运行3.2.2中的main函数,窗口打印:路飞-1111表示成功