maven+spring+cxf编写web service (2)

来源:互联网 发布:爬虫软件是什么 编辑:程序博客网 时间:2024/05/22 03:13

先参见文章1学习如何创建web service,现在开始写些通用接口

1.通用web service接口

package com.test.iv.cs.service.webservice;import com.test.iv.cs.model.common.BaseManagementListRetInfo;import com.test.iv.cs.model.common.BaseManagementRetInfo;public interface IGenericManagementWebService<T, RETT extends BaseManagementRetInfo<T>, LRETT extends BaseManagementListRetInfo<T>> {public RETT getInfoById( String id);public RETT addInfo(T info);public RETT updateInfo( T info);public RETT deleteInfoById( String id);public LRETT listAllInfos();}

2.通用web service接口实现类

package com.test.iv.cs.service.webservice;import com.test.iv.cs.model.common.BaseManagementListRetInfo;import com.test.iv.cs.model.common.BaseManagementRetInfo;import com.test.iv.cs.service.IGenericManagementService;public class GenericManagementWebServiceImpl<T, RETT extends BaseManagementRetInfo<T>, LRETT extends BaseManagementListRetInfo<T>> implements IGenericManagementWebService<T, RETT, LRETT> {private IGenericManagementService<T, RETT, LRETT> service;public void setService(IGenericManagementService<T, RETT, LRETT> service) {this.service = service;}@Overridepublic RETT getInfoById(String id) {return service.getInfoById(id);}@Overridepublic RETT addInfo(T info) {return service.addInfo(info);}@Overridepublic RETT updateInfo(T info) {return service.updateInfo(info);}@Overridepublic RETT deleteInfoById(String id) {return service.deleteInfoById(id);}@Overridepublic LRETT listAllInfos() {return service.listAllInfos();}}

3.通用service接口

package com.test.iv.cs.service;import com.test.iv.cs.model.common.BaseManagementListRetInfo;import com.test.iv.cs.model.common.BaseManagementRetInfo;public interface IGenericManagementService<T, RETT extends BaseManagementRetInfo<T>, LRETT extends BaseManagementListRetInfo<T>> {public RETT getInfoById(String id);public RETT addInfo(T info);public RETT updateInfo(T Info);public RETT deleteInfoById(String id);public LRETT listAllInfos();}

4.通用service接口实现类

