CXF开发Webservice客户端服务端

页面效果(还待完善)

 业务功能

用户下订单(客户端)(可能是多个)把订单重组后(服务端),供客户端调用并展示

1先搭建CXF 环境

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:jaxws="http://cxf.apache.org/jaxws"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
 http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
 http://www.springframework.org/schema/aop
 http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
 http://cxf.apache.org/jaxws
 http://cxf.apache.org/schemas/jaxws.xsd"
	default-autowire="byName">
	<!-- 导入CXF的内置Bean -->
	<import resource="classpath:META-INF/cxf/cxf.xml" />
	<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
	<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
	<!-- 服务终端 -->
	<jaxws:endpoint id="test"
		implementor="com.thd2000.coccrm.test.webservice.TestDemoImpl"
		address="/TestDemo" />
	<!-- 客户端登录 -->	
	<bean id="memberlogin"
		class="com.thd2000.coccrm.service.ws.MemberLoginImpl">
		<property name="tbMemberUsersDao" ref="tbMemberUsersDao"></property>
		<property name="tbMembermgtDao" ref="tbMembermgtDao"></property>
	</bean>
	<jaxws:endpoint id="memberloginService"
		implementor="#memberlogin" address="/MemberLogin"/>
	<!-- 客户端修改密码 -->	
	<bean id="modifypassword"
		class="com.thd2000.coccrm.service.ws.ModifyMemberPasswordImpl">
		<property name="tbMemberUsersDao" ref="tbMemberUsersDao"></property>
	</bean>
	<jaxws:endpoint id="modifypasswordService"
		implementor="#modifypassword" address="/ModifyPassword"/>
	<!-- 客户端订单信息展现 -->	
	<bean id="memberOrderList"
		class="com.thd2000.coccrm.service.ws.MemberOrderListImpl">
		<property name="tbMemberUsersDao" ref="tbMemberUsersDao"></property>
		<property name="tbMembermgtDao" ref="tbMembermgtDao"></property>
		<property name="tbMemberDao" ref="tbMemberDao"></property>
		<property name="tbOrderDao" ref="tbOrderDao"></property>
	</bean>
	<jaxws:endpoint id="memberOrderListService"
		implementor="#memberOrderList" address="/MemberOrderList"/>

</beans>

 

2服务端接口

 

package com.thd2000.coccrm.service.ws;

import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;

@WebService
public interface MemberOrderList {

	
	@WebResult(name="String")
	public String getMemberOrderList(@WebParam(name = "memberuserid")String memberuserid) throws Exception ;
}

3 服务端接口实现类
package com.thd2000.coccrm.service.ws;

import java.util.Set;

import javax.jws.WebService;
import com.thd2000.coccrm.dao.tbmember.TbMemberDao;
import com.thd2000.coccrm.dao.tbmembermgt.TbMembermgtDao;
import com.thd2000.coccrm.dao.tbmemberusers.TbMemberUsersDao;
import com.thd2000.coccrm.dao.tborder.TbOrderDao;
import com.thd2000.coccrm.model.TbMember;
import com.thd2000.coccrm.model.TbMemberUsers;
import com.thd2000.coccrm.model.TbMembermgt;
import com.thd2000.coccrm.model.TbOrder;
import com.thd2000.coccrm.util.DateUtil;


@WebService
public class MemberOrderListImpl implements MemberOrderList {
	
	private TbMemberUsersDao tbMemberUsersDao ;
	private TbMembermgtDao tbMembermgtDao;	
	private TbMemberDao tbMemberDao;	
	private TbOrderDao tbOrderDao ;


