最近工作中总是不可避免的使用WebService来对接功能,经过自己一番摸索,总结出了一些使用方法,做一下记录:

记录了两个SpringBoot版本使用WebService的一些问题和用法,SpringBoot版本如下:

<version>1.5.6.RELEASE</version>(老版) <version>2.6.0</version>(新版)

第一步:导入依赖

<dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-spring-boot-starter-jaxws</artifactId><version>3.2.4</version>
</dependency>

第二步:定义WebService
直接在业务层的Service层进行操作就行了,自己定义或者复用都可以

接口类:

package com.xrj.webtest.service;//包名import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;@WebService(targetNamespace = "http://service.webtest.xrj.com/")//命名空间:包名的反转
public interface DataWebservice {@WebMethod//对应wsdl文件里面的operation,外部调用的方法@WebResult String receiveMsg(@WebParam(name = "action") String action, @WebParam(name = "message") String message);//@WebResult 接口返回值 @WebParam 外部调用需要携带的参数
}

实现类:

package com.xrj.webtest.service.impl;import com.xrj.webtest.service.DataWebservice;
import org.springframework.stereotype.Service;import javax.jws.WebService;@WebService(serviceName = "DataService",//服务名,自己定义targetNamespace = "http://service.webservicedemo.xrj.com/",//同接口类的命名空间endpointInterface = "com.xrj.webtest.service.DataWebservice")//接口类相对路径
@Service
public class DataWebserviceImpl implements DataWebservice {//外部调用webservice接口就会进来执行这个方法了@Overridepublic String receiveMsg(String action, String message) {System.out.println("webservice进来工作了");//todo 做你想做的事情return "action="+action+","+"message="+message;//返回数据,后面调用接口会返回这个}
}

第三步:定义CXF的配置类(新老版本有差异)
使用@Configuration来进行定义一个配置类

package com.xrj.webtest.config;import com.xrj.webtest.service.impl.DataWebserviceImpl;
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.Configuration;import javax.xml.ws.Endpoint;@Configuration
public class CxfConfig {/**
新版:这个方法直接不要,据大佬说是SpringBoot2.0.6版本之后CXF这个配置被SpringBoot整合了,在application.yml配置文件中配置cxf.path=/test即可老版:这个方法要加上,放开注释这个配置后可以在浏览器直接访问  http://127.0.0.1:8080/test/data?wsdl ,显示当前webservice的所有接口(见代码后面截图)*/
//    @Bean
//    public ServletRegistrationBean dispatcherServlet() {
//        return new ServletRegistrationBean(new CXFServlet(), "/test/*");
//
//    }@Bean(name = Bus.DEFAULT_BUS_ID)public SpringBus springBus() {return new SpringBus();}/*** 站点服务,多个service在这里配置多个就行**/@Beanpublic Endpoint testData() {EndpointImpl endpoint = new EndpointImpl(springBus(), new DataWebserviceImpl());endpoint.publish("/data");return endpoint;}}

第四步:启动服务
这个时候你可能会出现一些问题(如果你用得新版本):
第一个:

Action:Consider defining a bean of type 'org.springframework.boot.autoconfigure.web.servlet.DispatcherServletPath' in your configuration.

这个时候看一下第三步,如果你是2.0.6版本以后得SpringBoot就把CXF配置类里的dispatcherServlet()方法删掉,对应得路径就在spring得配置文件中配置就行了

第二个:
在解决上面得问题之后,你可能还会遇到一个hibernate-validator得API不存在的问题(可能,或许和idea缓存有关),即使你没有用这个验证的包,导入依赖把

<dependency><groupId>org.hibernate</groupId><artifactId>hibernate-validator</artifactId><version>6.0.18.Final</version>
</dependency>

直接跑起来服务,按照上面配置得路径去查看wsdl文件,将文档保存下来备用,见图:

能看到这个文档,就证明WebService服务已经发布完成了.

第五步:使用Postman测试Webservice接口

这个主要分为两步:

第一步:构造soap+xml请求体
这里可以使用一款软件SoapUI来根据wsdl文件来一键生成soap_xml请求体(百度搜索下载一下)

软件左上角读取你之前保存的wsdl文件,自动生成所有接口的请求体

导入wsdl文件

生成对应的接口的url和soap+xml的请求体

第二部:

根据SoapUI生成的请求体和定义的url,用postman访问

注意的点:必须post请求,请求头Content-Type为text/xml;charset=utf-8

请求体参数:body参数配置raw,类型为xml,贴上模板补上参数

最后一键send发射,获取响应

到这里就Ojbk了,如果你看到这里,希望对你有帮助!

WebService使用相关推荐

  1. java工程webservice的应用案例

    在java项目中使用webservice 今天学习webservice,主要参考了网络上的一些文章. 1.关于原理的介绍:个人认为这篇文章写得不错了,戳这里. 2.关于demo的编写:个人认为这篇文章 ...

  2. 添加引用方式抛出和捕获干净的WebService异常

    转载:http://www.cnblogs.com/ahdung/p/3953431.html 说明:[干净]指的是客户端在捕获WebService(下称WS)抛出的异常时,得到的ex.Message ...

  3. 调试webservice遇到“测试窗体只能用于使用基元类型作为参数的方法”的解决办法...

    之前一直写webservice 没有遇见这种情况,因为一般返回的参数整形 字符串 之类的 都是基本类型,最多也就是把xml序列化为一个字符串返回,这次遇到了返回一个引用类型的,不能直接调试了.所以,现 ...

  4. 怎样提高WebService的性能

    服务器端WebService程序 using System.Runtime.Serialization.Formatters.Binary; using System.IO; using System ...

  5. 電子商務新紀元-WebService With BizSnap

    電子商務新紀元-WebService With BizSnap WebService SOAP(Simple Object Access Protocol) Web Services Descript ...

  6. webservice 暴漏接口_webService接口是什么?

    展开全部 Web 是使应用62616964757a686964616fe59b9ee7ad9431333431366263程序可以与平台和编程语言无关的方式进行相互通信的一项技术.Web 服务是一个软 ...

  7. .NET调用JAVA的WebService方法

    调用WebService,最简单的办法当然是直接添加WEB引用,然后自动产生代理类,但是在调用JAVA的WebService时并没有这么简单,特别是对于SoapHeader的处理,在网上也有相关资料, ...

  8. WebService客户端添加SOAPHeader信息

    WebService客户端添加SOAPHeader信息 通过JAXBContext创建Marshaller对头信息进行解析为dom,获取WSBindingProvider,使用Headers.crea ...

  9. Spring整合CXF,发布RSETful 风格WebService

    这篇文章是承接之前CXF整合Spring的这个项目示例的延伸,所以有很大一部分都是一样的.关于发布CXF WebServer和Spring整合CXF这里就不再多加赘述了.如果你对Spring整合CXF ...

  10. php的webservice的wsdl的XML无法显示

    php的webservice的因为wsdl有中文所以xml无法显示 可以用Nopepad++  转码即可  以UTF-8无BOM编码

最新文章

  1. 今年1篇Science,2篇NBT,2篇MP,1篇PNAS等11篇文章,遗传发育所白洋组在植物微生物组取得系列进展!
  2. wxWidgets:wxProcessEvent类用法
  3. [POJ 1442]Black Box
  4. .NET Core 3.0之创建基于Consul的Configuration扩展组件
  5. Android之ActivityManage长用方法总结
  6. Node.js下载安装及各种npm、cnpm、nvm、nrm配置(保姆式教程—提供全套安装包)—nrm的安装与配置(5)
  7. 美团技术leader:写给工程师的十条精进原则
  8. office2010软件安装资料及教程
  9. 开发板实战篇4 RGB565 LCD刷颜色数据
  10. 两个正态总体均值差的置信区间
  11. vl53l1x+stm32激光测距分析(待修改)
  12. 使用ZYNQ实现单LUT内容的动态修改(一)PL端OOC设计流程
  13. 读《春秋》有感之十九:晋之霸业衰落
  14. 关于AD与KiCad绘制PCB的一点看法
  15. 4g状态显示微信未连接服务器,我手机4G网是一直开着的,为什么登录微信确显示未连网!而且微信消息不提醒,但是打开后消息就出来了...
  16. 微软认证考试全国各地考点名录
  17. A. DS内排—直插排序
  18. Windows Sockets 规范及应用
  19. 如何删掉顽固文件和文件夹
  20. 在.gitmodules中找不到路径和丢失的.gitmodules文件的子模块映射

热门文章

  1. bitwise const和logic constness---龙之介《Effective C++》实验室
  2. 经典算法之顺序查找法
  3. 一种纯电动汽车的自动驾驶系统设计
  4. pmbok电子版_用技巧方法,让PMBOK知识点烂熟于心
  5. python 2.7 : 第一个Python程序
  6. Ubuntu18 安装Kinect驱动(openni、NITE、Sensor)及遇到的问题
  7. 文本文件和二进制文件,能用记事本打开的就是文本文件,不能用记事本打开的就是二进制文件
  8. AGC007 A - Shik and Stone(模拟)
  9. 一个小小的加密算法-凯撒加密C++实现
  10. kindle, 养精蓄锐与舒适区