这里不介绍原理,只是记录自己spring+cxf的开发过程和遇到的问题

场景:第三方公司需要调用我们的业务系统,以xml报文的形式传递数据,之后我们解析报文存储到我们数据库生成业务单据;

WebService的框架由多种,这里选cxf,与Spring的集成比较好;

直接看代码

1 项目用的maven,首先添加依赖(这个依赖啊  ,教程引用几个的都有,这个看需要吧,我是用了四个)

          <dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf</artifactId>
<version>2.7.11</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>2.7.11</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>2.7.11</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http-jetty</artifactId>
<version>2.7.11</version>
</dependency>

2 配置web.xml,在原来基础上添加(这里我只是添加cxf配置,spring中基础的配置之前项目中肯定有,像什么context-param什么的我想你们肯定早就有了)

 <!-- cxf -->

    <servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/webservice/*</url-pattern>
</servlet-mapping>

3 配置applicationContext.xml(还是在原来的基础上添加如下)

3.1 首先在该xml添加命名空间,这是我在原来基础上添加的(红色部分是我自己添加的)

  

3.2 在原来基础上添加

 <!-- cxf配置 -->
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> <bean id="reimBillHandler" class="com.ufgov.lp.xml.sax.handler.ReimBillHandler" /> <bean id="reciveBillServiceImpl" class="com.ufgov.lp.bill.webservice.impl.ReciveBillServiceImpl">
<property name="reimBillHandler" ref="reimBillHandler"></property>
</bean> <jaxws:endpoint id="reciveBillService"
implementor="#reciveBillServiceImpl" address="/reciveBillService" />
<!-- cxf配置结束 -->

 接下来开始写代码

4 定义接口

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService; /**
*
* <p>接收报文接口</p>
* @author shangcg
* @since 2017年11月1日
*/ @WebService
public interface ReciveBillService { @WebMethod
public String request(@WebParam(name = "xmlStr") String xmlStr); }

5 创建实现类

import javax.annotation.Resource;
import javax.jws.WebService; import com.ufgov.lp.bill.webservice.ReciveBillService;
import com.ufgov.lp.bill.webservice.bean.LpBizBillDataCollect;
import com.ufgov.lp.xml.sax.handler.ReimBillHandler; @WebService
public class ReciveBillServiceImpl implements ReciveBillService { @Resource
ReimBillHandler reimBillHandler; @Override
public String request(String xmlStr) { try {
/**与数据库结构一致的javaBean对象*/
LpBizBillDataCollect lpBizBillDataCollect = new LpBizBillDataCollect(); //把传过来的报文直接装到对象中(实际上业务系统一般得对XML解析,这里不说解析)
lpBizBillDataCollect.setField01(xmlStr); //插入数据库(reimBillHandler注入进来才能调用方法)
reimBillHandler.excuteBillInsert(lpBizBillDataCollect); } catch (Exception e) {
e.printStackTrace();
}
return "这里是返回的报文";
} public ReimBillHandler getReimBillHandler() {
return reimBillHandler;
} //注意这里的set方法,不然稍后配置bean后会注入不进来
public void setReimBillHandler(ReimBillHandler reimBillHandler) {
this.reimBillHandler = reimBillHandler;
} }

6看ReimBillHandler (这个类就是本来业务系统已经存在的用@service标注的类,成功注入该类后,如果该类在注入其他类咱们就可以不用管了)

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import com.ufgov.lp.bill.dao.LpBizBillDao;
import com.ufgov.lp.bill.webservice.bean.LpBizBillDataCollect; /**
*
* <p>注入LpBizBillDao插入数据</p>
* @author shangcg
* @since 2017年11月3日
*/
@Service
public class ReimBillHandler{ @Autowired
LpBizBillDao lpBizBillDao; /**插入数据库表数据*/
public int excuteBillInsert(LpBizBillDataCollect lpBizBillDataCollect){ return lpBizBillDao.insert(lpBizBillDataCollect);//插入数据库数据
} }

说一下这些过程中我遇到的错误:

1 spring的bean注入不进来  解决:以@WebService注解的类,引用spring中bean事需要干两件事,第一是用@Resource注解注入,不是@autowire;   第二必须有set方法 ; 第三是ApplicationContext.xm必须配置bean和引用