	public String getMemberOrderList(String memberuserid) throws Exception {
		//第一步  通过会员用户主键ID获得会员用户对象
		TbMemberUsers tbMemberUsers = (TbMemberUsers) tbMemberUsersDao.get(TbMemberUsers.class, memberuserid);
		//第二步 通过会员用户获得会员主表对象
		TbMembermgt tbMembermgt = tbMemberUsers.getTbMembermgt();
		//第三步 通过会员主表获得会员明细集合(Set)
		Set<TbMember> tbMemberSet = tbMembermgt.getTbMemberSet();
		//第四步 在会员明细集合中需要获得每个会员对应的订单集合 同时需要重新组装一个订单集合
		if (tbMemberSet != null && tbMemberSet.size() > 0) {
			for (TbMember tbMember : tbMemberSet) {
				if (tbMember != null) {
					//遍历会员中的订单集合
					Set<TbOrder> tbOrderSet = tbMember.getOrders();
					//遍历订单集合中的字段
					StringBuilder xmlResult=new StringBuilder("<?xml version='1.0' encoding='UTF-8'?>");
//增加<ORDERS>作为一级根节点,因为< ORDER >可能有多个,程序无法找到根节点 同时使用i 变量区分不同的节点,避免使用for循环 或迭代循环,引发的性能问题
					xmlResult.append("<ORDERS>");
					int i = 1;
					for(TbOrder tbOrder :tbOrderSet) {	
						String orderid = tbOrder.getOrderid();
						String ordercode = tbOrder.getOrdercode();
						String ordername = tbOrder.getOrderName();
						String placeorganplace = tbMember.getTsOrganizationplace().getOrganname();
						String createdate = DateUtil.format(tbOrder.getCreatedate(), "yyyy-MM-dd");
						String ispaymoney = tbOrder.getIspaymoney();//1已缴费0未缴费

						xmlResult.append("<ORDER"+ i +">");
						xmlResult.append("<Orderid>" + orderid + "</Orderid>");
						xmlResult.append("<Ordercode>" + ordercode + "</Ordercode>");
						xmlResult.append("<Ordername>" + ordername + "</Ordername>");
						xmlResult.append("<Placeorganplace>" + placeorganplace + "</Placeorganplace>");
						xmlResult.append("<Createdate>" + createdate + "</Createdate>");
						if ("1".equals(ispaymoney)) {
							xmlResult.append("<Ispaymoney>已缴费</Ispaymoney>");
						}else if ("0".equals(ispaymoney)) {
							xmlResult.append("<Ispaymoney>未缴费</Ispaymoney>");
						}
						xmlResult.append("</ORDER"+ i +">");
						i++;
					}
					xmlResult.append("</ORDERS>");
					return xmlResult.toString();
				}
			}
		}
		return "orderlist";
	}
		
	

	public TbMemberUsersDao getTbMemberUsersDao() {
		return tbMemberUsersDao;
	}

	public void setTbMemberUsersDao(TbMemberUsersDao tbMemberUsersDao) {
		this.tbMemberUsersDao = tbMemberUsersDao;
	}

	public TbMembermgtDao getTbMembermgtDao() {
		return tbMembermgtDao;
	}

	public void setTbMembermgtDao(TbMembermgtDao tbMembermgtDao) {
		this.tbMembermgtDao = tbMembermgtDao;
	}

	public TbMemberDao getTbMemberDao() {
		return tbMemberDao;
	}

	public void setTbMemberDao(TbMemberDao tbMemberDao) {
		this.tbMemberDao = tbMemberDao;
	}

	public TbOrderDao getTbOrderDao() {
		return tbOrderDao;
	}

	public void setTbOrderDao(TbOrderDao tbOrderDao) {
		this.tbOrderDao = tbOrderDao;
	}

}

 3服务端接口实现类

package com.thd2000.coccrm.service.ws;

import java.util.Set;

import javax.jws.WebService;
import com.thd2000.coccrm.dao.tbmember.TbMemberDao;
import com.thd2000.coccrm.dao.tbmembermgt.TbMembermgtDao;
import com.thd2000.coccrm.dao.tbmemberusers.TbMemberUsersDao;
import com.thd2000.coccrm.dao.tborder.TbOrderDao;
import com.thd2000.coccrm.model.TbMember;
import com.thd2000.coccrm.model.TbMemberUsers;
import com.thd2000.coccrm.model.TbMembermgt;
import com.thd2000.coccrm.model.TbOrder;
import com.thd2000.coccrm.util.DateUtil;


