好文档 - 专业文书写作范文服务资料分享网站

axis+webservice教程

天下 分享 时间: 加入收藏 我要投稿 点赞

利用AXIS开发Webservice(三) —— 如何传递javabean和你的对象

在第一篇介绍Axis的文章里,我们做了一个简单的webservice,我们client side传递了String和int类型的数据给service object。Service处理之后返回处理结果给Client。对于大多数需求,那个demo显然已经足够应付了。但是如果client端需要传输一个对象给server,那么那个demo就显得力不从心了。Axis中提供了远程传输对象的方法,通过那些方法我们同样可以随心的传递自己的对象。

我们先从传递一个JavaBean开始,首先编写一个JavaBean。

Java代码

package com.chnic.bean;

public class OrderBean { private String name; private int age;

private String[] items; private int[] price;

private boolean checked;

public OrderBean() { }

public int getAge() { return age; }

public void setAge(int age) { this.age = age; }

public boolean isChecked() { return checked; }

public void setChecked(boolean checked) { this.checked = checked; }

public String[] getItems() { return items; }

public void setItems(String[] items) {

this.items = items; }

public String getName() { return name; }

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

public int[] getPrice() { return price; }

public void setPrice(int[] price) { this.price = price; } }

这个JavaBean的前4个属性都很清楚,要解释一下最后一个。因为这个JavaBean被传递到Service端处理之后要接着被传回,用来示例webservce传进和传出。这个变量用来区别传进和传出的差别。解释完我们来看下service

Java代码

package com.chnic.webservice;

import com.chnic.bean.OrderBean;

public class AnalyzeOrder {

public AnalyzeOrder(){ }

public OrderBean process(OrderBean order){ order.setChecked(true);

System.out.println(\ for(int i=0; i

System.out.println(\ \ return order; } }

Service Object的代码很简单,就不解释了。惯例,我们来编写发布文件。 Xml代码

xmlns:java=\

唯一不同的就是多了这个节点。qname 表示 XML 规范中定义的限定名称,他由名称空间 URI、本地部分和前缀组成。除了本地部分其他都不是必须的,另外QName是不可变的。xmlns后面的myNS是必须的。具体根据前面所指定的qname来决定。之后可以随意命名一个namespace。最后的languageSpecificType指定的是你传递的对象类型。第一个属性的本地部分和第二个节点你自定义的命名空间会组成一个新的QName,并将你要传输的对象mapping是上去。

发布这个webservice,编写测试代码

Java代码

String targetEendPoint = \

OrderBean order = new OrderBean(); order.setName(\ order.setAge(32);

String [] items = new String[] { \ int [] price = new int [] { 999, 5000 }; order.setItems(items); order.setPrice(price); order.setChecked(false);

System.out.println(order.isChecked());

Service service = new Service(); Call call = (Call) service.createCall();

QName qn = new QName(\ call.registerTypeMapping(OrderBean.class, qn,

new org.apache.axis.encoding.ser.BeanSerializerFactory(OrderBean.class, qn), new org.apache.axis.encoding.ser.BeanDeserializerFactory(OrderBean.class, qn));

call.setTargetEndpointAddress( new java.net.URL(targetEendPoint) ); call.setOperationName( new QName(\ call.addParameter( \ call.setReturnClass(OrderBean.class);

OrderBean result = (OrderBean) call.invoke( new Object[] {order} );

System.out.println(\ System.out.println(result.isChecked())

从控制台输出一些信息以便测试,里面大多代码都应该见过。new QName和之后的registerTypeMapping方法也是在实现我上面那段黑体字的内容。之后注册完参数和返回值类型运行。

会发现在tomcat控制台和本地控制台都会输出测试结果,值得注意的是checked这个属性在传入之前是false属性,传入之后我们改变了他的属性变为true。返回之后在本地控制台打印出来也为true。

事实上Axis除了可以传输JavaBean之外还可以传输一些自定义的类型。比如List、Map和时间日期类型。Axis也为他们提供了专门的SerializerFactory和DeserializerFactory。这些工厂类会产生串行化工具去序列化相应的对象。更多的Factory Object可以在org.apache.axis.encoding.ser下面找到。

对于自定义序列化,Axis也提供了相对性的配置节点。具体配置如下:

Xml代码

deserializer=\

encodingStyle=\

typeMapping的前三个属性和上面讲的beanMapping都一样。不一样的是后三个。serializer指定的是串行化类,dserializer指定的是反串行化类。最后一个指定的编码方式。其实对于typeMapping来说beanMapping只不过是他的一个简化版而已。因为beanMapping的串行化和反串行化工厂类都是固定的,而编码方式也是固定的。

因为typemapping和beanMapping很相似,在这里就不再写demo了。 有些人也许会问,既然能串行化对象那能不能“串行化”文件呢?

利用AXIS开发Webservice(四) —— 如何抛出自定义异常

上一篇介绍了如果在Server和Client端传递一个自己的对象。有些人也许会问传递异常行不行?答案是可以。只不过传递异常的配置要稍微复杂一些。空口无凭,我还是用点代码来说明。今天的例子稍微复杂点,用一下数据库(MySQL)。首先创建表和输入测试数据。

Sql代码

create table users(id integer primary key, name varchar(20) not null);

insert into users values(1, 'Lincoln'),(2, 'Michael'),(4, 'Mahone'),(6, 'Sara');

一个user表,4条记录。等会我们client段会发送一个SOAP request给server段,之后server段返回客户要的数据,如果没有则抛出一个自定义异常。表建立完成之后来编写JavaBean。

Java代码

package com.chnic.bean;

public class UserBean implements java.io.Serializable{

private static final long serialVersionUID = 1L; private int id;

private String name;

public UserBean(){ }

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; } }

Bean有两个属性,Id和Name。client会根据ID来取要的Name。编写完Bean之后我们来

axis+webservice教程

利用AXIS开发Webservice(三)——如何传递javabean和你的对象在第一篇介绍Axis的文章里,我们做了一个简单的webservice,我们clientside传递了String和int类型的数据给serviceobject。Service处理之后返回处理结果给Client。对于大多数需求,那个demo显然已经足够应付了。但是如果client端需要传输一
推荐度:
点击下载文档文档为doc格式
1zuqb7qnnb9acj39pw6l
领取福利

微信扫码领取福利

微信扫码分享