资讯专栏INFORMATION COLUMN

SpringBoot 使用CXF 集成WebService

miracledan / 931人阅读

摘要:启动后我们直接输入项目地址指定的服务名会看到生成的。测试在这就不写了,大家可以使用生成客户端,或者直接使用发送格式数据进行请求。总结使用集成开发很简单,不用在多带带的部署到外部上,这为我们熟悉开发的同学带了很好的体验。

1、写在前面

WebService 对我来说既熟悉又陌生,已经将近六七年没有看到过他了, 具体的介绍我就不多少了, 想了解的百度百科下说的很详细。

之所以突然研究WebService是接到一个需求要去给 XX 项目做一个适配层,他们原有系统是使用webservice做的,所以……
那我们就来看看,这一个古老的技术如何和如今最流行的框架SpringBoot进行结合。

2、SpringBoot 集成WebService 2.1 导入依赖
compile("org.springframework.boot:spring-boot-starter-web-services",
            "org.apache.cxf:cxf-spring-boot-starter-jaxws:3.2.5",
            "org.apache.cxf:cxf-rt-frontend-jaxws:3.1.6",
            "org.apache.cxf:cxf-rt-transports-http:3.1.6")

我是用Gradle 来构建项目的,使用Maven一样,添加以上jar依赖就可以了。

2.2 开发Webservice接口
/**
 * serviceName 服务名称
 * targetNamesPace : 一般都是接口包倒序,也可以自定义
@javax.jws.WebService(serviceName = "gzcxfw_wx_webserviceService",
        targetNamespace = "http://36.101.208.59:8090/axis/services/bdcgzcxfw_wx")
public interface WebService {
    /**
     *
     * @param wxid     微信ID
     * @param xm       姓名
     * @param sfzh     身份证号
     * @param sjh      手机号
     * @param macId    预定用户
     * @param password 密码
     * @return 查询结果 Base64字符串
     */
    @WebMethod(operationName = "gzcxfw_hlw_wxrz_Info_cs")
    @WebResult(name = "gzcxfw_hlw_wxrz_Info_csReturn")
    String gzcxfwHlwWxrzInfoCs(@WebParam(name = "WXID", targetNamespace = "http://36.101.208.59:8090/axis/services/bdcgzcxfw_wx") String wxid, @WebParam(name = "XM") String xm,
                               @WebParam(name = "SFZH", targetNamespace = "http://36.101.208.59:8090/axis/services/bdcgzcxfw_wx") String sfzh, @WebParam(name = "SJH") String sjh,
                               @WebParam(name = "mac_id", targetNamespace = "http://36.101.208.59:8090/axis/services/bdcgzcxfw_wx") String macId, @WebParam(name = "password") String password
    );
2.3 实现类
/**
 * @author yueli
 * @date 2019-08-05 19:17
 */
@javax.jws.WebService(serviceName = "gzcxfw_wx_webserviceService",
        targetNamespace = "http://36.101.208.59:8090/axis/services/bdcgzcxfw_wx")
public class WebServiceImpl implements WebService {

    private static Logger logger = LoggerFactory.getLogger(CatalogInfoImpl.class);


    @Override
    public String gzcxfwHlwWxrzInfoCs(String wxid, String xm, String sfzh, String sjh, String macId, String password) {
        logger.info("gzcxfwHlwWxrzInfoCs: 入参- wxid:{}, xm:{}, sfzh:{}, sjh:{}, macId:{}, pawd:{}", wxid, xm, sfzh,
                macId, password);

        return wxid + “:” + sfzh;
    }

实现类就很简单了。和我们一般写的没啥区别,

2.4 发布
package com.tusdao.base.configuration;

import com.tusdao.TusdaoWebserviceApplication;
import com.tusdao.webservice.service.WebService;
import com.tusdao.webservice.service.impl.WebServiceImpl;
import org.apache.cxf.Bus;
import org.apache.cxf.bus.spring.SpringBus;
import org.apache.cxf.jaxws.EndpointImpl;
import org.apache.cxf.transport.servlet.CXFServlet;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

import javax.xml.ws.Endpoint;


/**
 * @author yueli
 * @date 2019-08-05 19:24
 */
@Configuration
@ComponentScan(basePackageClasses = TusdaoWebserviceApplication.class)
public class CxfConfig {
    @SuppressWarnings("all")
    @Bean(name = "cxfServletRegistration")
    public ServletRegistrationBean dispatcherServlet() {
        //创建服务并指定服务名称
        return new ServletRegistrationBean(new CXFServlet(), "/axis/services/*");
    }

