CXF框架入门案例请看上面这篇文章
文章地址:https://blog.csdn.net/qq_44757034/article/details/111869428

一、物流BOS系统开发:服务端

1、需求与思路分析

我们需要开发《物流 BOS 系统》,并提供两个功能。

1)可以通过运单号查询该运单的运单详情
2)可以在线下单预约

最终由 ERP 系统调用这两个功能

2、数据库设计


运单状态: 0:待发 1:在途 2:结束
数据库:mysql, 数据库名称:redsun

CREATE DATABASE redsun DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
use redsun;
CREATE TABLE `waybill` (`sn` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '运单号',`userid` bigint(20) DEFAULT NULL COMMENT '用户ID',`toaddress` varchar(100) DEFAULT NULL COMMENT '收货地址',`addressee` varchar(100) DEFAULT NULL COMMENT '收货人',`tele` varchar(100) DEFAULT NULL COMMENT '收件人电话',`info` varchar(2000) DEFAULT NULL COMMENT '运单详情',`state` varchar(1) DEFAULT NULL COMMENT '运单状态',PRIMARY KEY (`sn`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
CREATE TABLE `waybilldetail` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',`sn` bigint(20) DEFAULT NULL COMMENT '运单号',`exedate` varchar(10) DEFAULT NULL COMMENT '执行日期',`exetime` varchar(10) DEFAULT NULL COMMENT '执行时间',`info` varchar(100) DEFAULT NULL COMMENT '执行信息',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

3、项目工程搭建

因为《物流 BOS 系统》会与《ERP》同时运行,所以需要将《物流 BOS 系统》的 pom.xml 中的 8080 端口改为9090

(1)创建父工程



(2)创建子工程



(3)创建其他子工程与步骤2相同

(4)创建redsun_web的时候要注意


(4)在redsun_web工程当中展开src\main\webapp目录 建立WEB-INF文件夹,并创建web.xml到文件夹WEB-INF当中


web.xml当中的内容
配置一些框架的内容

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><context-param><param-name>contextConfigLocation</param-name><param-value>classpath*:applicationContext*.xml</param-value></context-param><filter><filter-name>openSessionInView</filter-name><filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class></filter><filter-mapping><filter-name>openSessionInView</filter-name><url-pattern>/*</url-pattern></filter-mapping><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/admin/*</url-pattern></filter-mapping><!-- cxf --><filter><filter-name>cxf</filter-name><filter-class>org.apache.cxf.transport.servlet.CXFServlet</filter-class></filter><filter-mapping><filter-name>cxf</filter-name><url-pattern>/ws/*</url-pattern></filter-mapping><welcome-file-list><welcome-file>login.html</welcome-file></welcome-file-list>
</web-app>
(5)在redsun_parent当中pom.xml添加依赖
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.itzheng</groupId><artifactId>redsun_parent</artifactId><version>0.0.1-SNAPSHOT</version><packaging>pom</packaging><properties><hibernate.version>5.0.7.Final</hibernate.version><spring.version>4.2.4.RELEASE</spring.version><struts.version>2.3.24</struts.version><slf4j.version>1.6.6</slf4j.version><log4j.version>1.2.12</log4j.version>   </properties><dependencies><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>${hibernate.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>${spring.version}</version></dependency> <dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.8.7</version></dependency><dependency><groupId>org.apache.struts</groupId><artifactId>struts2-core</artifactId><version>${struts.version}</version><exclusions><exclusion><groupId>javassist</groupId><artifactId>javassist</artifactId></exclusion>          </exclusions></dependency><dependency><groupId>org.apache.struts</groupId><artifactId>struts2-spring-plugin</artifactId><version>${struts.version}</version></dependency><!-- log start --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>${log4j.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${slf4j.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>${slf4j.version}</version></dependency><!-- log end --><dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><!-- 数据库驱动 --><dependency><groupId>com.oracle</groupId><artifactId>ojdbc6</artifactId><version>11.2.0.3</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.6</version><scope>runtime</scope></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.1.37</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.9</version><scope>test</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>provided</scope></dependency><!-- Web Service CXF--><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-frontend-jaxws</artifactId><version>3.1.10</version></dependency><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-transports-http</artifactId><version>3.1.10</version></dependency></dependencies><build>  <plugins><plugin>  <groupId>org.apache.maven.plugins</groupId>  <artifactId>maven-compiler-plugin</artifactId>  <version>2.3.2</version>  <configuration>  <source>1.7</source>  <target>1.7</target>  </configuration>  </plugin>  <plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><configuration><!-- 指定端口 --><port>9090</port><!-- 请求路径 --><path>/redsun</path></configuration></plugin></plugins>  </build><modules><module>redsun_entity</module><module>redsun_dao</module><module>redsun_biz</module><module>redsun_web</module></modules>
</project>
(6)添加其他子项目的依赖关系

1)在redsun_entity当中创建对应的实体类,以及对应的映射文件

Waybill

package com.redsum.bos.entity;
/*** 实体类* @author Administrator **/
public class Waybill {  private Long sn;//运单号private Long userid;//用户IDprivate String toaddress;//收货地址private String addressee;//收货人private String tele;//收件人电话private String info;//运单详情private String state;//运单状态public Long getSn() {       return sn;}public void setSn(Long sn) {this.sn = sn;}public Long getUserid() {     return userid;}public void setUserid(Long userid) {this.userid = userid;}public String getToaddress() {        return toaddress;}public void setToaddress(String toaddress) {this.toaddress = toaddress;}public String getAddressee() {       return addressee;}public void setAddressee(String addressee) {this.addressee = addressee;}public String getTele() {        return tele;}public void setTele(String tele) {this.tele = tele;}public String getInfo() {     return info;}public void setInfo(String info) {this.info = info;}public String getState() {        return state;}public void setState(String state) {this.state = state;}
}

waybill.hbm.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping><class name="com.redsum.bos.entity.Waybill" table="waybill" ><id name="sn" ><generator class="native"></generator></id><property name="userid" /> <property name="toaddress" /> <property name="addressee" /> <property name="tele" /> <property name="info" /> <property name="state" /> </class>
</hibernate-mapping>

Waybilldetail

package com.redsum.bos.entity;
/*** 实体类* @author Administrator **/
public class Waybilldetail {    private Long id;//IDprivate Long sn;//运单号private String exedate;//执行日期private String exetime;//执行时间private String info;//执行信息public Long getId() {      return id;}public void setId(Long id) {this.id = id;}public Long getSn() {     return sn;}public void setSn(Long sn) {this.sn = sn;}public String getExedate() {      return exedate;}public void setExedate(String exedate) {this.exedate = exedate;}public String getExetime() {       return exetime;}public void setExetime(String exetime) {this.exetime = exetime;}public String getInfo() {      return info;}public void setInfo(String info) {this.info = info;}
}

waybilldetail.hbm.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping><class name="com.redsum.bos.entity.Waybilldetail" table="waybilldetail" ><id name="id" ><generator class="native"></generator></id><property name="sn" /> <property name="exedate" /> <property name="exetime" /> <property name="info" /> </class>
</hibernate-mapping>

2)redsun_dao当中创建创建接口和类,并添加依赖
先添加依赖dao依赖redsun_parent

创建对应的接口和类
将spring配置文件中的applicationContext_datasource.xml和
applicationContext_dao.xml创建到erp_dao工程的src/main/resources下。

IBaseDao

package com.redsum.bos.dao;
import java.util.List;
public interface IBaseDao<T> {/*** 条件查询* @param t1* @return*/List<T> getList(T t1,T t2,Object param);/*** 分页查询* @param t1* @param t2* @param param* @param firstResult* @param maxResults* @return*/List<T> getListByPage(T t1,T t2,Object param,int firstResult, int maxResults);/*** 记录条件查询的总记录数* @param t1* @return*/long getCount(T t1,T t2,Object param);/*** 新增* @param t*/void add(T t);/*** 删除*/void delete(Long uuid);/*** 通过编号查询对象* @param uuid* @return*/T get(Long uuid);/*** 更新*/void update(T t);
}

BaseDao

package com.redsum.bos.dao.impl;import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Projections;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport;import com.redsum.bos.dao.IBaseDao;/*** 通用数据访问层* @author Administrator** @param <T>*/
@SuppressWarnings("unchecked")
public class BaseDao<T> extends HibernateDaoSupport implements IBaseDao<T> {/** 泛型中的初阶类型 */private Class<T> entityClass;public BaseDao(){//获取对象对应的父类的类型Type baseDaoClass = this.getClass().getGenericSuperclass();//转成带参数,即泛型的类型ParameterizedType pType = (ParameterizedType)baseDaoClass;//获取参数泛型类型数组Type[] types = pType.getActualTypeArguments();//由于我们的BaseDao<T>的泛型参数里只有一个类型T,因此数组的第一个元素就是类型T的实际上的类型entityClass = (Class<T>)types[0];}/*** 条件查询*/public List<T> getList(T t1,T t2,Object param) {DetachedCriteria dc = getDetachedCriteria(t1,t2,param);return (List<T>) this.getHibernateTemplate().findByCriteria(dc);}/*** 分页查询* @param t1* @param t2* @param param* @param firstResult* @param maxResults* @return*/public List<T> getListByPage(T t1,T t2,Object param,int firstResult, int maxResults) {DetachedCriteria dc = getDetachedCriteria(t1,t2,param);return (List<T>) this.getHibernateTemplate().findByCriteria(dc,firstResult, maxResults);}/*** 记录条件查询的总记录数* @param t1* @return*/public long getCount(T t1,T t2,Object param) {DetachedCriteria dc = getDetachedCriteria(t1,t2,param);dc.setProjection(Projections.rowCount());List<Long> list = (List<Long>)getHibernateTemplate().findByCriteria(dc);return list.get(0);}/*** 新增* @param t*/public void add(T t){this.getHibernateTemplate().save(t);}/*** 删除*/public void delete(Long uuid){//让对象进入持久化状态T t = this.getHibernateTemplate().get(entityClass, uuid);//删除持久化状态this.getHibernateTemplate().delete(t);}/*** 通过编号查询对象* @param uuid* @return*/public T get(Long uuid){return getHibernateTemplate().get(entityClass, uuid);}/*** 更新*/public void update(T t){this.getHibernateTemplate().update(t);}/*** 由子类实现* @param t1* @return*/public DetachedCriteria getDetachedCriteria(T t1, T t2, Object param){return null;}
}

IWaybillDao

package com.redsum.bos.dao;import com.redsum.bos.entity.Waybill;
/*** 数据访问接口* @author Administrator**/
public interface IWaybillDao extends IBaseDao<Waybill>{}

WaybillDao

package com.redsum.bos.dao.impl;import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Restrictions;
import com.redsum.bos.dao.IWaybillDao;
import com.redsum.bos.entity.Waybill;/*** 数据访问类* * @author Administrator**/
public class WaybillDao extends BaseDao<Waybill> implements IWaybillDao {/*** 构建查询条件* * @param dep1* @param dep2* @param param* @return*/public DetachedCriteria getDetachedCriteria(Waybill waybill1, Waybill waybill2, Object param) {DetachedCriteria dc = DetachedCriteria.forClass(Waybill.class);if (waybill1 != null) {if (null != waybill1.getToaddress() && waybill1.getToaddress().trim().length() > 0) {dc.add(Restrictions.like("toaddress", waybill1.getToaddress(), MatchMode.ANYWHERE));}if (null != waybill1.getAddressee() && waybill1.getAddressee().trim().length() > 0) {dc.add(Restrictions.like("addressee", waybill1.getAddressee(), MatchMode.ANYWHERE));}if (null != waybill1.getTele() && waybill1.getTele().trim().length() > 0) {dc.add(Restrictions.like("tele", waybill1.getTele(), MatchMode.ANYWHERE));}if (null != waybill1.getInfo() && waybill1.getInfo().trim().length() > 0) {dc.add(Restrictions.like("info", waybill1.getInfo(), MatchMode.ANYWHERE));}if (null != waybill1.getState() && waybill1.getState().trim().length() > 0) {dc.add(Restrictions.like("state", waybill1.getState(), MatchMode.ANYWHERE));}}return dc;}}

IWaybilldetailDao

package com.redsum.bos.dao;import com.redsum.bos.entity.Waybilldetail;
/*** 数据访问接口* @author Administrator**/
public interface IWaybilldetailDao extends IBaseDao<Waybilldetail>{}

WaybilldetailDao

package com.redsum.bos.dao.impl;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Restrictions;
import com.redsum.bos.dao.IWaybilldetailDao;
import com.redsum.bos.entity.Waybilldetail;
/*** 数据访问类* @author Administrator**/
public class WaybilldetailDao extends BaseDao<Waybilldetail> implements IWaybilldetailDao {/*** 构建查询条件* @param dep1* @param dep2* @param param* @return*/public DetachedCriteria getDetachedCriteria(Waybilldetail waybilldetail1,Waybilldetail waybilldetail2,Object param){DetachedCriteria dc=DetachedCriteria.forClass(Waybilldetail.class);if(waybilldetail1!=null){if(null != waybilldetail1.getExedate() && waybilldetail1.getExedate().trim().length()>0){dc.add(Restrictions.like("exedate", waybilldetail1.getExedate(), MatchMode.ANYWHERE));}if(null != waybilldetail1.getExetime() && waybilldetail1.getExetime().trim().length()>0){dc.add(Restrictions.like("exetime", waybilldetail1.getExetime(), MatchMode.ANYWHERE));}if(null != waybilldetail1.getInfo() && waybilldetail1.getInfo().trim().length()>0){dc.add(Restrictions.like("info", waybilldetail1.getInfo(), MatchMode.ANYWHERE));}//根据运单号查询明细if(null != waybilldetail1.getSn()){dc.add(Restrictions.eq("sn", waybilldetail1.getSn()));}}return dc;}
}

applicationContext_dao.xml

<?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:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">  <!--  --><bean id="waybillDao" class="com.redsum.bos.dao.impl.WaybillDao"><property name="sessionFactory" ref="sessionFactory"></property></bean><!--  --><bean id="waybilldetailDao" class="com.redsum.bos.dao.impl.WaybilldetailDao"><property name="sessionFactory" ref="sessionFactory"></property></bean>
</beans>

applicationContext_datasource.xml

<?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:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">  <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://127.0.0.1:3306/redsun?useUnicode=true&amp;characterEncoding=UTF8"/><property name="username" value="root"/><property name="password" value="root"/></bean><bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"><property name="dataSource" ref="dataSource"/><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</prop><prop key="hibernate.show_sql">true</prop><prop key="hibernate.format_sql">false</prop></props></property><property name="mappingLocations"><value>classpath:com/redsum/bos/entity/*.hbm.xml</value></property></bean>
</beans>

3)redsun_biz当中创建创建接口和类,并添加依赖


IBaseBiz

package com.redsum.bos.biz;import java.util.List;/*** 通用业务逻辑接口* @author Administrator** @param <T>*/
public interface IBaseBiz<T> {/*** 条件查询* @param t1* @return*/List<T> getList(T t1,T t2,Object param);/*** 分页查询* @param t1* @param t2* @param param* @param firstResult* @param maxResults* @return*/List<T> getListByPage(T t1,T t2,Object param,int firstResult, int maxResults);/*** 计算总记录数* @param t1* @param t2* @param param* @return*/public long getCount(T t1,T t2,Object param);/*** 新增* @param t*/void add(T t);/*** 删除*/void delete(Long uuid);/*** 通过编号查询对象* @param uuid* @return*/T get(Long uuid);/*** 更新*/void update(T t);
}

BaseBiz

package com.redsum.bos.biz.impl;import java.util.List;
import com.redsum.bos.biz.IBaseBiz;
import com.redsum.bos.dao.IBaseDao;
/*** 通用业务逻辑实现类* @author Administrator** @param <T>*/
public class BaseBiz<T> implements IBaseBiz<T> {/** 数据访问注入*/private IBaseDao<T> baseDao;public void setBaseDao(IBaseDao<T> baseDao) {this.baseDao = baseDao;}/*** 条件查询* @param t1* @return*/public List<T> getList(T t1,T t2,Object param){return baseDao.getList(t1,t2,param);}/*** 条件查询* @param t1* @return*/public List<T> getListByPage(T t1,T t2,Object param,int firstResult, int maxResults){return baseDao.getListByPage(t1,t2,param,firstResult, maxResults);}@Overridepublic long getCount(T t1,T t2,Object param) {return baseDao.getCount(t1,t2,param);}@Overridepublic void add(T t) {baseDao.add(t);}/*** 删除*/public void delete(Long uuid){baseDao.delete(uuid);}/*** 通过编号查询对象* @param uuid* @return*/public T get(Long uuid){return baseDao.get(uuid);}/*** 更新*/public void update(T t){baseDao.update(t);}}

IWaybillBiz

package com.redsum.bos.biz;
import com.redsum.bos.entity.Waybill;
/*** 业务逻辑层接口* @author Administrator**/
public interface IWaybillBiz extends IBaseBiz<Waybill>{}

WaybillBiz

package com.redsum.bos.biz.impl;
import com.redsum.bos.biz.IWaybillBiz;
import com.redsum.bos.dao.IWaybillDao;
import com.redsum.bos.entity.Waybill;
/*** 业务逻辑类* @author Administrator**/
public class WaybillBiz extends BaseBiz<Waybill> implements IWaybillBiz {private IWaybillDao waybillDao;public void setWaybillDao(IWaybillDao waybillDao) {this.waybillDao = waybillDao;super.setBaseDao(this.waybillDao);}}

IWaybilldetailBiz

package com.redsum.bos.biz;
import com.redsum.bos.entity.Waybilldetail;
/*** 业务逻辑层接口* @author Administrator**/
public interface IWaybilldetailBiz extends IBaseBiz<Waybilldetail>{}

WaybilldetailBiz

package com.redsum.bos.biz.impl;
import com.redsum.bos.biz.IWaybilldetailBiz;
import com.redsum.bos.dao.IWaybilldetailDao;
import com.redsum.bos.entity.Waybilldetail;
/*** 业务逻辑类* @author Administrator**/
public class WaybilldetailBiz extends BaseBiz<Waybilldetail> implements IWaybilldetailBiz {private IWaybilldetailDao waybilldetailDao;public void setWaybilldetailDao(IWaybilldetailDao waybilldetailDao) {this.waybilldetailDao = waybilldetailDao;super.setBaseDao(this.waybilldetailDao);}}

applicationContext_biz.xml

<?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:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">   <!--  --><bean id="waybillBiz" class="com.redsum.bos.biz.impl.WaybillBiz"><property name="waybillDao" ref="waybillDao"></property></bean><!--  --><bean id="waybilldetailBiz" class="com.redsum.bos.biz.impl.WaybilldetailBiz"><property name="waybilldetailDao" ref="waybilldetailDao"></property></bean>
</beans>

applicationContext_tx.xml

<?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:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">  <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory"/></bean><tx:advice id="advice" transaction-manager="transactionManager"><tx:attributes>       <tx:method name="do*" propagation="REQUIRED"/><tx:method name="add*" propagation="REQUIRED"/><tx:method name="update*" propagation="REQUIRED"/><tx:method name="save*" propagation="REQUIRED"/><tx:method name="delete*" propagation="REQUIRED"/><tx:method name="*" read-only="true"/></tx:attributes></tx:advice><aop:config><aop:pointcut id="serviceMethod" expression="execution(* com.redsum.bos.biz.impl.*.*(..))"/><aop:advisor pointcut-ref="serviceMethod" advice-ref="advice" /></aop:config>
</beans>

4)redsun_web当中创建创建接口和类,并添加依赖

BaseAction

package com.redsum.bos.action;import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import javax.servlet.http.HttpServletResponse;import org.apache.struts2.ServletActionContext;import com.alibaba.fastjson.JSON;import com.redsum.bos.biz.IBaseBiz;/*** 通用Action类* @author Administrator** @param <T>*/
public class BaseAction<T> {private IBaseBiz<T> baseBiz;public void setBaseBiz(IBaseBiz<T> baseBiz) {this.baseBiz = baseBiz;}//属性驱动:条件查询private T t1;private T t2;private Object param;public T getT2() {return t2;}public void setT2(T t2) {this.t2 = t2;}public Object getParam() {return param;}public void setParam(Object param) {this.param = param;}public T getT1() {return t1;}public void setT1(T t1) {this.t1 = t1;}private int page;//页码private int rows;//每页的记录数public int getPage() {return page;}public void setPage(int page) {this.page = page;}public int getRows() {return rows;}public void setRows(int rows) {this.rows = rows;}/*** 条件查询*/public void list(){List<T> list = baseBiz.getList(t1,t2,param);//把部门列表转JSON字符串String listString = JSON.toJSONString(list);write(listString);}public void listByPage(){System.out.println("页码:" + page + " 记录数:" + rows);int firstResult = (page -1) * rows;List<T> list = baseBiz.getListByPage(t1,t2,param,firstResult, rows);long total = baseBiz.getCount(t1,t2,param);//{total: total, rows:[]}Map<String, Object> mapData = new HashMap<String, Object>();mapData.put("total", total);mapData.put("rows", list);//把部门列表转JSON字符串String listString = JSON.toJSONString(mapData);write(listString);}/**新增,修改*/private T t;public T getT() {return t;}public void setT(T t) {this.t = t;}/*** 新增* @param jsonString*/public void add(){//{"success":true,"message":""}//返回前端的JSON数据Map<String, Object> rtn = new HashMap<String, Object>();try {baseBiz.add(t);rtn.put("success",true);rtn.put("message","新增成功");} catch (Exception e) {e.printStackTrace();rtn.put("success",false);rtn.put("message","新增失败");}write(JSON.toJSONString(rtn));}private long id;public long getId() {return id;}public void setId(long id) {this.id = id;}/*** 删除* @param jsonString*/public void delete(){try {baseBiz.delete(id);ajaxReturn(true, "删除成功");} catch (Exception e) {e.printStackTrace();ajaxReturn(false, "删除失败");}}/*** 通过编辑查询对象*/public void get(){T t = baseBiz.get(id);String jsonString = JSON.toJSONString(t);System.out.println("转换前:" + jsonString);//{"name":"管理员组","tele":"000011","uuid":1}String jsonStringAfter = mapData(jsonString, "t");System.out.println("转换后:" + jsonStringAfter);write(jsonStringAfter);}/*** 修改*/public void update(){try {baseBiz.update(t);ajaxReturn(true, "修改成功");} catch (Exception e) {e.printStackTrace();ajaxReturn(false, "修改失败");}}/*** //{"name":"管理员组","tele":"000011","uuid":1} * @param jsonString JSON数据字符串* @param prefix 要加上的前缀* @return  {"t.name":"管理员组","t.tele":"000011","t.uuid":1} */public String mapData(String jsonString, String prefix){Map<String, Object> map = JSON.parseObject(jsonString);//存储key加上前缀后的值Map<String, Object> dataMap = new HashMap<String, Object>();//给每key值加上前缀for(String key : map.keySet()){dataMap.put(prefix + "." + key, map.get(key));}return JSON.toJSONString(dataMap);}/*** 返回前端操作结果* @param success* @param message*/public void ajaxReturn(boolean success, String message){//返回前端的JSON数据Map<String, Object> rtn = new HashMap<String, Object>();rtn.put("success",success);rtn.put("message",message);write(JSON.toJSONString(rtn));}/*** 输出字符串到前端* @param jsonString*/public void write(String jsonString){try {//响应对象HttpServletResponse response = ServletActionContext.getResponse();//设置编码response.setContentType("text/html;charset=utf-8"); //输出给页面response.getWriter().write(jsonString);} catch (IOException e) {e.printStackTrace();}}
}

WaybillAction

package com.redsum.bos.action;
import com.redsum.bos.biz.IWaybillBiz;
import com.redsum.bos.entity.Waybill;/*** Action * @author Administrator**/
public class WaybillAction extends BaseAction<Waybill> {private IWaybillBiz waybillBiz;public void setWaybillBiz(IWaybillBiz waybillBiz) {this.waybillBiz = waybillBiz;super.setBaseBiz(this.waybillBiz);}}

WaybilldetailAction

package com.redsum.bos.action;
import com.redsum.bos.biz.IWaybilldetailBiz;
import com.redsum.bos.entity.Waybilldetail;/*** Action * @author Administrator**/
public class WaybilldetailAction extends BaseAction<Waybilldetail> {private IWaybilldetailBiz waybilldetailBiz;public void setWaybilldetailBiz(IWaybilldetailBiz waybilldetailBiz) {this.waybilldetailBiz = waybilldetailBiz;super.setBaseBiz(this.waybilldetailBiz);}}
(7)测试运行

http://localhost:9090/redsun/admin/waybill.html

http://localhost:9090/redsun/admin/waybilldetail.html

4、系统开发

(1)修改WaybilldetailDao

         //根据运单号查询明细if(null != waybilldetail1.getSn()) {dc.add(Restrictions.eq("sn", waybilldetail1.getSn()));}
(2)创建包结构以及对应的类


IWaybillWS

package com.redsum.bos.ws;import java.util.List;import javax.jws.WebService;import com.redsum.bos.entity.Waybilldetail;/** 运单服务接口*/
@WebService
public interface IWaybillWS {/** 查询运单详情*/List<Waybilldetail> waybilldetailList(Long sn);/** 在线预约下单*/Long addWaybill(Long id,String toAddress,String addressee,String tele,String info);
}

WaybillWS

package com.redsum.bos.ws.impl;
import java.util.List;
import com.redsum.bos.biz.IWaybillBiz;
import com.redsum.bos.biz.IWaybilldetailBiz;
import com.redsum.bos.entity.Waybill;
import com.redsum.bos.entity.Waybilldetail;
import com.redsum.bos.ws.IWaybillWS;
public class WaybillWS implements IWaybillWS {private IWaybillBiz waybillBiz;private IWaybilldetailBiz waybilldetailBiz;public void setWaybillBiz(IWaybillBiz waybillBiz) {this.waybillBiz = waybillBiz;}public void setWaybilldetailBiz(IWaybilldetailBiz waybilldetailBiz) {this.waybilldetailBiz = waybilldetailBiz;}/** 查询运单详情*/@Overridepublic List<Waybilldetail> waybilldetailList(Long sn) {// 构建查询条件Waybilldetail waybilldetail = new Waybilldetail();waybilldetail.setSn(sn);return waybilldetailBiz.getList(waybilldetail, null, null);}/** */@Overridepublic Long addWaybill(Long id, String toAddress, String addressee, String tele, String info) {Waybill waybill = new Waybill();waybill.setToaddress(toAddress);waybill.setInfo(info);waybill.setState("0");waybill.setTele(tele);waybill.setUserid(id);waybill.setAddressee(addressee);waybillBiz.add(waybill);return waybill.getSn();}
}
(3)创建applicationContext_cxf.xml配置文件

<?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:jaxws="http://cxf.apache.org/jaxws"   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd                         http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"><!-- WS调用的类  --><bean id="waybillWs" class="com.redsum.bos.ws.impl.WaybillWS"><property name="waybillBiz" ref="waybillBiz"></property><property name="waybilldetailBiz" ref="waybilldetailBiz"></property></bean><!-- 发布服务 --><jaxws:server address="/waybill"><jaxws:serviceBean><ref bean="waybillWs"/></jaxws:serviceBean></jaxws:server>
</beans>
(4)发布服务

http://localhost:9090/redsun/ws/waybill?wsdl

http://localhost:9090/redsun/ws/waybill?wsdl=IWaybillWS.wsdl

二、ERP整合物流Bos系统客户端

1、在erp_partent的基础上创建子工程

(1)创建erp_client工程



(2)erp_biz给工程添加依赖

(3)生成客户端代码

a、查看工程的位置


b、在cmd当中执行如下代码
cd D:\ITZHENGWORKSPACE\erp_partent\erp_client\src\main\java
D:
wsimport -s . http://localhost:9090/redsun/ws/waybill?wsdl

c、更新项目自动生成代码成功

d、配置对应的坐标在erp_partent对应的pom.xml当中

<!-- Web Service CXF--><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-frontend-jaxws</artifactId><version>3.1.10</version></dependency><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-transports-http</artifactId><version>3.1.10</version></dependency>
e、配置客户端的配置文件(在erp_client)当中的resources

resources\applicationContext_cxf.xml

<?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:jaxws="http://cxf.apache.org/jaxws"   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd                         http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"><!-- 客户端配置--><jaxws:client id="waybillClient" address="http://localhost:9090/redsun/ws/waybill?wsdl" serviceClass="com.redsum.bos.ws.impl.IWaybillWS" ></jaxws:client>
</beans>

2、通过运单号查询运单详情

(1)在IOrdersBiz当中创建waybilldatailList方法

/** 根据运单号查询运单分析*/List<Waybilldetail> waybilldatailList(Long sn);

(2)在OrdersBiz当中注入IWaybillWS

a、修改OrdersBiz

b、修改applicationContext_biz.xml

<property name="waybillWs" ref="waybillClient"></property>

(3)在OrdersBiz当中创建waybilldatailList方法通过运单号查询运单详情

/** 通过运单号查询运单详情*/@Overridepublic List<Waybilldetail> waybilldatailList(Long sn) {return waybillWs.waybilldetailList(sn);}

3、通过运单号查询运单详情

(1)修改OrderdetailBiz,注入对应的接口

a、编写对应的类并设置set方法

 private IWaybillWS waybillWs;private ISupplierDao supplierDao;public void setWaybillWs(IWaybillWS waybillWs) {this.waybillWs = waybillWs;}public void setSupplierDao(ISupplierDao supplierDao) {this.supplierDao = supplierDao;}
b、设置对应的配置文件applicationContext_biz.xml

<property name="supplierDao" ref="supplierDao"></property>
<property name="waybillWs" ref="waybillClient"></property>

(2)修改OrderdetailBiz当中的doOutStore方法

          //客户Supplier supplier = supplierDao.get(orders.getSupplieruuid());//在线预约下单,获取运单号Long waybillsn = waybillWs.addWaybill(1l, supplier.getAddress(), supplier.getContact(), supplier.getTele(), "--");//更新运单号orders.setWaybillsn(waybillsn);

4、ERP系统当中显示物理系统的信息

(1)OrdersAction当中

// 根据运单号查询运单详情public void waybilldetailList() {List<Waybilldetail> waybilldatailList = ordersBiz.waybilldatailList(waybillSn);write(JSON.toJSONString(waybilldatailList));}

(2)修改orders.html

(3)修改orders.js


(4)访问:http://localhost:8080/erp/orders.html?oper=orders&type=2

(5)添加按钮弹出运单详情

a、修改orders.html

<div id="waybillDlg" style="padding:2px;" class="easyui-dialog" data-options="title:'运单详情',width:500,height:300,modal:true,closed:true" ><table id="waybillgrid"></table>
</div>
b、修改orders.js

// 订单已经出库if (rowData.state * 1 == 1) {// 添加详情的按钮var options = $('#ordersDlg').dialog('options');var toolbar = options.toolbar;toolbar.push({text : '运单详情',iconCls : 'icon-search',handler : function() {$('#waybillDlg').dialog('open');$('#waybillgrid').datagrid({url:'orders_waybilldetailList?waybillsn=' + $('#waybillsn').html(),columns:[[{field:'exedate',title:'执行日期',width:100},{field:'exetime',title:'执行时间',width:100},{field:'info',title:'执行日期',width:100}]],rownumbers:true});}});//重新渲染工具栏$('#ordersDlg').dialog({toolbar : toolbar});
e、访问

http://localhost:8080/erp/orders.html?oper=orders&type=2

Java全栈开发---Java ERP系统开发:商业ERP(十三)CXF框架,物流BOS系统开发相关推荐

  1. 【Java全栈】Java全栈学习路线及项目全资料总结【JavaSE+Web基础+大前端进阶+SSM+微服务+Linux+JavaEE】

    目录 jdk api 1.8中文版 jdk api 1.8_google.CHM 零:Java 全栈知识体系 第一阶段:JavaSE 一,程序应用(★★) 二,面向对象程序设计基础(★★★) 面向对象 ...

  2. Java全栈体系路线(总结不易,持续更新中)

    文章目录 Java全栈工程师 <font color=orange>Java基础 基础语法 面向对象 工具类 集合框架 序列化 反射机制 注解 文件处理 设计模式 视频教程 文档教程 练习 ...

  3. Java全栈(二)JavaSE:25.File类和IO流

    1 java.io.File类 1.1 概述 File类是java.io包下代表与平台无关的文件和目录,也就是说如果希望在程序中操作文件和目录都可以通过File类来完成,File类能新建.删除.重命名 ...

  4. java全栈前景_Java全栈开发哪个发展前景好

    原标题:Java全栈开发哪个发展前景好 全栈和java哪个能更好迎合市场需求,有同学咨询学习哪个在以后前景和工作薪水上能更吃香,首先我们先来了解下Java开发和全栈开发的区别. 全栈开发工程师是指掌握 ...

  5. python全栈和java全栈_Java和全栈开发哪个发展前景好

    展开全部 全栈和java哪个能更好62616964757a686964616fe58685e5aeb931333365633839迎合市场需求,有同学咨询学习哪个在以后前景和工作薪水上能更吃香,首先我 ...

  6. java 前端工作内容_java前端、java后端、java全栈工作主要内容是什么?哪个薪资高?...

    摘要 最近,听了一场关于java全栈工程师职位的简介说明,里面很清楚的说明了一下前端,后端,全栈都是做什么工作的.其实,想做这个行业,就应该了解职能以及技能需求,这样学习才能更高效.我知道一些刚刚入行 ...

  7. Java全栈学习路线-拭去心尘

    一.JavaSE(熟练使用IDEA(私下学习可以,但进公司做项目不要使用破解版)和Eclipse) 辅助语言:C++(面向对象语言,偏向底层,语法和Java类似,我个人偏好C++为辅助语言)+pyth ...

  8. Java全栈工程师学习

    Java全栈看似内容庞杂,只要掌握方法成功离我们很近,话不多说,上硬货! Web后端架构 后端进阶第一步,先把Web架构相关的技术学好吧,因为之前大家都做过Java Web项目,想必对这块内容还是比较 ...

  9. 1. JAVA全栈知识体系--- Java基础

    1. JAVA全栈知识体系- Java基础 文章目录 1. JAVA全栈知识体系--- Java基础 1.1 语法基础 面向对象特性? a = a + b 与 a += b 的区别 3*0.1 == ...

  10. 超全面Java全栈知识体系,定期更新(最近更新:2022.8.2)...

    前言 最新Java全栈知识系统,定期更新..... 本套知识体系涵盖六大块: 一.前端基础 涵盖HTML5.CSS3.JavaScript.jQuery.Layui.Bootstrap等: 二.Jav ...

最新文章

  1. Bash,Vim,gdbgit常用命令
  2. pymysql的安装
  3. linux最小安装桌面,Linux工作环境:CentOS7最小安装+Xfce桌面环境
  4. 语文高考识记现代汉字的字形【转】
  5. 【OpenCV 例程200篇】60. 非线性滤波—联合双边滤波
  6. JavaScript中charAt函数
  7. 调试经验——Win 10 Excel中Alt+Tab不能切换窗口的解决方法
  8. amoeba主从复制
  9. Cipher的初应用
  10. mysql 父子结构排序_mysql 父子结构排序_MySQL
  11. python 典型相关分析_Canonical Correlation Analysis 典型相关分析
  12. Julia 安装包报错操作超时
  13. 国产电子书的代表作是什么样的?
  14. 深信服终端检测响应平台EDR-远程命令执行漏洞
  15. 华为手机在线将语音转换文字的办公黑科技便签,轻松提高你的工作效率
  16. JavaScript中Map方法的详解
  17. js逆向 | 七麦数据analysis加密逻辑分析(最新)
  18. 现代数学的基本概念:数学是一门研究数量、结构、变化以及空间等基本概念和方法的学科,数学的本质在于研究数学对象之间的关系。
  19. English Learning - L2-14 英音地道语音语调 重音技巧 2023.04.10 周一
  20. 【LeetCode 】试题总结:广度优先搜索(BFS)

热门文章

  1. 北京师范大学c语言题库,北京师范大学C语言题库.doc
  2. 分布式系统架构、微服务架构等架构区别
  3. android 网易音乐sdk,Netease Music SDK 开发文档
  4. Blender-UV Mapping
  5. CFA2019notes的PDF版本,热乎乎的百度网盘分享
  6. python info函数的使用方法_Python 函数
  7. 5 步教你将 MRS 数据导入 DWS
  8. SPSS数据转换插件v1.4发布
  9. echarts全国地图显示到城市级别
  10. HBuilderX 连接网易mumu手机模拟器进行App开发