@WebService
public class MemberOrderListImpl implements MemberOrderList {
	
	private TbMemberUsersDao tbMemberUsersDao ;
	private TbMembermgtDao tbMembermgtDao;	
	private TbMemberDao tbMemberDao;	
	private TbOrderDao tbOrderDao ;


	public String getMemberOrderList(String memberuserid) throws Exception {
		//第一步  通过会员用户主键ID获得会员用户对象
		TbMemberUsers tbMemberUsers = (TbMemberUsers) tbMemberUsersDao.get(TbMemberUsers.class, memberuserid);
		//第二步 通过会员用户获得会员主表对象
		TbMembermgt tbMembermgt = tbMemberUsers.getTbMembermgt();
		//第三步 通过会员主表获得会员明细集合(Set)
		Set<TbMember> tbMemberSet = tbMembermgt.getTbMemberSet();
		//第四步 在会员明细集合中需要获得每个会员对应的订单集合 同时需要重新组装一个订单集合
		if (tbMemberSet != null && tbMemberSet.size() > 0) {
			for (TbMember tbMember : tbMemberSet) {
				if (tbMember != null) {
					//遍历会员中的订单集合
					Set<TbOrder> tbOrderSet = tbMember.getOrders();
					//遍历订单集合中的字段
					StringBuilder xmlResult=new StringBuilder("<?xml version='1.0' encoding='UTF-8'?>");
//增加<ORDERS>作为一级根节点,因为< ORDER >可能有多个,程序无法找到根节点 同时使用i 变量区分不同的节点,避免使用for循环 或迭代循环,引发的性能问题
					xmlResult.append("<ORDERS>");
					int i = 1;
					for(TbOrder tbOrder :tbOrderSet) {	
						String orderid = tbOrder.getOrderid();
						String ordercode = tbOrder.getOrdercode();
						String ordername = tbOrder.getOrderName();
						String placeorganplace = tbMember.getTsOrganizationplace().getOrganname();
						String createdate = DateUtil.format(tbOrder.getCreatedate(), "yyyy-MM-dd");
						String ispaymoney = tbOrder.getIspaymoney();//1已缴费0未缴费

						xmlResult.append("<ORDER"+ i +">");
						xmlResult.append("<Orderid>" + orderid + "</Orderid>");
						xmlResult.append("<Ordercode>" + ordercode + "</Ordercode>");
						xmlResult.append("<Ordername>" + ordername + "</Ordername>");
						xmlResult.append("<Placeorganplace>" + placeorganplace + "</Placeorganplace>");
						xmlResult.append("<Createdate>" + createdate + "</Createdate>");
						if ("1".equals(ispaymoney)) {
							xmlResult.append("<Ispaymoney>已缴费</Ispaymoney>");
						}else if ("0".equals(ispaymoney)) {
							xmlResult.append("<Ispaymoney>未缴费</Ispaymoney>");
						}
						xmlResult.append("</ORDER"+ i +">");
						i++;
					}
					xmlResult.append("</ORDERS>");
					return xmlResult.toString();
				}
			}
		}
		return "orderlist";
	}
		
	

	public TbMemberUsersDao getTbMemberUsersDao() {
		return tbMemberUsersDao;
	}

	public void setTbMemberUsersDao(TbMemberUsersDao tbMemberUsersDao) {
		this.tbMemberUsersDao = tbMemberUsersDao;
	}

	public TbMembermgtDao getTbMembermgtDao() {
		return tbMembermgtDao;
	}

	public void setTbMembermgtDao(TbMembermgtDao tbMembermgtDao) {
		this.tbMembermgtDao = tbMembermgtDao;
	}

	public TbMemberDao getTbMemberDao() {
		return tbMemberDao;
	}

	public void setTbMemberDao(TbMemberDao tbMemberDao) {
		this.tbMemberDao = tbMemberDao;
	}

	public TbOrderDao getTbOrderDao() {
		return tbOrderDao;
	}

	public void setTbOrderDao(TbOrderDao tbOrderDao) {
		this.tbOrderDao = tbOrderDao;
	}

}

 

