基于axis的web service发布及其客户端编写
2013-11-28 18:24
393 查看
刚刚开始接触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。
之前自己只会用在本地自己编写的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。
相关文章推荐
- 基于axis 1.2 的web service 在weblogic 9.2 上发布时的一些问题解决方案
- Web Service开发及axis 的客户端使用
- 基于ABAP Workbench创建并发布Web Service (2)
- 如何用WSDL4J构建Spring+AXIS自动创建的Web service对应客户端
- 基于Maven在Spring中集成CXF,发布Web Service
- 使用Axis发布Web Service
- 基于Web Service的客户端框架搭建三:代理层(Proxy)
- 使用Eclipse的Axis1.4插件开发Web Service及客户端
- 基于JAX-WS和Tomcat的Web Service服务端/客户端
- 基于ABAP Workbench创建并发布Web Service (1)
- 基于Spring的轻量级Web Service事务管理框架及其实现
- 基于Axis服务端的webservice客户端实现
- 使用AXIS生成SOAP Web Service客户端的方法
- 基于Spring的轻量级Web Service事务管理框架及其实现
- JAVA中使用HTTP 1.1提高基于AXIS 1.4的web service的性能
- 发布一个基于newsyc修改的StartupNews的iOS客户端
- axis1.4发布返回复杂类型的webservice服务+代码访问+客户端访问
- 编写Web Service客户端访问www.webxml.com.cn提供的服务
- axis发布webservice客户端
- 基于Web Service的客户端框架搭建一:C#使用Http Post方式传递Json数据字符串调用Web Service