package com.test.iv.cs.service;import java.util.ArrayList;import java.util.Collection;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import com.test.iv.cs.model.common.BaseManagementListRetInfo;import com.test.iv.cs.model.common.BaseManagementRetInfo;import com.test.iv.cs.model.common.BaseRetInfo;import com.test.iv.cs.orm.dao.IGenericDao;import com.test.iv.cs.utils.AppCommon;import com.test.iv.cs.utils.AppTools;public abstract class GenericManagementServiceImpl<T, RETT extends BaseManagementRetInfo<T>, LRETT extends BaseManagementListRetInfo<T>, DAOPOJOT>implements IGenericManagementService<T, RETT, LRETT> {private static final Log gLog = LogFactory.getLog(GenericManagementServiceImpl.class);private String manageTypeInfo = "";private boolean addCheckId = false;protected Class<RETT> rettClass;protected Class<LRETT> listRettClass;protected Class<DAOPOJOT> daoEntityClass;protected IGenericDao<DAOPOJOT> daoObject;protected abstract T convertDAOInfoToInfo(DAOPOJOT daoT, BaseRetInfo rett);protected abstract boolean checkInfo(T info, BaseRetInfo rett);protected abstract String getId(T info, BaseRetInfo rett);protected abstract DAOPOJOT convertInfoToDAOInfo(T info, BaseRetInfo rett);private boolean checkValidInfo(T info, BaseRetInfo rett) {boolean result = false;if (null == info) {rett.setRetCode(AppCommon.RET_CODE_NULL_OBJECT);rett.setDesc("没有" + manageTypeInfo);return result;}if (!checkInfo(info, rett)) {return result;}result = true;return result;}private RETT createRetInstance() {RETT result = null;if (null == rettClass)return null;try {result = rettClass.newInstance();((BaseRetInfo) (result)).setRetCode(AppCommon.RET_CODE_ERROR_UNKNOWN);} catch (InstantiationException e) {gLog.error(e);} catch (IllegalAccessException e) {gLog.error(e);}return result;}private LRETT createListRetInstance() {LRETT result = null;if (null == listRettClass)return null;try {result = listRettClass.newInstance();((BaseRetInfo) (result)).setRetCode(AppCommon.RET_CODE_ERROR_UNKNOWN);} catch (InstantiationException e) {gLog.error(e);} catch (IllegalAccessException e) {gLog.error(e);}return result;}private DAOPOJOT getDAOObjectById(String id, BaseRetInfo rett) {DAOPOJOT result = daoObject.getById(id);if (null == result) {rett.setRetCode(AppCommon.RET_CODE_NULL_OBJECT);rett.setDesc("没有找到对应的" + manageTypeInfo + "信息");return null;}return result;}protected boolean checkIdValid(String id, BaseRetInfo retInfo) {if (AppTools.judgeEmptyStr(id)) {retInfo.setRetCode(AppCommon.RET_CODE_NULL_VALUE);retInfo.setDesc("没有" + manageTypeInfo + "编号");return false;}return true;}@Overridepublic RETT getInfoById(String id) {RETT result = createRetInstance();if (null == result)return result;DAOPOJOT daoT = getDAOPOJOById(id, result);if (null == daoT)return result;T info = convertDAOInfoToInfo(daoT, result);if (null != info) {((BaseManagementRetInfo<T>) (result)).setInfo(info);result.setRetCode(AppCommon.RET_CODE_SUCCESS);}return result;}@Overridepublic RETT addInfo(T info) {RETT result = createRetInstance();if (null == result)return result;if (!checkValidInfo(info, result))return result;if (addCheckId) {String id = getId(info, result);if (!checkIdValid(id, result)) {return result;}DAOPOJOT daoR = daoObject.getById(id);if (null != daoR) {result.setRetCode(AppCommon.RET_CODE_REPEATED);result.setDesc(manageTypeInfo + "编号重复");return result;}}DAOPOJOT daoT = convertInfoToDAOInfo(info, result);daoObject.save(daoT);result.setInfo(convertDAOInfoToInfo(daoT, result));result.setRetCode(AppCommon.RET_CODE_SUCCESS);return result;}@Overridepublic RETT updateInfo(T info) {RETT result = createRetInstance();if (null == result)return result;if (!checkValidInfo(info, result))return result;String id = getId(info, result);DAOPOJOT daoT = getDAOPOJOById(id, result);if (null == daoT)return result;DAOPOJOT daoS = convertInfoToDAOInfo(info, result);daoObject.saveOrUpdate(daoS);result.setInfo(info);result.setRetCode(AppCommon.RET_CODE_SUCCESS);return result;}private DAOPOJOT getDAOPOJOById(String id, BaseRetInfo rett) {DAOPOJOT result = null;if (!checkIdValid(id, rett)) {return result;}result = getDAOObjectById(id, rett);return result;}@Overridepublic RETT deleteInfoById(String id) {RETT result = createRetInstance();if (null == result)return result;DAOPOJOT daoT = getDAOPOJOById(id, result);if (null == daoT)return result;daoObject.delete(daoT);result.setInfo(convertDAOInfoToInfo(daoT, result));result.setRetCode(AppCommon.RET_CODE_SUCCESS);return result;}@Overridepublic LRETT listAllInfos() {LRETT result = createListRetInstance();if (null == result)return result;Collection<T> list = new ArrayList<T>();result.setInfos(list);Collection<DAOPOJOT> dList = null;try {dList = daoObject.findAll(daoEntityClass);} catch (Exception ex) {result.setRetCode(AppCommon.RET_CODE_LIST_ERROR);result.setDesc(ex.getMessage());return result;}if (null != dList) {for (DAOPOJOT daoT : dList) {list.add(convertDAOInfoToInfo(daoT, result));}}result.setRetCode(AppCommon.RET_CODE_SUCCESS);return result;}public GenericManagementServiceImpl() {rettClass = AppTools.getParamClass(getClass(), 1);listRettClass = AppTools.getParamClass(getClass(), 2);daoEntityClass = AppTools.getParamClass(getClass(), 3);}public void setDaoObject(IGenericDao<DAOPOJOT> daoObject) {this.daoObject = daoObject;}public void setManageTypeInfo(String manageTypeInfo) {this.manageTypeInfo = manageTypeInfo;}public void setAddCheckId(boolean addCheckId) {this.addCheckId = addCheckId;}public String getManageTypeInfo() {return manageTypeInfo;}}