4.客户端JavaBean (根据所需要的字段重组实体类) 之前还把服务端的JavaBean引到客户端写,完全没必要,客户端根据所需字段重组JavaBean,此时客户端JavaBean就是个临时的JavaBean容器

 

package com.hzfy.jtjyt.jtwz.pojo;


public class TbOrder implements java.io.Serializable {

	private static final long serialVersionUID = -6312605219384298844L;
	// Fields
	/** 订单主键ID */
	private String orderid;
	/** 订单编号 */
	private String ordercode;
	/** 订单名称 */
	private String ordername;
	

	/** 所属园所  */
	private String organplacename;
	/** 创建日期 */
	private String createdate;
	/** 是否缴费(1已缴费0未缴费) */
	private String ispaymoney;
	
	public String getOrderid() {
		return orderid;
	}
	
	public void setOrderid(String orderid) {
		this.orderid = orderid;
	}
	public String getOrdercode() {
		return ordercode;
	}
	public void setOrdercode(String ordercode) {
		this.ordercode = ordercode;
	}
	
	
	public String getOrdername() {
		return ordername;
	}

	public void setOrdername(String ordername) {
		this.ordername = ordername;
	}

	public String getOrganplacename() {
		return organplacename;
	}
	public void setOrganplacename(String organplacename) {
		this.organplacename = organplacename;
	}
	

	public String getCreatedate() {
		return createdate;
	}

	public void setCreatedate(String createdate) {
		this.createdate = createdate;
	}

	public String getIspaymoney() {
		return ispaymoney;
	}

	public void setIspaymoney(String ispaymoney) {
		this.ispaymoney = ispaymoney;
	}
	
}

 

5 客户端Action

 

 

public void showOrderList(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) throws Exception {
		String forwardPath = "";
		String memberuserid = request.getParameter("memberuserid");//
		//调用Webservice登陆验证
		
		JaxWsDynamicClientFactory dynamicClient = JaxWsDynamicClientFactory.newInstance();  
		Client client = dynamicClient.createClient("http://localhost:8281/cxf/MemberOrderList?wsdl");
	    Object[] o = client.invoke("getMemberOrderList", new Object[]{memberuserid});
	   
		ArrayList<Object> list=new ArrayList();
		if(!"orderlist".equalsIgnoreCase(o[0].toString())){
		   Document document = DocumentHelper.parseText(o[0].toString());//将string转成xml
		   Element root = document.getRootElement();  //获取文档的根元素
		   //定义个保存输出xml数据的缓冲字符串对象 
	        StringBuffer sb = new StringBuffer(); 
		    sb.append(o[0].toString() + "\n"); 
		    //遍历当前元素(在此是根元素)的子元素 
	        for (Iterator i_pe = root.elementIterator(); i_pe.hasNext();) { 
	        	
	            Element e_pe = (Element) i_pe.next(); 
	            //获取当前元素的名字 
	           
	            String orderid = e_pe.elementTextTrim("Orderid"); 
                String ordercode = e_pe.elementTextTrim("Ordercode");
                String ordername = e_pe.elementTextTrim("Ordername"); 
                String placeorganplace = e_pe.elementTextTrim("Placeorganplace");
                String createdate = e_pe.elementTextTrim("Createdate"); 
                String ispaymoney = e_pe.elementTextTrim("Ispaymoney"); 
                
                TbOrder order = new TbOrder();
                order.setOrderid(orderid);
                order.setOrdercode(ordercode);
                order.setOrdername(ordername);
                order.setOrganplacename(placeorganplace);
                order.setCreatedate(createdate);
                order.setIspaymoney(ispaymoney);
                
                list.add(order);
	            
	        }
			request.setAttribute("list", list);
			forwardPath = "/jtwz/jtwz_wzsj/coccrm/orderlist.jsp";
			
			request.getRequestDispatcher(forwardPath).forward(request, response);
			return ;
		}else{
			forwardPath = "/jtwz/jtwz_wzsj/coccrm/message/list_tishi.jsp";
			request.getRequestDispatcher(forwardPath).forward(request, response);
		    return;
		}
	}