欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

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

发布时间:2025/6/17 编程问答 56 豆豆
生活随笔 收集整理的这篇文章主要介绍了 spring+cxf 开发webService(主要是记录遇到spring bean注入不进来的解决方法) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

这里不介绍原理,只是记录自己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;@Overridepublic 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{@AutowiredLpBizBillDao lpBizBillDao;/**插入数据库表数据*/public int excuteBillInsert(LpBizBillDataCollect lpBizBillDataCollect){return lpBizBillDao.insert(lpBizBillDataCollect);//插入数据库数据 }}

 

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

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

转载于:https://www.cnblogs.com/cs-forget/p/7811400.html

总结

以上是生活随笔为你收集整理的spring+cxf 开发webService(主要是记录遇到spring bean注入不进来的解决方法)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。