5.通用DAO接口

package com.test.iv.cs.orm.dao;import java.io.Serializable;import java.util.Collection;public interface IGenericDao<T> {public void save(Object o);// 保存void delete(Object o);// 删除修改void deleteById(Serializable id);public void update(Object o);//public void saveOrUpdate(Object o);public T getById(Serializable id);// 查询public Collection<T> findAll(Class<T> entityClass);public Collection<T> findByExample(Object o);}

6.通用DAO接口实现类

package com.test.iv.cs.orm.dao.hibernate;import java.io.Serializable;import java.lang.reflect.ParameterizedType;import java.util.Collection;import org.hibernate.criterion.DetachedCriteria;import org.hibernate.criterion.Order;import org.springframework.util.Assert;import com.test.iv.cs.orm.dao.IGenericDao;@SuppressWarnings("unchecked")public class GenericDaoHibernateImpl<T> extends HibernateGenericDao implementsIGenericDao<T> {protected Class<T> entityClass;public GenericDaoHibernateImpl() {entityClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];}protected Class<T> getEntityClass() {return entityClass;}@Overridepublic Collection<T> findAll(Class<T> entityClass) {return getHibernateTemplate().loadAll(entityClass);}public Collection<T> findAll(Class<T> entityClass, String orderBy,boolean isAsc) {Assert.hasText(orderBy);if (isAsc)return getHibernateTemplate().findByCriteria(DetachedCriteria.forClass(entityClass).addOrder(Order.asc(orderBy)));elsereturn getHibernateTemplate().findByCriteria(DetachedCriteria.forClass(entityClass).addOrder(Order.desc(orderBy)));}@Overridepublic Collection<T> findByExample(Object o) {return getHibernateTemplate().findByExample(o);}@Overridepublic T getById(Serializable id) {return (T) getHibernateTemplate().get(entityClass, id);}@Overridepublic void deleteById(Serializable id) {delete(getById(id));}@Overridepublic void delete(Object o) {getHibernateTemplate().delete(o);}@Overridepublic void save(Object o) {getHibernateTemplate().save(o);}@Overridepublic void saveOrUpdate(Object o) {getHibernateTemplate().saveOrUpdate(o);}@Overridepublic void update(Object o) {getHibernateTemplate().update(o);}}

7.通用数据对象

package com.test.iv.cs.model.common;public class BaseManagementRetInfo<T> extends BaseRetInfo {protected T info;public T getInfo() {return info;}public void setInfo(T info) {this.info = info;}}

package com.test.iv.cs.model.common;import java.util.ArrayList;import java.util.Collection;public class BaseManagementListRetInfo<T> extends BaseRetInfo {protected Collection<T> infos = new ArrayList<T>();public Collection<T> getInfos() {return infos;}public void setInfos(Collection<T> infos) {this.infos = infos;}}
package com.test.iv.cs.model.common;public class BaseRetInfo {private int retCode;private String desc;public int getRetCode() {return retCode;}public void setRetCode(int retCode) {this.retCode = retCode;}public String getDesc() {return desc;}public void setDesc(String desc) {this.desc = desc;}public void setRetInfo(BaseRetInfo retInfo) {this.retCode = retInfo.retCode;this.desc = retInfo.desc;}}


具体实现详细实现

8.数据对象

package com.test.iv.cs.model.devicemanufacturer;public class DeviceManufacturerInfo {private String deviceManufacturerId;public String getDeviceManufacturerId() {return deviceManufacturerId;}public void setDeviceManufacturerId(String deviceManufacturerId) {this.deviceManufacturerId = deviceManufacturerId;}public String getDescript() {return descript;}public void setDescript(String descript) {this.descript = descript;}private String descript;}