spring+cxf 开发webService(主要是记录遇到spring bean注入不进来的解决方法)的更多相关文章

  1. struts1+spring+myeclipse +cxf 开发webservice以及普通java应用调用webservice的实例

    Cxf + Spring+ myeclipse+ cxf 进行  Webservice服务端开发 使用Cxf开发webservice的服务端项目结构 Spring配置文件applicationCont ...

  2. 使用cxf开发webservice应用时抛出异常

    在使用cxf开发webservice应用时,报出了类似下面的错误 JAXB: [javax.xml.bind.UnmarshalException: unexpected element (uri:& ...

  3. 【WebService】使用CXF开发WebService(四)

    CXF简介 Apache CXF = Celtix + XFire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了,以下简称为 CXF.CXF 继承了 Celtix ...

  4. idea+maven+spring+cxf创建webservice应用(二)生成客户端程序

    idea+maven+spring+cxf创建webservice应用(二)生成客户端程序,以上一篇为基础"idea+maven+spring+cxf创建webservice应用" ...

  5. 使用cxf开发webservice接口

    项目中经常用到开发webservice接口,及调用webService接口.这里讲解如何使用cxf开发webService接口. 一.webservice介绍及理解 webservice是一种跨平台, ...

  6. CXF开发WebService

    CXF开发Web Service 参考链接 使用 spring 框架来集成 Web Services 开发 浏览器调用接口 大概这样, 没成功 加@WebMethod(action="get ...

  7. idea开发工具下报Set language level to 6-@Override in interfaces的解决方法

    idea开发工具下报Set language level to 6-@Override in interfaces的解决方法 实现接口时报如下错误:Set language level to 6-@O ...

  8. Spring boot+CXF开发WebService

    最近工作中需要用到webservice,而且结合spring boot进行开发,参照了一些网上的资料,配置过程中出现的了一些问题,于是写了这篇博客,记录一下我这次spring boot+cxf开发的w ...

  9. Spring boot+CXF开发WebService Demo

    最近工作中需要用到webservice,而且结合spring boot进行开发,参照了一些网上的资料,配置过程中出现的了一些问题,于是写了这篇博客,记录一下我这次spring boot+cxf开发的w ...

随机推荐

  1. 并发中如何保证缓存DB双写一致性(JAVA栗子)

    并发场景中大部分处理的是先更新DB,再(删缓.更新)缓存的处理方式,但是在实际场景中有可能DB更新成功了,但是缓存设置失败了,就造成了缓存与DB数据不一致的问题,下面就以实际情况说下怎么解决此类问题. ...

  2. 【原创】从零开始搭建Electron+Vue+Webpack项目框架,一套代码,同时构建客户端、web端(二)

    摘要:上篇文章说到了如何新建工程,并启动一个最简单的Electron应用.“跑起来”了Electron,那就接着把Vue“跑起来”吧.有一点需要说明的是,webpack是贯穿这个系列始终的,我也是本着 ...

  3. Spring Boot 使用@Scheduled定时器任务

    摘要: Spring Boot之使用@Scheduled定时器任务 假设我们已经搭建好了一个基于Spring Boot项目,首先我们要在Application中设置启用定时任务功能@EnableSch ...

  4. Splash API 调用

    render.html render.html 接口用于获取 JavaScript 渲染的页面的 HTML 代码,接口地址就是 Splash 的运行地址加此接口名称,例如http://localhos ...

  5. 使用asp.net core 3.0 搭建智能小车2

    上一篇中我们把基本的运行环境搭建完成了,这一篇中,我们实战通过树莓派B+连接HC-SR04超声波测距传感器,用c# GPIO控制传感器完成距离测定,并将距离显示在网页上. 1.HC-SR04接线 传感 ...

  6. 洛谷P3121 【[USACO15FEB]审查(黄金)Censoring (Gold)】

    双栈+AC自动机 这题其实跟一道KMP算法的题有一些渊源,它就是这道题的简单板. Clear: 给你两个串A,B,每次在B串中从左到右找串A,并将该子串删除,直到找不到为止,问你能删几次. 样例输入: ...

  7. PyCharm安装及使用教程

    1  PyCharm下载 PyCharm的下载安装非常简单,可以直接到Jetbrains公司官网下载,具体步骤如下: (1)打开Pycharm官网http://www.jetbrains.com,选择 ...

  8. 分类算法之逻辑回归(Logistic Regression

    分类算法之逻辑回归(Logistic Regression) 1.二分类问题 现在有一家医院,想要对病人的病情进行分析,其中有一项就是关于良性\恶性肿瘤的判断,现在有一批数据集是关于肿瘤大小的,任务就 ...

  9. Android常见内存泄露

    前言 对于内存泄漏,我想大家在开发中肯定都遇到过,只不过内存泄漏对我们来说并不是可见的,因为它是在堆中活动,而要想检测程序中是否有内存泄漏的产生,通常我们可以借助LeakCanary.MAT等工具来检 ...

  10. Scrapy进阶知识点总结(六)——中间件详解

    概述 查看scrapy官网的框架图,可以看出中间件处于几大主要组件之间,类似于生产流水线上的加工过程,将原料按照不同需求与功能加工成成品 其中4,5处于下载器与引擎之间的就是下载中间件,而spider ...