基于axis的web service发布及其客户端编写

来源:互联网 发布:八卦洲网络问政 编辑:程序博客网 时间:2024/05/16 07:19

刚刚开始接触web Service,可能有些理解不是很准确,但是学习嘛,有则改之无则加勉,正常。

之前自己只会用在本地自己编写的service,开始学习web service的时候感觉很不理解,真有网站给我们提供这种可供调用的接口吗?(确实有,比如提供天气预报的网站)现在熟悉之后,初步理解了这种SOA架构的模型,对web层又有了新的认识。

首先要在网站上发布service,service的编写分为两部分,一是对java bean以及提供service类的编写,这方面很容易解决,不多赘述。二是对编写的service类进行发布。关于service的发布有不少方法,这里我只介绍较为常用也挺方便的axis2工具发布方法。首先得在eclipse上安装axis2的两个插件,即code Generator和Service Archive。剩下的步骤就是1点击工作空间WorkSpace,右键New选择Other,选择Service Archive

2选择Axis2 Service Archiver,点击Next,然后点击Browser选择你当前的工程的classes目录,没有WSDL,选择第一项,点击Next,然后再Next一次,不用设置service.xml,直接Next。

3 最关键一步,填写WebService的Name,设置class路径点击Load你就可以看到当前class的方法,下面在浏览器中访问这个地址:http://localhost:8080/axis2/,进行web service发布。将aar文件上传即可。

接下来要进行客户端的操作,点击code Generator选项进行生成wsdl文件,当wsdl文件生成之后,运行wsdl2java程序,生成java程序。

其中产生一系列相关的javabean以及XXXStub.java和XXXCallbackHandler.java文件。XXXStub.java文件最为重要,它是一个存根文件,为了防止客户端访问服务器的对象而以某种方式模拟服务器本地的对象。这种对象称为存根,即stub。它负责接收本地方法调用,并将这些调用委派给各自的具体实现对象。从某种程度上说,这又和以前本机进行service调用有了很大的相似之处。对这些从web service上映射下来的java文件进行调用,形式大致如下:

package com.service;

import java.rmi.RemoteException;
import org.apache.axis2.AxisFault;


public class Client {
 public static void main(String[] args) throws RemoteException{
String target = "http://localhost/axis2/services/ManagerUser";
ManagerUserStub stub=new ManagerUserStub(target);
com.service.xsd.User user=new com.service.xsd.User();
user.setAddress("hangzhou");
user.setEmail("yangli@uestc.edu.cn");
user.setId(3);
user.setName("yangli");
EditUser editUser=new EditUser();
editUser.setUser(user);
EditUserResponse eur=stub.editUser(editUser);
user=eur.get_return();
System.out.println(System.getProperty("file.encoding"));
System.out.println("name="+user.getName()+"id="+user.getId());
 }
}


之前发布为web service的java程序为:

package com.service;


public class User {
private static final long serialVersionUID = 677484458789332877L;
private int id;
private String name;
private String email;
private String address;

//getter/setter


public int getId() {
return id;
}


public void setId(int id) {
this.id = id;
}


public String getName() {
return name;
}


public void setName(String name) {
this.name = name;
}


public String getEmail() {
return email;
}


public void setEmail(String email) {
this.email = email;
}


public String getAddress() {
return address;
}


public void setAddress(String address) {
this.address = address;
}

}

以上为javabean;

以下为service:

package com.service;


import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;


import com.service.User;


public class ManagerUser {
public User editUser(User user) {
user.setId(new Random().nextInt(100));
return user;
}

}

值得注意的是,客户端service的调用时针对生成的那些javabean和XXXResponse.java进行的,不要调用自己写的javabean。

原创粉丝点击