Java调用与发布Webservice接口(一)
一 准备工作
(一)开发环境
demo以springboot为基础框架,使用到了httpclient、hutool等依赖,详情如下:
springboot版本:
org.springframework.boot
spring-boot-starter-parent
2.7.8
cxf与httpclient 、hutool依赖:
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.20</version>
</dependency>
二 发布接口
首先创建一个测试接口,@WebService声明这是一个webservice接口,name为接口名称,targetNamespace 很重要,表明webservice接口的命名空间。@WebMethod()声明这是一个接口下的函数方法,@WebParam声明函数需要的参数。
@WebService(name = "UnifySearchService", targetNamespace = "http://com.test.webservice/service")
public interface UnifySearchService {
@WebMethod()
String testService(@WebParam(name = "parameter") String parameter);
}
创建该接口的实现类就可以在函数种编写业务处理代码:
@Override
public String testService(String parameter) {
// code
return "parameter:" + parameter;
}
创建发布webservice接口的配置文件:
@Configuration
public class CxfWebServiceConfig {
@Resource
private UnifySearchService unifySearchService;
@Bean(name = Bus.DEFAULT_BUS_ID)
public SpringBus springBus() {
return new SpringBus();
}
/**
* 访问地址 http://127.0.0.1:8085/ws/service?wsdl
*/
@Bean
public Endpoint endpoint() {
EndpointImpl endpoint = new EndpointImpl(springBus(), unifySearchService);
endpoint.publish("/service");
return endpoint;
}
}
在applicaiton.properties中,添加以下配置:

创建完毕后运行项目,访问http://127.0.0.1:8085/ws/service?wsdl,可见以下内容:
到此,webservice接口就发布成功了。
三 接口调用
(一)httpclient调用
webservice接口调用在此展示两种最简单的方式,先说最简单的调用方法,httpclient方法调用,需要使用soapUI工具生成xml请求体:
再创建httpclient请求,将上面的xml请求体作为请求参数soapXml,发送POST请求:
public static String doPostSoap(String postUrl, String soapAction, String soapXml) throws IOException {
String retStr = "";
CloseableHttpClient httpClient = CustomerHttpClient4.getHttpClient();
HttpPost httpPost = new HttpPost(postUrl);
httpPost.setHeader("Content-Type", "text/xml;charset=UTF-8");
httpPost.setHeader("SOAPAction", soapAction);
StringEntity data = new StringEntity(soapXml, Charset.forName("UTF-8"));
httpPost.setEntity(data);
try (CloseableHttpResponse response = httpClient.execute(httpPost)) {
HttpEntity httpEntity = response.getEntity();
String entity = EntityUtils.toString(httpEntity, "UTF-8");
if (response.getStatusLine().getStatusCode() == 200) {
retStr = entity;
}
}
return retStr;
}
public static void main(String[] args) {
String result;
String xmlParam = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ser=\"http://com.wp.webservice/service\"><soapenv:Header/><soapenv:Body><ser:testService><parameter>HTTP client请求</parameter></ser:testService>/soapenv:Body></soapenv:Envelope>";
try {
result = doPostSoap("http://localhost:8085/ws/service?wsdl", "", xmlParam);
} catch (IOException e) {
throw new RuntimeException(e);
}
System.out.println(result);
}
调用结果:

(二)hutool工具调用
基于hutool提供的SoapClient工具创建webservice请求调用:
public static String request(String url, String method, String targetNamespace, Map<String, Object> param) {
SoapClient client = SoapClient.create(url).setMethod(method, targetNamespace).setParams(param, false);
// 打印组装xml请求体
Console.log(client.getMsgStr(true));
String result = client.send();
return result;
}
public static void main(String[] args) {
Map<String, Object> param = new HashMap<>();
param.put("parameter", "hutool请求webservice接口");
String result = request("http://localhost:8085/ws/service?wsdl",
"ser:testService",
"http://com.wp.webservice/service",
param
);
System.out.println(result);
}
调用结果:

