maven+spring+cxf编写web service (2)
2012-12-05 14:37
459 查看
先参见文章1学习如何创建web service,现在开始写些通用接口
1.通用web service接口
2.通用web service接口实现类
3.通用service接口
4.通用service接口实现类
5.通用DAO接口
6.通用DAO接口实现类
7.通用数据对象
具体实现详细实现
8.数据对象
必须添加那两个函数,否则cxf产生的wsdl不能被客户端用
9.Web Service接口
必须这样写,否则cxf无法创建有效的wsdl
10.Web Service接口实现类
11.web service接口设置
13.Service接口实现类
14.Service接口设置
15.DAO接口
16.DAO接口实现类
17.DAO设置
18.公用函数
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; } @Override public RETT getInfoById(String id) { return service.getInfoById(id); } @Override public RETT addInfo(T info) { return service.addInfo(info); } @Override public RETT updateInfo(T info) { return service.updateInfo(info); } @Override public RETT deleteInfoById(String id) { return service.deleteInfoById(id); } @Override public 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; } @Override public 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; } @Override public 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; } @Override public 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; } @Override public 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; } @Override public 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 implements IGenericDao<T> { protected Class<T> entityClass; public GenericDaoHibernateImpl() { entityClass = (Class<T>) ((ParameterizedType) getClass() .getGenericSuperclass()).getActualTypeArguments()[0]; } protected Class<T> getEntityClass() { return entityClass; } @Override public 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))); else return getHibernateTemplate().findByCriteria( DetachedCriteria.forClass(entityClass).addOrder( Order.desc(orderBy))); } @Override public Collection<T> findByExample(Object o) { return getHibernateTemplate().findByExample(o); } @Override public T getById(Serializable id) { return (T) getHibernateTemplate().get(entityClass, id); } @Override public void deleteById(Serializable id) { delete(getById(id)); } @Override public void delete(Object o) { getHibernateTemplate().delete(o); } @Override public void save(Object o) { getHibernateTemplate().save(o); } @Override public void saveOrUpdate(Object o) { getHibernateTemplate().saveOrUpdate(o); } @Override public 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 extends BaseManagementRetInfo<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; @WebService public 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 DeviceManufactureManagementWebServiceCXFImpl extends GenericManagementWebServiceImpl<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 extends IGenericManagementService<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 extends GenericManagementServiceImpl<DeviceManufacturerInfo, DeviceManufacturerRetInfo, DeviceManufacturerListRetInfo, Devicemanufacturer> implements IDeviceManufactureManagementService { @Override protected 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 extends GenericDaoHibernateImpl<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 ""; else return value; } @SuppressWarnings("unchecked") public static <T> Class<T> getParamClass(Class<?> cls, int index) { return (Class<T>) (((ParameterizedType) cls.getGenericSuperclass()).getActualTypeArguments()[index]); } }
相关文章推荐
- maven+spring+cxf编写web service
- maven+spring+cxf编写web service
- 基于Maven在Spring中集成CXF Web Service框架
- 用CXF编写基于spring的web service 并添加cxf日志拦截器和自定义拦截器
- 用CXF编写基于spring的web service
- 基于Maven在Spring中集成CXF,发布Web Service
- 在Eclipse中基于Spring+CXF搭建RESTful Web Service的Maven项目
- 基于Maven在Spring中集成CXF,发布Web Service
- 基于Maven在Spring中集成CXF Web Service框架
- 9.Web Service Spring整合CXF之发布服务
- Maven 集成CXF Webservice,Spring
- Spring boot 整合CXF开发web service
- maven_spring_cxf
- Web Service学习-CXF与Spring整合为JavaEE应用发布WebService(三)
- Web Service (二) CXF自动发布Web Service(No Spring)
- Web Service (四) 手动发布Web Service接口-CXF与Spring集成
- CXF学习-与Spring结合:使用其他程序提供的web service 接口
- Spring boot 整合CXF开发web service
- 利用spring、cxf编写并发布webservice
- Web Service的CXF实现(Spring整合方式)