package com.test.iv.cs.model.devicemanufacturer;import java.util.Collection;import com.test.iv.cs.model.common.BaseManagementListRetInfo;public class DeviceManufacturerListRetInfo extends BaseManagementListRetInfo<DeviceManufacturerInfo> {public Collection<DeviceManufacturerInfo> getDeviceManufacturerInfos() {return infos;}public void setDeviceManufacturerInfos(Collection<DeviceManufacturerInfo> infos) {this.infos = infos;}}

必须添加那两个函数,否则cxf产生的wsdl不能被客户端用

package com.test.iv.cs.model.devicemanufacturer;import com.test.iv.cs.model.common.BaseManagementRetInfo;public class DeviceManufacturerRetInfo extendsBaseManagementRetInfo<DeviceManufacturerInfo> {public DeviceManufacturerInfo getDeviceManufacturer() {return info;}public void setDeviceManufacturer(DeviceManufacturerInfo info) {this.info = info;}}
必须添加那两个函数,否则cxf产生的wsdl不能被客户端用

9.Web Service接口

package com.test.iv.cs.service.webservice.devicemanufacture;import javax.jws.WebMethod;import javax.jws.WebParam;import javax.jws.WebResult;import javax.jws.WebService;import com.test.iv.cs.model.devicemanufacturer.DeviceManufacturerInfo;import com.test.iv.cs.model.devicemanufacturer.DeviceManufacturerListRetInfo;import com.test.iv.cs.model.devicemanufacturer.DeviceManufacturerRetInfo;@WebServicepublic interface DeviceManufactureManagementWebService  {@WebMethod(operationName = "getInfoById")@WebResult(name = "result")public DeviceManufacturerRetInfo getInfoById(@WebParam(name = "id") String id);@WebMethod(operationName = "addInfo")@WebResult(name = "result")public DeviceManufacturerRetInfo addInfo(@WebParam(name = "info")DeviceManufacturerInfo info);@WebMethod(operationName = "updateInfo")@WebResult(name = "result")public DeviceManufacturerRetInfo updateInfo(@WebParam(name = "info")DeviceManufacturerInfo info);@WebMethod(operationName = "deleteInfoById")@WebResult(name = "result")public DeviceManufacturerRetInfo deleteInfoById(@WebParam(name = "id") String id);@WebMethod(operationName = "listAllInfos")@WebResult(name = "result")public DeviceManufacturerListRetInfo listAllInfos();}

必须这样写,否则cxf无法创建有效的wsdl

10.Web Service接口实现类

package com.test.iv.cs.service.webservice.devicemanufacture;import javax.jws.WebService;import com.test.iv.cs.model.devicemanufacturer.DeviceManufacturerInfo;import com.test.iv.cs.model.devicemanufacturer.DeviceManufacturerListRetInfo;import com.test.iv.cs.model.devicemanufacturer.DeviceManufacturerRetInfo;import com.test.iv.cs.service.webservice.GenericManagementWebServiceImpl;@WebService(endpointInterface = "com.test.iv.cs.service.webservice.devicemanufacture.DeviceManufactureManagementWebService")public class DeviceManufactureManagementWebServiceCXFImplextendsGenericManagementWebServiceImpl<DeviceManufacturerInfo, DeviceManufacturerRetInfo, DeviceManufacturerListRetInfo>implements DeviceManufactureManagementWebService {}

11.web service接口设置

<bean id="deviceManufactureManagementWebServiceCXFImpl"class="com.test.iv.cs.service.webservice.devicemanufacture.DeviceManufactureManagementWebServiceCXFImpl"><property name="service" ref="deviceManufactureManagementService"></property></bean><jaxws:endpoint id="deviceManufactureManagementWebService" implementor="#deviceManufactureManagementWebServiceCXFImpl"address="/deviceManufactureManagementWebService"></jaxws:endpoint>
12.Service 接口

package com.test.iv.cs.service.devicemanufacture;import com.test.iv.cs.model.devicemanufacturer.DeviceManufacturerInfo;import com.test.iv.cs.model.devicemanufacturer.DeviceManufacturerListRetInfo;import com.test.iv.cs.model.devicemanufacturer.DeviceManufacturerRetInfo;import com.test.iv.cs.service.IGenericManagementService;public interface IDeviceManufactureManagementService extendsIGenericManagementService<DeviceManufacturerInfo, DeviceManufacturerRetInfo, DeviceManufacturerListRetInfo> {}