调用webservice接口除以上两种简便的方式外,还可使用cxf提供的工具类进行调用,具体的调用方法后续有时间再贴出来。
此外我在工作中遇到的是带有head认证的webservice接口,刚开始使用cxf框架,在拦截器中进行头部参数认证,但实际效果并不好,因此查找了以上两种方法,第一种可以适配所有情况,第二种需要进一步完善代码才可以,在后续的文章中会贴出代码,包括如何使用hutool调用带有head认证的webservice接口与cxf动态调用webservice接口,敬请期待。
Java调用与发布Webservice接口(一)的更多相关文章
- java调用.net的webservice接口
要调用webservice,首先得有接口,用已经写好的接口地址在myEclipse的目标project中,右键->new web service client-> 选择JAX-WS方式,点 ...
- java 调用wsdl的webservice接口 两种调用方式
关于wsdl接口对于我来说是比较头疼的 基本没搞过.一脸懵 就在网上搜 看着写的都很好到我这就不好使了,非常蓝瘦.谨以此随笔纪念我这半个月踩过的坑... 背景:短短两周除了普通开发外我就接到了两个we ...
- java调用第三方的webservice应用实例
互联网上面有很多的免费webService服务,我们可以调用这些免费的WebService服务,将一些其他网站的内容信息集成到我们的Web应用中显示. 一些常用的webservice网站的链接地址: ...
- java调用第三方的webservice应用实例【转载】
互联网上面有很多的免费webService服务,我们可以调用这些免费的WebService服务,将一些其他网站的内容信息集成到我们的Web应用中显示. 一些常用的webservice网站的链接地址: ...
- Linux虚拟机:发布WebService接口出现异常,无法访问接口
Linux虚拟机:发布WebService接口出现异常,无法访问接口 今天在部署WebService工程的时候遇到的问题: 在Linux虚拟机上部署一个tomcat同时在tomcat下放置2个工程,其 ...
- python实现建立soap通信(调用及测试webservice接口)
实现代码如下: #调用及测试webservice接口 import requests class SoapConnect: def get_soap(self,url,data): r = reque ...
- 调用jersey发布的接口webservice,通过HttpPost传递文件
项目媒体文件之前都是上传到七牛云处理,现在客户为了安全和私密性,准备将移动端拍摄的图片和视频传递到文件服务器,所以就想办法能不能在服务器端发布一个WebService,供移动端调用.刚好之前做的接口都 ...
- Java调用IIS发布的WebService
之前的一篇博客说了一个实例,就是用VS2005在IIS上发布WebService.今天我们来实现在Eclipse上用Java来调用昨天发布的WebService. 首先咋在浏览器中输入http://1 ...
- WebService:java配置类形式发布WebService接口及遇见的问题总结
配置WebService前需要以下依赖jar包 #版本只供参考,具体看项目 <dependency> <grouId>org.apache.cxf</grouId> ...
- Java借助axis2发布WebService
Webservice: 1.Xml: 2.WSDL: Web service描述语言(WSDL)就是这样一个基于XML(标准通用标记语言下的一个子集)的语言,用于描述Web service及其函数.参 ...
随机推荐
- Linux内核虚拟内存管理之匿名映射缺页异常分析
今天我们就来讨论下这种缺页异常,让大家彻底理解它.注:本文使用linux-5.0内核源代码.文章分为以下几节内容: 匿名映射缺页异常的触发情况 0页是什么?为什么使用0页? 源代码分析 3.1 触发条 ...
- wpf之样式
在Window.Resources中书写样式 : <Window.Resources> <Style TargetType="Button" > </ ...
- ajax异步请求数据还没有返回,页面时空白的如何处理
使用骨架屏,给用户一种正在解析数据的感觉 : element-ui的骨架屏 :https://element.eleme.cn/#/zh-CN/component/skeleton
- KubeSphere 社区双周报 | OpenFunction v1.0.0-rc.0 发布
KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书.新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列 ...
- 如何在 ubuntu 上搭建 minio
由于腾讯的对象存储服务器(COS)的半年免费试用期已过,所以寻思鼓捣一下 minio,试着在自己的服务器上搭建一套开源的 minio 对象存储系统. 单机部署基本上有以下两种方式. 直接安装 最基础的 ...
- AI五子棋_07 落子点四周棋形获取
AI五子棋 第七步 恭喜你到达第七步! 到这一步,你对战场环境就有了充分的了解.下面我们准备打造机器大脑了.你可能已经有你自己的想法了,不过别着急,先跟着我的思路做.我会提示你解决一些基本的问题. 棋 ...
- 快速激活JRebel的方法
当谈到 JRebel 的激活时,有几种方法可以让您在 IntelliJ IDEA 中使用它.以下是一些选项: 在线激活(推荐): 安装 JRebel 插件后,点击 Jrebel Activation ...
- 强化学习训练过程中的过度拟合(overfitting)
相关: A.I. Learns to Drive From Scratch in Trackmania 本文讨论的是强化学习中的过度拟合问题,要知道强化学习中的过拟合和其他的监督.无监督学习的过拟合不 ...
- TP5的项目能正常返回数据,但是状态码是500
翻出来以前一个很老的TP5项目,忘记是什么功能系统了,就本地启动了一下,发现返回状态码500,开始以为是index.php被我隐藏后rewrite导致的,后来搜索了一下,发现大家也有这个问题,然后看到 ...
- Cmocka 单元测试配置与使用
0. 前言 在 Windows 环境下配置 Cmocka 单元测试,并使用该框架进行单元测试. 1. Cmocka介绍 Cmocka 是一个 C 单元测试框架,支持 mock objects(打桩). ...