Cxf框架中@WebService注解的使用
最近工作中总是不可避免的使用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接口就会进来执行这个方法了
@Override
public 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在这里配置多个就行
**/
@Bean
public 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了,如果你看到这里,希望对你有帮助!
Cxf框架中@WebService注解的使用的更多相关文章
- WebService系列二:使用JDK和CXF框架开发WebService
一.使用JDK开发WebService 服务端程序创建: 1.新建一个JDK开发webservice的服务端maven项目JDKWebServiceServer 2. 定义一个接口,使用@WebSer ...
- WEBSERVICE之CXF框架开发webservice
之前学习了使用jdk开发webservice服务,现在开始学习使用框架(cxf)开发webservice. 1.准备工作 A.使用cxf开发webservice服务,需要用到apache-cxf-3. ...
- SSM框架中的注解,配置和控制器相关笔记
常规SSM实例 探索SSM理论的前提,应该是在对框架基础的运作方式有一定了解,以下是个人Android后台项目,用SSM框架快速搭建,以下是代码,主要 观察结构. 代码结构: model实体类 Ida ...
- 利用CXF框架开发webservice
开发服务端代码 1. web.xml文件中添加cxf的servlet 2. 定义接口 @WebService(targetNamespace="http://UserInfo.ws.com& ...
- 详解Java的Spring框架中的注解的用法
转载:http://www.jb51.net/article/75460.htm 1. 使用Spring注解来注入属性 1.1. 使用注解以前我们是怎样注入属性的 类的实现: class UserMa ...
- Sping框架中的注解详解
传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点:1.如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大:如果按需求分开.xml文件 ...
- rop框架中@ServiceMethod注解属性
@ServiceMethod 属性 method :代码服务方法名version :表 示 版 本 号 group:服务分组名.服务的分组没有特殊的意义,您可以为服务定义一个分组,以便在事件监听器.服 ...
- spring框架中的注解
- WebService之CXF框架
本文主要包括以下内容 ant工具的使用 利用cxf实现webservice cxf与spring整合 ajax访问webservice ant 工具 1.为什么要用到ant这个工具呢? Ant做为一种 ...
- webservice第三篇【接口开发webservice、CXF框架使用、IDEA下使用webservice、小例子】
实现接口的webservice 服务端 import javax.jws.WebService; /**面向接口的webservice发布方式 * * */ @WebService public in ...
随机推荐
- React 使用链表遍历组件树
React 为在有限的资源情况下,更好地控制UI的更新,提出了时间分片的概念.以达到三个目标: performing non-blocking rendering(无阻塞渲染):applying up ...
- C#笔记誊录<二>
c#编译器把源码编译成IL(中间)代码,再由CLR通过即时编译器把IL代码编译成本机机器语言(平台语言) www.webkaka.com//测试服务器的网速 ctrl+k+d 代码对其 CTRL+K+ ...
- Maven简答题
1.什么是Maven? 自动化构建工具,专注服务于Java平台的项目构建和依赖管理 2.使用Maven的好处以及原因? (1)大量的jar包反复复制,造成冗余.使用Maven后每个jar包只在本地仓库 ...
- MySQL下载,安装,配置环境变量【0基础小白用】
一,下载 选择社区版的,下载地址:https://dev.mysql.com/downloads/installer/ ,选择离线安装包 二,安装 1,双击安装包文件,这里选择服务模式,会安装在默认 ...
- 在 Windows 上使用VirtualBox 安装 Ubuntu
一.VirtualBox虚拟机软件 之前使用过VMWare,这是第一次尝试使用VirtualBox,记录一下~ 我们可以从官网下载VirtualBox,地址:https://www.virtualbo ...
- linux 创建 挂载 ntfs分区
格式化为ntf分区 先用fdisk创建分区 格式化 mkfs.ntfs -f /dev/sda2 挂载 zxd@x79:~$ cat /etc/fstab# /etc/fstab: static fi ...
- thunar文件管理器修改默认的关联的终端
有时候在文件管理器的文件夹中打开终端操作很方便.目前好用的文件管理器基本和虚拟中终端基本上是各个桌面环境的配套产品. 比如xfce环境的thunar文件管理器如果想搭配lxde环境的lxtermina ...
- EMQX 在 Kubernetes 中如何进行优雅升级
背景 为了降低 EMQX 在 Kubernetes 上的部署.运维成本,我们将一些日常运维能力进行总结.抽象并整合到代码中,以 EMQX Kubernetes Operator 的方式帮助用户实现 E ...
- 学习-Vue2-Vue实例-数据与方法-数据的响应式
当一个实例被创建时,它将data对象中的所有的property加入到Vue的响应式系统中. 当这些property的值发生改变时,视图将会产生"响应",即匹配更新为新的值.当这些数 ...
- ipmitool使用报错Could not open device at /dev/ipmi0 or /dev/ipmi/0 or /dev/ipmidev/0: No such file or directory
ipmitool使用报错处理 Could not open device at /dev/ipmi0 or /dev/ipmi/0 or /dev/ipmidev/0: No such file or ...