看了网上给的一些资料,写了一个SOA的服务端和客户端,传递的是javabean对象,用的是Axis
不用手动生成stub文件,感觉比较简单点。
1、服务端代码,很简单,很普通
package cn.cnic.sdc.jenva.soa.axis2;
import java.util.HashMap;
import java.util.Vector;
public class OrderService {
public Order returnOrder(Order order){
Order newOrder = new Order();
if(order.getId().equals("1")){
newOrder.setName("ronghao");
} else{
newOrder.setName(order.getName());
}
return newOrder;
}
/*
public HashMap<Integer, String> returnPeople(Vector<People> v){
HashMap<Integer, String> hm = new HashMap<Integer, String>();;
for (int i=0; i<v.size();i++){
hm.put(v.get(i).getId(),v.get(i).getName());
}
return hm;
}
*/
}
2、客户端代码
package cn.cnic.sdc.jenva.soa.axis2;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import java.util.ArrayList;
import javax.xml.namespace.QName;
import javax.xml.*;
import java.net.MalformedURLException;
import java.rmi.RemoteException;
import java.util.ArrayList;
import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.ServiceException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import org.apache.axis.encoding.ser.BeanDeserializerFactory;
import org.apache.axis.encoding.ser.BeanSerializerFactory;
public class OrderClient
{
public static void main(String args[])
throws Exception
{
//服务所在位置
String endpoint = "http://localhost:8080/AixswithParam3/services/OrderService";
Order order=new Order(); //JavaBean
order.setId("1");
order.setName("Jenva2");
Service service = new Service();
Call call = (Call)service.createCall();
//注册JavaBean,注意和server-config.wsdd中的配置代码比较
QName qn = new QName("urn:BeanService", "Order");
call.registerTypeMapping(Order.class, qn, new BeanSerializerFactory(Order.class, qn),
new BeanDeserializerFactory(Order.class, qn));
String name="hi!";
try
{
call.setTargetEndpointAddress(new java.net.URL(endpoint));
//调用的服务器端方法
call.setOperationName(new QName("Order", "returnOrder"));
//设定传入的参数,这里qn即Order.class
call.addParameter("arg1", qn, ParameterMode.IN);
//设定返回的参数是Order.class
call.setReturnType(qn, Order.class);
Order result = (Order)call.invoke(new Object[] {order});
if(result != null)
name = result.getName();
}
catch(Exception e)
{
System.err.println(e);
}
System.out.println(name);
}
}
3、需要6个支持的jar文件
E:/eclipse/plugins/org.apache.axis_1.4.0.v200807230600/lib/axis.jar
E:/eclipse/plugins/org.apache.commons.discovery_0.2.0.v200806030120/lib/commons-discovery-0.2.jar
E:/eclipse/plugins/javax.xml.soap_1.2.0.v200806030421/lib/saaj.jar
E:/eclipse/plugins/javax.xml.rpc_1.1.0.v200806030420/lib/jaxrpc.jar
E:/eclipse/plugins/javax.wsdl_1.5.1.v200806030408.jar
E:/eclipse/plugins/org.apache.commons.logging_1.0.4.v20080605-1930.jar