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

摘要:
这里不介绍原理,只是记录自己spring+cxf的开发过程和遇到的问题场景:第三方公司需要调用我们的业务系统,以xml报文的形式传递数据,之后我们解析报文存储到我们数据库生成业务单据;WebService的框架由多种,这里选cxf,与Spring的集成比较好;直接看代码1项目用的maven,首先添加依赖org.apache.cxfcxf2.7.11pomorg.apache.cxfcxf-rt-frontend-jaxws2.7.11org.apache.cxfcxf-rt-transports-http2.7.11org.apache.cxfcxf-rt-transports-http-jetty2.7.112配置web.xml,在原来基础上添加˂!

这里不介绍原理,只是记录自己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添加命名空间,这是我在原来基础上添加的(红色部分是我自己添加的)

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

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   class="com.ufgov.lp.xml.sax.handler.ReimBillHandler" />
    
    <bean   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 定义接口

importjavax.jws.WebMethod;
importjavax.jws.WebParam;
importjavax.jws.WebService;


/*** 
 * <p>接收报文接口</p>
 * @authorshangcg
 * @since2017年11月1日
 */
@WebService
public interfaceReciveBillService {
  
  @WebMethod  
  public String request(@WebParam(name = "xmlStr") String xmlStr);   

}

5 创建实现类

importjavax.annotation.Resource;
importjavax.jws.WebService;

importcom.ufgov.lp.bill.webservice.ReciveBillService;
importcom.ufgov.lp.bill.webservice.bean.LpBizBillDataCollect;
importcom.ufgov.lp.xml.sax.handler.ReimBillHandler;


@WebService
public class ReciveBillServiceImpl implementsReciveBillService {

  @Resource 
  ReimBillHandler reimBillHandler;
  
  
 
  @Override
  publicString request(String xmlStr) {
    

    try{
      /**与数据库结构一致的javaBean对象*/LpBizBillDataCollect lpBizBillDataCollect  = newLpBizBillDataCollect();
      
      //把传过来的报文直接装到对象中(实际上业务系统一般得对XML解析,这里不说解析)
lpBizBillDataCollect.setField01(xmlStr);
      
      //插入数据库(reimBillHandler注入进来才能调用方法)
reimBillHandler.excuteBillInsert(lpBizBillDataCollect);
      
    } catch(Exception e) {
      e.printStackTrace();
    }
    return "这里是返回的报文";
  }

  
  publicReimBillHandler getReimBillHandler() {
    returnreimBillHandler;
  }

  //注意这里的set方法,不然稍后配置bean后会注入不进来
  public voidsetReimBillHandler(ReimBillHandler reimBillHandler) {
    this.reimBillHandler =reimBillHandler;
  }

}

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

importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.stereotype.Service;

importcom.ufgov.lp.bill.dao.LpBizBillDao;
importcom.ufgov.lp.bill.webservice.bean.LpBizBillDataCollect;


/*** 
 * <p>注入LpBizBillDao插入数据</p>
 * @authorshangcg
 * @since2017年11月3日
 */@Service
public classReimBillHandler{
  
  @Autowired
  LpBizBillDao lpBizBillDao;
  
  
  /**插入数据库表数据*/
  public intexcuteBillInsert(LpBizBillDataCollect lpBizBillDataCollect){
    
    return lpBizBillDao.insert(lpBizBillDataCollect);//插入数据库数据
}
  
}

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

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

免责声明:文章转载自《spring+cxf 开发webService(主要是记录遇到spring bean注入不进来的解决方法)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇LINUX环境下,达梦数据库8配置ODBC连接vue3.0搭建项目+map地图下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

在JSP+JAVA+XML+HTML下写的WEB图片验证码

核心代码:以下代码使用时请自行调配好路径。 HTML|:<form method="POST" action="LoginCheck">                  <input type="text" name="random" maxlength="4">                     <img src="...

Spring框架第一天(搭建项目)

Spring框架 1.简介 1.1 Spring是什么 一个开源的框架,是JavaEE开源框架 Spring是分层的 Java SE/EE应用 full-stack 轻量级开源框架,以IoC(Inverse Of Control:反转控制)和AOP(Aspect Oriented Programming:面向切面编程)为内核。 提供了展现层 Spring...

Servlet异步处理和文件上传

1. 什么是异步处理 原来,在服务器没有结束响应之前,浏览器是看不到响应内容的!只有响应结束时,浏览器才能显示结果! 现在异步处理的作用:在服务器开始响应后,浏览器就可以看到响应内容,不用等待服务器响应结束! 2. 实现异步的步骤 * 得到AsyncContext,它异步上下文对象 AsyncContext ac = request.startAsync(...

spring-boot 2.5.4,nacos 作为配置、服务发现中心,Cloud Native Buildpacks 打包镜像,GitLab CI/CD

spring-boot 2.5.4,nacos 作为配置、服务发现中心,Cloud Native Buildpacks 打包镜像,GitLab CI/CD 本文主要介绍 Java 通过 Cloud Native Buildpacks 打包镜像,通过 Gitlab 配置 CI/CD。以及使用 nacos 作为配置中心,使用 grpc 作为 RPC 框架。 前...

XML WebService实例详细解析

先,我们必须了解什么是webservice.就概念上来说,可能比较复杂,不过我们可以有个宏观的了解:webservice就是个对外的接口,里面有 函数可供外部客户调用(注意:里面同样有客户不可调用的函数).假若我们是服务端,我们写好了个webservice,然后把它给了客户(同时我们给了他 们调用规则),客户就可以在从服务端获取信息时处于一个相对透明的状态...

Error creating bean with name 'org.springframework.aop.support.DefaultBeanFactoryPointcutAdvisor#0': Initialization of bean failed; nested exception is java.lang.NoSuchMethodError: org.springframework

  昨晚在 使用spring aop, 然后Tomcat启动的时候, 报了这么个错:    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.aop.support.De...