13.Service接口实现类

package com.test.iv.cs.service.devicemanufacture;import com.test.iv.cs.model.devicemanufacturer.DeviceManufacturerInfo;import com.test.iv.cs.model.devicemanufacturer.DeviceManufacturerListRetInfo;import com.test.iv.cs.model.devicemanufacturer.DeviceManufacturerRetInfo;import com.test.iv.cs.orm.pojo.Devicemanufacturer;import com.test.iv.cs.service.GenericManagementServiceImpl;import com.test.iv.cs.utils.AppTools;public class DeviceManufactureManagementServiceImpl extendsGenericManagementServiceImpl<DeviceManufacturerInfo, DeviceManufacturerRetInfo, DeviceManufacturerListRetInfo, Devicemanufacturer> implementsIDeviceManufactureManagementService {@Overrideprotected DeviceManufacturerInfo convertDAOInfoToInfo(Devicemanufacturer daoT, DeviceManufacturerRetInfo rett) {DeviceManufacturerInfo result = new DeviceManufacturerInfo();result.setDeviceManufacturerId(AppTools.convertNullStr(daoT.getDevicemanufacturerId()));result.setDescript(AppTools.convertNullStr(daoT.getDescript()));return result;}}

14.Service接口设置
<bean id="deviceManufactureManagementServiceImpl"class="com.test.iv.cs.service.devicemanufacture.DeviceManufactureManagementServiceImpl"><property name="daoObject" ref="deviceManufactureDAO"></property></bean><alias name="deviceManufactureManagementServiceImpl" alias="deviceManufactureManagementService" />

15.DAO接口

package com.test.iv.cs.orm.dao.devicemanufacture;import com.test.iv.cs.orm.dao.IGenericDao;import com.test.iv.cs.orm.pojo.Devicemanufacturer;public interface IDeviceManufactureDAO extends IGenericDao<Devicemanufacturer> {}

16.DAO接口实现类

package com.test.iv.cs.orm.dao.hibernate.devicemanufacture;import com.test.iv.cs.orm.dao.devicemanufacture.IDeviceManufactureDAO;import com.test.iv.cs.orm.dao.hibernate.GenericDaoHibernateImpl;import com.test.iv.cs.orm.pojo.Devicemanufacturer;public class DeviceManufactureDAOHibernateImpl extendsGenericDaoHibernateImpl<Devicemanufacturer> implements IDeviceManufactureDAO {}

17.DAO设置

<bean abstract="true" id="genericDaoHibernateImpl" class="com.test.iv.cs.orm.dao.hibernate.GenericDaoHibernateImpl"><property name="sessionFactory" ref="sessionFactory" /></bean><bean id="deviceManufactureDAOHibernateImpl" class="com.test.iv.cs.orm.dao.hibernate.devicemanufacture.DeviceManufactureDAOHibernateImpl" parent="genericDaoHibernateImpl"></bean><alias name="deviceManufactureDAOHibernateImpl" alias="deviceManufactureDAO"/>

18.公用函数

package com.test.ivs.cs.utils;import java.lang.reflect.ParameterizedType;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;public class AppTools {private static final Log log = LogFactory.getLog(AppTools.class);public static String formatDateTimeStr(Date date, String pattern) {if (null == date)return "";SimpleDateFormat format = new SimpleDateFormat(pattern);return format.format(date);}public static Date parseDateTime(String value, String pattern) {Date result = null;SimpleDateFormat format = new SimpleDateFormat(pattern);try {result = format.parse(value);} catch (ParseException e) {log.error(e);}return result;}public static boolean judgeEmptyStr(String value) {return ((null == value) || (value.length() < 1));}public static String convertNullStr(String value) {if (null == value)return "";elsereturn value;}@SuppressWarnings("unchecked")public static <T>  Class<T> getParamClass(Class<?> cls, int index) {return  (Class<T>) (((ParameterizedType) cls.getGenericSuperclass()).getActualTypeArguments()[index]); }}



原创粉丝点击