使用cxf发布webservice接口,以及调用webservice接口
一、cxf发布webservice接口
添加maven依赖
<dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-core</artifactId><version>3.4.3</version></dependency><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-frontend-jaxws</artifactId><version>3.4.3</version></dependency><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-transports-http-jetty</artifactId><version>3.4.3</version></dependency>
这里的cxf-rt-transports-http-jetty依赖是内置jetty容器发布webservice接口
创建服务端接口
@WebService
public interface UserService {String getUserInfo(String name);
}
@WebService
public class UserServiceImpl implements UserService {@Overridepublic String getUserInfo(String name) {return "我是" + name;}
}
public class test {public static void main(String[] args) {System.out.println("web service start");UserService implementor = new UserServiceImpl();String address = "http://127.0.0.1:8082/userService";JaxWsServerFactoryBean factoryBean = new JaxWsServerFactoryBean();factoryBean.setAddress(address); // 设置暴露地址factoryBean.setServiceClass(UserService.class); // 接口类factoryBean.setServiceBean(implementor); // 设置实现类factoryBean.create();System.out.println("web service started");System.out.println("web service started");}}
启动main方法,正常情况会发布成功
浏览器访问http://127.0.0.1:8082/userService?wsdl 返回下面内容说明发布成功
二、客户端进行动态调用webservice接口
public static void main(String[] args) throws Exception {JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();Client client = dcf.createClient("http://127.0.0.1:8082/userService?wsdl");// namespace是命名空间,methodName是方法名QName name = new QName("http://service.test.example.com/", "getUserInfo");Object[] objects = client.invoke(name, "我没收到反馈");System.out.println(objects[0].toString());}
正常情况调用接口会返回成功
cxf的动态调用不适合传递自定义对象,需要传递自定义对象,需要使用静态调用生成本地代码
三、cxf静态调用生成本地代码
采用apache-cxf-3.4.3版本,jar包可到官网下载 http://cxf.apache.org/download.html
使用JAX-WS Proxy代理工厂方式开发客户端,首先需要使用wsdl2java工具生成web service在本地的代理接口
1、配置环境变量
wsdl2java.bat在CXF根目录\bin目录下,使用之前需要配置CXF环境变量,CXF_HOME变量值为CXF根目录,并在path中添加%CXF_HOME%\bin,如:
2、wsdl2java生成代理接口
配置好环境变量后,打开CMD命令行窗口,将当前目录切换到java工程src目录下,命令行输入如下格式命令,回车,即可根据wsdl生成服务端的代理接口。
wsdl2java -p ws.cxf -client http://127.0.0.1:8082/userService?wsdl
命令说明:
-p 指定代理接口所在包名,-client(生成客户端) 后面的字符串声明了服务接口的wsdl
public static void test() {JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();factory.setServiceClass(UserService.class);factory.setAddress("http://127.0.0.1:8082/userService");Object object = factory.create();UserService service = (UserService) object;UserVO userVO = new UserVO();userVO.setName("李师傅打开");String userInfo = service.getUserInfo(userVO);System.out.println(userInfo);}
3、第二种调用方法
ExecuteBindQSService executeBindQSService = new ExecuteBindQSService(ExecuteBindQSService.getWsdlLocation(WSDL_URL));ExecutePtt executePtt = executeBindQSService.getExecuteBindQSPort();//获取代理,并设置日志拦截器,打印日志Client client = ClientProxy.getClient(executePtt);client.getInInterceptors().add(new LoggingInInterceptor());client.getOutInterceptors().add(new LoggingOutInterceptor());// 超时时间设置HTTPConduit http = (HTTPConduit) clientProxy.getConduit();HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();httpClientPolicy.setConnectionTimeout(Integer.valueOf(webServiceConTimeout));httpClientPolicy.setReceiveTimeout(Integer.valueOf(webServiceRevTimeout));httpClientPolicy.setAllowChunking(false);http.setClient(httpClientPolicy);//调用方法执行Response response = executePtt.execute(request);
4、关闭元素校验
@EndpointProperty(key = “soap.no.validate.parts”, value = “true”)
四、使用的是apache的axis实现的
第二种访问webservice的方法是通过idea生成客户端代码,访问服务端接口向访问本地接口一样。使用的是apache的axis实现的。
使用cxf发布webservice接口,以及调用webservice接口相关推荐
- android调用web接口,Android调用webservice 接口
以查询手机号码归属地的Web service为例,它的wsdl为 1 在Android项目中导入??Ksoap2-android jar第三方jar包?? 2 Activity代码 public cl ...
- WebService工具类调用远程接口服务时java.io.IOException: Server returned HTTP response code: 500 for URL XXX
问题描述:在本地测试时,使用个人封装的Webservice代码工具类调用远程接口服务时,一切正常.但是一旦将该代码放到一个已有项目的中使用时,就会出现如下所示的错误提示 java.io.IOExcep ...
- android调用web接口,Android调用WebService系列之请求调用
好久没写博客,快有3年了.当初想在CTO把自己的技术文章一直延续,可却没有坚持! 开发Android网络App,通讯方式决定了你App所需的能力! 最近正在用Web Service进行通讯,那么就让我 ...
- HttpURLConnection调用webservice,HTTP调用webservice,简单的webservice调用
以前调用webservice一般使用axis.axis2先生成java类后,直接引用,多方便.但是有的webservice接口非常的函数,生成的java类非常多,有没有一种非常简化的方法. axis2 ...
- php如何调用mysql接口_php5 调用api接口
XXL-HEX v1.2.0,面向对象的 WebAPI 框架 版本1.2.0新特性 1.Client端,新增Javascript版本实现:前端JS可使用提供的Client,直接调用XXL-HEX的加密 ...
- Go 学习笔记(35)— Go 接口 interface (接口声明、接口初始化、接口方法调用、接口运算、类型断言、类型查询、空接口)
1. 接口概念 接口是双方约定的一种合作协议.接口实现者不需要关心接口会被怎样使用,调用者也不需要关心接口的实现细节.接口是一种类型,也是一种抽象结构,不会暴露所含数据的格式.类型及结构. 接口内部存 ...
- jni 调用java接口_JNI 调用 JAVA 接口
JNI 调用 JAVA 接口 介绍 JNI 是本地语言编程接口.它允许运行在JVM中的Java代码和用C.C++或汇编写的本地代码相互操作. 由于一些加密等情况的需要,需要在 so 层获取一些信息用于 ...
- java调用restful接口_Java调用RESTful接口的几种方式
前端一般通过Ajax来调用,后端调用的方式还是挺多的,比如HttpURLConnection,HttpClient,Spring的RestTemplate 服务端代码如下: 服务端接口请求的URL:h ...
- java调c的接口_Java调用C接口的简单示例
Java调用C接口的简单示例 正好需要用到Java调用dll里的C接口,想到自己做个简单的例子.我们可能需要自己生成dll文件,下边介绍一下,详细的步骤.主要参考https://blog.csdn.n ...
- cmd 调用webservice接口_C++ 调用 Webservice gSoap 方法
大体思路是:使用gsoap生成文件,把生成的相关文件均加载到项目中调用 本文以调用天气的webservice为例子,手把手教你. 步骤一 准备gSOAP工具:将gsoap_2.8.100.zip解压, ...
最新文章
- tensorflow中的tf.summary.image
- python概述_Python-概述
- Node爬取简书首页文章
- linux time
- 交叉渡线道岔规格_交叉渡线铁路道岔的型号及选用
- 为什么技术人一定要懂点“可信计算”?
- python里的装饰器
- 腾讯上线视频社交App:让你与陌生人美颜视频通话聊天
- win10如何提高电脑画质_win10电脑怎么提高画质 | 手游网游页游攻略大全
- gradle mysql依赖关系,如何在gradle中找到\删除未使用的依赖关系
- Redis开发与运维之第八章理解内存(四)
- Ubuntu——笔记本插入耳机没有声音的解决方案
- 创业指南:如何快速拿到天使投资?
- Unraid配置阿里云加速镜像安装荒野无灯qBittorrent镜像
- Java GridBagLayout(网格包布局管理器)
- 模拟cmos集成电路(7)
- 树莓派php minicom,用DHT11实践树莓派与Arduino串口通信 | 树莓派实验室
- 我的世界服务器娘怎么修改配置,转【教学】Pixelmon配置文件修改指南
- win10任务栏透明_电脑任务栏美化amp;状态监测软件,在任务栏实时显示网速/CPU/内存/温度等信息...
- 【Python】这篇文章能让你明白经验模态分解(EMD)——EMD在python中的实现方法