springboot+CXF开发webservice对外提供接口(转)
文章来源:http://www.leftso.com/blog/144.html
1.项目要对外提供接口,用webservcie的方式实现
2.添加的jar包
maven:
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-spring-boot-starter-jaxws</artifactId>
<version>3.1.7</version>
</dependency>
gradle:
compile group: 'org.apache.cxf', name: 'cxf-spring-boot-starter-jaxws', version: '3.1.7'
3.接口类
package com.webservice.test; import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService; /**
* Created by admin on 2017/5/9 15:02.
*/
@WebService(name = "ITestCollect", // 服务名称
targetNamespace = "http://test.webservice.com/"// 命名空间,一般是接口的包名倒序
)
public interface ITestCollect { @WebMethod //@webMethod:方法注解,表示暴露的方法 @webParam:参数注解,name:参数名称
String test(@WebParam(name = "name") String name);
}
实现类
package com.webservice.test; import org.springframework.stereotype.Service; import javax.jws.WebService; /**
* Created by admin on 2017/5/9 15:02.
*/
@Service
@WebService(serviceName = "ITestCollect",//与接口中name一致
targetNamespace = "http://test.webservice.com/",//与接口中的 targetNamespace 属性一致
endpointInterface = "com.webservice.test.ITestCollect"//接口的全路径
)
public class TestCollectImpl implements ITestCollect {
@Override
public String test(String name) {
System.out.println("name:" + name);
return "success:"+name;
} }
配置config
package com.webservice.test; import com.webservice.test.ITestCollect;
import org.apache.cxf.Bus;
import org.apache.cxf.jaxws.EndpointImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import javax.xml.ws.Endpoint; /**
* Created by admin on 2017/5/9 14:40.
*/
@Configuration
public class WebServiceConfig {
@Autowired
private Bus bus; @Autowired
ITestCollect testCollect; @Bean
public Endpoint endpoint() {
EndpointImpl endpoint = new EndpointImpl(bus, testCollect);
endpoint.publish("/testCollect");
return endpoint;
}
}
配置完成后 启动springboot 直接访问 http://localhost:8080/services/testCollect?wsdl
可以看到一个xml的页面,则部署成功
/services/ 是固定的,/testCollect 是代码里设置的路径 ?wsdl 是固定的
这里有一个坑:
(1)例子中的所有类都是在一个包下面的,要是在不同的包下面,会有各种错,就是找不到对应的类,可能要配置 targetNamespace 属性或者其参数,没有研究,但是放在同一个包下面就没问题,
(2)调用完成后,返回值是对象或者是list类型,方法上不能加 @WebResult 注解,不然要在对应的类上面写上实体类转xml的注解,新建的实体类也要在同一个包下,不然返回的对象找不到包路径
(3)cxf不支持重载,如果接口中有重载方法,要重命名 @WebMethod(operationName = "xxxx") operationName属性是重新取名
4.调用
package com.webservice.test; import com.webservice.test.ITestCollect;import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory; import java.util.List; /**
* Created by admin on 2017/5/9 20:36.
*/
public class WebServiceTest {
public static void main(String[] args) {
test2();
} /**
* 方式1.代理类工厂的方式,需要拿到对方的接口
*/
public static void test1() {
try {
String address = "http://localhost:8080/services/testCollect?wsdl";
JaxWsProxyFactoryBean jaxWsProxyFactoryBean = new JaxWsProxyFactoryBean();
jaxWsProxyFactoryBean.setAddress(address);
jaxWsProxyFactoryBean.setServiceClass(ITestCollect.class);
ITestCollect cs = (ITestCollect) jaxWsProxyFactoryBean.create();
String userName = "test";
String result = cs.test(userName);
System.out.println("返回结果:" + result);
} catch (Exception e) {
e.printStackTrace();
}
} /**
* 方式2.动态调用方式
*/
public static void test2() {
// 创建动态客户端
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Client client = dcf.createClient("http://localhost:8080/services/testCollect?wsdl");
Object[] objects = new Object[0];
try {
//用法:client.invoke("方法名",参数1,参数2,参数3....);
// objects = client.invoke("add", model);
objects = client.invoke("test");
System.out.println("success.....");
System.out.println("返回数据:" + objects[0]);
} catch (java.lang.Exception e) {
e.printStackTrace();
}
}
}
文章来源:http://www.leftso.com/blog/144.html
springboot+CXF开发webservice对外提供接口(转)的更多相关文章
- springboot+cxf 开发webservice
参考 https://www.cnblogs.com/fuxin41/p/6289162.html pom.xml <?xml version="1.0" encoding= ...
- 使用cxf开发webservice接口
项目中经常用到开发webservice接口,及调用webService接口.这里讲解如何使用cxf开发webService接口. 一.webservice介绍及理解 webservice是一种跨平台, ...
- 开发FTP服务接口,对外提供接口服务
注意:本文只适合小文本文件的上传下载,因为post请求是有大小限制的.默认大小是2m,虽然具体数值可以调节,但不适合做大文件的传输 最近公司有这么个需求:以后所有的项目开发中需要使用ftp服务器的地方 ...
- 【WebService】使用CXF开发WebService(四)
CXF简介 Apache CXF = Celtix + XFire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了,以下简称为 CXF.CXF 继承了 Celtix ...
- struts1+spring+myeclipse +cxf 开发webservice以及普通java应用调用webservice的实例
Cxf + Spring+ myeclipse+ cxf 进行 Webservice服务端开发 使用Cxf开发webservice的服务端项目结构 Spring配置文件applicationCont ...
- 使用WCF对外提供接口
本篇将通过WCF以webservices的方式对外提供接口.同时使用NUnit对webservices中的方法进行单元测试. 开发契约 contract Contract项目为类库项目,该项目下会包含 ...
- 使用cxf开发webservice应用时抛出异常
在使用cxf开发webservice应用时,报出了类似下面的错误 JAXB: [javax.xml.bind.UnmarshalException: unexpected element (uri:& ...
- Frp内网穿透搭建,家庭主机对外提供接口,支持ssh访问
Frp内网穿透搭建,家庭主机对外提供接口,支持ssh访问 1.使用场景: 需求1.家中服务器 ubuntu 主机,跑接口服务,需要对外暴漏, 需求2.同时需要在外网ssh远程 关键词: frp内网 ...
- CXF 开发 WebService
什么是CXF: Apache CXF = Celtix + Xfire 支持多种协议: SOAP1.1,1.2 XML/HTTP CORBA(Common Object Request Broker ...
随机推荐
- JDBC之代码优化
上一次我们是先实现了JDBC对数据库的增删查改操作,然后在增加新信息过程中发现了新的问题,即当某一操作失败,为了维护数据库的一致性,我们需要回滚事务.在其中我们了解了事务的工作原理及相关代码的使用. ...
- [转载] OAuth2.0认证和授权原理
转载自http://www.tuicool.com/articles/qqeuE3 什么是OAuth授权? 一.什么是OAuth协议 OAuth(开放授权)是一个开放标准,允许第三方网站在用户授权的前 ...
- [转载] ZooKeeper实现分布式队列Queue
转载自http://blog.fens.me/zookeeper-queue/ 让Hadoop跑在云端系列文章,介绍了如何整合虚拟化和Hadoop,让Hadoop集群跑在VPS虚拟主机上,通过云向用户 ...
- selenium定位tr及td,并获取其文本及属性
#获取所有的trtrlist=brower.find_elements_by_tag_name("tr")for tr in trlist: #获取tr中的所有td tdlist= ...
- 14. 监视ZooKeeper实例
ZooKeeper服务可以通过以下两种方式进行监控: 使用一组四个字母的单词命令来监视健康状态 使用ZooKeeper内置的Java管理扩展功能 四个字母的单词命令 ZooKeeper响应一组命令,每 ...
- Apache服务器配置
之前做代码一直按照传统化的方法部署别人的网站,但是一直不成功,尝试了很多次最后才发现时虚拟主机的问题 使用apache默认为127.0.0.1和网站的配置发生冲突. 因此在apache的conf文件夹 ...
- Elasticsearch java api 基本搜索部分详解
文档是结合几个博客整理出来的,内容大部分为转载内容.在使用过程中,对一些疑问点进行了整理与解析. Elasticsearch java api 基本搜索部分详解 ElasticSearch 常用的查询 ...
- 自动微分方法(auto diff)
学习机器学习的同学在学习过程中会经常遇到一个问题,那就是对目标函数进行求微分,线性回归这类简单的就不说.复杂的如神经网络类那些求导过程的酸爽.像我还是那种比较粗心的人往往有十导九错,所以说自动求导就十 ...
- 算法提高 9-3摩尔斯电码 map
算法提高 9-3摩尔斯电码 时间限制:1.0s 内存限制:256.0MB 问题描述 摩尔斯电码破译.类似于乔林教材第213页的例6.5,要求输入摩尔斯码,返回英文.请不要使用"z ...
- PHP 算法
1.首先来画个菱形玩玩,很多人学C时在书上都画过,咱们用PHP画下,画了一半. 思路:多少行for一次,然后在里面空格和星号for一次. ? 1 2 3 4 5 6 <?php for($i=0 ...