    @Bean(name = Bus.DEFAULT_BUS_ID)
    public SpringBus springBus() {
        return new SpringBus();
    }


    @Bean
    public WebService webService() {

        return new WebServiceImpl();
    }

    /**
     * 注册WebServiceDemoService接口到webservice服务
     *
     * @return
     */
    @Bean
    public Endpoint endpoint() {
        EndpointImpl endpoint = new EndpointImpl(springBus(), webService());
        endpoint.publish("/bdcgzcxfw_wx");
        endpoint.getInInterceptors().add(new ServerNameSpaceInterceptor());
        //endpoint.getInInterceptors().add(new InInterceptor());
        return endpoint;
    }

}

这个就简单了, 我们在使用时可以直接copy过去就行。
最后就是启动项目了。
启动后我们直接输入项目地址:http://localhost:8090/指定的服务名

会看到生成的ssdl。到这基本搭建就结束了。测试在这就不写了, 大家可以使用wsdl生成客户端,或者直接使用http发送xml格式数据进行请求。

3、总结

springboot使用CXF集成Webservice 开发很简单,不用在多带带的部署到外部tomcat上, 这为我们熟悉springboot开发的同学带了很好的体验。

有想要完整实例的请看着 >> https://github.com/yuelicn/sp...
或者直接clone >> https://github.com/yuelicn/sp...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/76156.html

相关文章

  • Java系统WebService:Spring与CXF集成

    摘要:我们再使用这样的来查看这个服务具体的定义这个用以通过查看服务也就是我们开头所说的用通用格式来描述的功能入参和返回值,使我们的调用者明白服务的使用方法具体详情可以查看我们的这个服务的页面。 WebService是什么呢?顾名思义,是Web系统提供的服务,其目的呢,往大了说:是系统实现多异构模块协同合作,服务实现SOA(Services oriented Architecture面向服务的...

    waterc 评论0 收藏0
  • WebService就是这么简单

    摘要:它使用方式,接收和响应外部系统的某种请求。回顾我们在学习基础网络编程章节已经知道了这么一个连接了。使用指定名称的命名空间。名词简单对象访问协议作为一个基于语言的协议用于有网上传输数据。以的根元素出现。代理这么一个概念就更加清晰了。 WebService介绍 首先我们来谈一下为什么需要学习webService这样的一个技术吧.... 问题一 如果我们的网站需要提供一个天气预报这样一个需求...

    SwordFly 评论0 收藏0
  • RPC框架是啥之Apache CXF一款WebService RPC框架入门教程

    摘要:支持相关规范和标准,包括同上。支持多种传输协议和协议绑定数据绑定。构建端还有其服务实现,接口使用注解,标明是一个远程服务接口。然后编写一个的启动程序,并运行,我想你会成功的因为我看到了下图是一种跨平台的技术协议。 本博客 猫叔的博客,转载请申明出处 学习系列 RPC框架是啥? RPC框架是啥之Java自带RPC实现,RMI框架入门 Apache CXF一款WebService RP...

    SolomonXie 评论0 收藏0
  • 使用 Apache cxf 创建 WebService 服务端

    摘要:本地服务地址具体端口跟配置有关配置添加依赖包在增加的配置和的配置编写服务在增加的配置,记得要的配置就能看到接口说明可以直接运行的 ws-server-demo 本地服务地址(具体端口跟tomcat配置有关) http://localhost:8280/services/HelloWorld?wsdl spring + cfx 配置 maven 添加依赖包 org.apache.c...

    seasonley 评论0 收藏0
  • 使用 Apache cxf 实现 WebService 客户端

    摘要:证书有两种形式指定路径有三种形式的插件可以指定参数来解决一下常见的问题下的可以选择所需的命令参数使用参考添加解决中命名冲突添加指定自动生成的包名 ws-client-demo 客户端调用远程服务 http://localhost:8280/services/HelloWorld?wsdl spring + cfx 配置 maven 添加依赖包 org.apache.cxf c...

    mingzhong 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<