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;

  @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和引用

时间: 2024-10-01 07:42:50

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

spring+resteasy开发webservice服务

有一段时间没有更新博客,主要是最近一段时间自己比较迷茫,一直在思考自己以后的路该怎么走.希望大家也可以给我一些建议,谢谢!好了,回归正题,今天给大家带来的是spring+resteay开发webservice服务,不知道大家是否在这之前接触过webservice,我之前所了解的webservice是使用cxf还有axis2开发的,但是我觉得实现起来比较麻烦,而且不灵活,今天给大家介绍一种比较灵活的提供webservice服务的技术:resteasy.下面我重点讲解的resteasy常用的一些知识

WebService开发笔记 1 -- 利用cxf开发WebService竟然如此简单

现在的项目中需要用到SOA概念的地方越来越多,最近我接手的一个项目中就提出了这样的业务要求,需要在.net开发的客户端系统中访问java开发的web系统,这样的业务需求自然需要通过WebService进行信息数据的操作.下面就将我们在开发中摸索的一点经验教训总结以下,以供大家参考. 我们项目的整个架构使用的比较流行的WSH MVC组合,即webwork2 + Spring + Hibernate; 1.首先集成Apacha CXF WebService 到 Spring 框架中; apache

利用cxf开发WebService

利用cxf开发WebService 1.什么是CXF Apache CXF =Celtix + Xfire 支持多种协议: ?    SOAP1.1,1,2 ?    XML/HTTP ?    CORBA(Common ObjectRequest Broker Architecture公共对象请求代理体系结构,早期语言使用的WS.C,c++,C#) ?    并可以与Spring进行快速无缝的整合 ?    灵活的部署:可以运行在Tomcat,Jboss,Jetty(内置),IBMWS,Bea

webservice 之 使用cxf开发WebService服务器端接口

摘要:webservice 不是一种新技术,它是一种跨平台,跨语言的规范,用于不同平台,不同语言开发应用之间的交互. cxf:是java主流的WebService实现框架. 接下来开始 使用cxf开发WebService服务器端接口 1.新建一个maven项目: 2. 项目用jdk1.7(因为1.7有webservice的默认实现)项目结构如: 3. 首先新建接口,HelloWorld.java: package com.wh.webservice; import javax.jws.WebSe

使用cxf开发webservice接口

项目中经常用到开发webservice接口,及调用webService接口.这里讲解如何使用cxf开发webService接口. 一.webservice介绍及理解 webservice是一种跨平台,跨语言的规范,用于不同平台,不同语言开发的应用之间的交互.        比如,平台平台淘宝.京东想获取其他快递公司数据接口,需快递公司开放数据接口.       那么 webservice就是出于以上类似需求而定义出来的规范:无需关心对方什么平台上开发以及使用何种语言开发.       只关心调用

搭建web项目结合spring+cxf的webservice服务

服务端: 服务端和客户端都需要引入包 1 antlr-2.7.7.jar 2 aopalliance-1.0.jar 3 asm-3.3.jar 4 commons-collections-3.2.1.jar 5 commons-lang-2.6.jar 6 commons-logging-1.1.1.jar 7 cxf-2.4.2.jar 8 cxf-manifest.jar 9 cxf-xjc-boolean-2.4.0.jar 10 cxf-xjc-bug671-2.4.0.jar 11

spring + cxf 的webservice服务端和客户端功能

原文:spring + cxf 的webservice服务端和客户端功能 源代码下载地址:http://www.zuidaima.com/share/1550463730928640.htm spring + cxf 的webservice服务端和客户端功能. 提供页面调用ws和java代码调用两种方式. 引用jar包请下载:http://pan.baidu.com/s/1jGog2WI

node开发指南中的microblog项目中遇到的问题总结及解决方法

1      使用connect-mongdo时,报错:Cannot read property 'Store' of undefined 解决: require('connect-mongo')的时候加一个参数express,如下: var express = require('express'); var MongoStore = require('connect-mongo')(express), 2      使用app.use(express.router(routers)) 提示 h

CXF 开发 WebService

什么是CXF: Apache CXF = Celtix + Xfire 支持多种协议: SOAP1.1,1.2 XML/HTTP CORBA(Common Object Request Broker Architecture公共对象请求代理体系结构,早期语言使用的WS.                    C,c++,C#) 并可以与Spring进行快速无缝的整合 灵活的部署:可以运行在Tomcat,Jboss,Jetty(内置),IBMWS,BeaWL上面. 安装CXF的其他支持项目: An