本文主要是介绍Web Service之AXIS传递javabean,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
应用web service传递java bean 才是它真正的价值所在。
最理想的是返回值是自定义的java类(支持序列化)
开发一个简单的,返回单个对象Webservice的编写
先编写服务器端,写一个自定义的java类
写一个Order.java。代码如下:
import java.io.Serializable;
//自定义类
publicclassOrder implements Serializable{
private String id ;
private String name ;
public String getId() {
returnid;
}
publicvoid setId(String id) {
this.id = id;
}
public String getName() {
returnname;
}
publicvoid setName(String name) {
this.name = name;
}
}
OrderService.java类:
publicclassOrderService {
public Order returnOrder(Orderorder){
//类似临时变量对象
OrdernewOrder = newOrder() ;
/*
* 使用自定义java类
* 将自定义的java类的类型在webservice的配置文件中,
* 进行描述
* */
if(order.getId().equals("1")){
newOrder.setName("Cat") ;
}else{
newOrder.setName("Tom") ;
}
return newOrder;
}
}
把class文件放到tomcat的axis里面中,和上次类似。
再次修改server-config.wsdd文件。
修改service元素:
<service name="OrderService"provider="java:RPC">
<parametername="className" value="com.webservice.anni.OrderService"/>
<parametername="allowedMethods" value="returnOrder" />
<beanMappinglanguageSpecificType="java:com.webservice.anni.Order"qname="ns1:Order" xmlns:ns1="BeanService"/>
</service>
如果在类中使用了内部类:要使用静态内部类,只有静态才能序列化。
在修改service元素后,启动tomcat报出了一大堆异常,后来才知道前一个ns1写成了nsl,与后一个不相同了。这两个一定要相同!
接着在客户端编写程序了。OrderClient.java
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.ser.BeanDeserializerFactory;
import org.apache.axis.encoding.ser.BeanSerializerFactory;
publicclassOrderClient {
publicstaticvoid main(String[] args) throws Exception {
//调用的ws的方法,返回值是java Object对象,要求在客户端必须创建java类型
Orderorder = newOrder() ;
order.setId("1") ; //创建了发送的参数
//创建Ws连接服务
Stringurl = "http://localhost:8089/axis/services/OrderService" ;
Serviceservice = newService() ;
Callcall = (Call) service.createCall() ;
//注册JavaBean(注意:和server-config.wsdd编写内容一致)
QNameqn = newQName("urn:BeanService","Order");
call.registerTypeMapping(Order.class, qn, newBeanSerializerFactory(Order.class, qn), newBeanDeserializerFactory(Order.class,qn)) ;
Stringname = "no !";
//创建调用
call.setTargetEndpointAddress(new URL(url)) ;
//调用服务器的方法
call.setOperationName(new QName("order","returnOrder"));
//设定传入的参数
call.addParameter("arg1", qn,ParameterMode.IN);
//设置返回的类型
call.setReturnType(qn,Order.class) ;
//接收结果
Orderresult = (Order) call.invoke(new Object[]{order}) ;
if(result != null){
name= result.getName() ;
}
System.out.println(name);
}
}
运行结果出现了“no !”,调试半天都发现不了问题。最后在OrderService类中出现return的值是null了。真是粗心啊!
这篇关于Web Service之AXIS传递javabean的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!