文章来源:http://www.leftso.com/blog/144.html

1.项目要对外提供接口,用webservcie的方式实现

2.添加的jar包

maven:

  1. <dependency>
  2. <groupId>org.apache.cxf</groupId>
  3. <artifactId>cxf-spring-boot-starter-jaxws</artifactId>
  4. <version>3.1.7</version>
  5. </dependency>

gradle:

  1. compile group: 'org.apache.cxf', name: 'cxf-spring-boot-starter-jaxws', version: '3.1.7'

3.接口类

  1. package com.webservice.test;
  2.  
  3. import javax.jws.WebMethod;
  4. import javax.jws.WebParam;
  5. import javax.jws.WebService;
  6.  
  7. /**
  8. * Created by admin on 2017/5/9 15:02.
  9. */
  10. @WebService(name = "ITestCollect", // 服务名称
  11. targetNamespace = "http://test.webservice.com/"// 命名空间,一般是接口的包名倒序
  12. )
  13. public interface ITestCollect {
  14.  
  15. @WebMethod //@webMethod:方法注解,表示暴露的方法 @webParam:参数注解,name:参数名称
  16. String test(@WebParam(name = "name") String name);
  17. }

实现类

  1. package com.webservice.test;
  2.  
  3. import org.springframework.stereotype.Service;
  4.  
  5. import javax.jws.WebService;
  6.  
  7. /**
  8. * Created by admin on 2017/5/9 15:02.
  9. */
  10. @Service
  11. @WebService(serviceName = "ITestCollect",//与接口中name一致
  12. targetNamespace = "http://test.webservice.com/",//与接口中的 targetNamespace 属性一致
  13. endpointInterface = "com.webservice.test.ITestCollect"//接口的全路径
  14. )
  15. public class TestCollectImpl implements ITestCollect {
  16. @Override
  17. public String test(String name) {
  18. System.out.println("name:" + name);
  19. return "success:"+name;
  20. }
  21.  
  22. }

配置config

  1. package com.webservice.test;
  2.  
  3. import com.webservice.test.ITestCollect;
  4. import org.apache.cxf.Bus;
  5. import org.apache.cxf.jaxws.EndpointImpl;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.context.annotation.Bean;
  8. import org.springframework.context.annotation.Configuration;
  9.  
  10. import javax.xml.ws.Endpoint;
  11.  
  12. /**
  13. * Created by admin on 2017/5/9 14:40.
  14. */
  15. @Configuration
  16. public class WebServiceConfig {
  17. @Autowired
  18. private Bus bus;
  19.  
  20. @Autowired
  21. ITestCollect testCollect;
  22.  
  23. @Bean
  24. public Endpoint endpoint() {
  25. EndpointImpl endpoint = new EndpointImpl(bus, testCollect);
  26. endpoint.publish("/testCollect");
  27. return endpoint;
  28. }
  29. }

配置完成后 启动springboot 直接访问 http://localhost:8080/services/testCollect?wsdl

可以看到一个xml的页面,则部署成功

/services/ 是固定的,/testCollect 是代码里设置的路径  ?wsdl 是固定的

这里有一个坑:

(1)例子中的所有类都是在一个包下面的,要是在不同的包下面,会有各种错,就是找不到对应的类,可能要配置 targetNamespace 属性或者其参数,没有研究,但是放在同一个包下面就没问题,

(2)调用完成后,返回值是对象或者是list类型,方法上不能加 @WebResult 注解,不然要在对应的类上面写上实体类转xml的注解,新建的实体类也要在同一个包下,不然返回的对象找不到包路径

(3)cxf不支持重载,如果接口中有重载方法,要重命名 @WebMethod(operationName = "xxxx")  operationName属性是重新取名

4.调用

  1. package com.webservice.test;
  2.  
  3. import com.webservice.test.ITestCollect;import org.apache.cxf.endpoint.Client;
  4. import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
  5. import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
  6.  
  7. import java.util.List;
  8.  
  9. /**
  10. * Created by admin on 2017/5/9 20:36.
  11. */
  12. public class WebServiceTest {
  13. public static void main(String[] args) {
  14. test2();
  15. }
  16.  
  17. /**
  18. * 方式1.代理类工厂的方式,需要拿到对方的接口
  19. */
  20. public static void test1() {
  21. try {
  22. String address = "http://localhost:8080/services/testCollect?wsdl";
  23. JaxWsProxyFactoryBean jaxWsProxyFactoryBean = new JaxWsProxyFactoryBean();
  24. jaxWsProxyFactoryBean.setAddress(address);
  25. jaxWsProxyFactoryBean.setServiceClass(ITestCollect.class);
  26. ITestCollect cs = (ITestCollect) jaxWsProxyFactoryBean.create();
  27. String userName = "test";
  28. String result = cs.test(userName);
  29. System.out.println("返回结果:" + result);
  30. } catch (Exception e) {
  31. e.printStackTrace();
  32. }
  33. }
  34.  
  35. /**
  36. * 方式2.动态调用方式
  37. */
  38. public static void test2() {
  39. // 创建动态客户端
  40. JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
  41. Client client = dcf.createClient("http://localhost:8080/services/testCollect?wsdl");
  42. Object[] objects = new Object[0];
        try {
  43. //用法:client.invoke("方法名",参数1,参数2,参数3....);
  44. // objects = client.invoke("add", model);
  45. objects = client.invoke("test");
  46. System.out.println("success.....");
  47. System.out.println("返回数据:" + objects[0]);
  48. } catch (java.lang.Exception e) {
  49. e.printStackTrace();
  50. }
  51. }
  52. }

文章来源:http://www.leftso.com/blog/144.html

springboot+CXF开发webservice对外提供接口(转)的更多相关文章

  1. springboot+cxf 开发webservice

    参考 https://www.cnblogs.com/fuxin41/p/6289162.html pom.xml <?xml version="1.0" encoding= ...

  2. 使用cxf开发webservice接口

    项目中经常用到开发webservice接口,及调用webService接口.这里讲解如何使用cxf开发webService接口. 一.webservice介绍及理解 webservice是一种跨平台, ...

  3. 开发FTP服务接口,对外提供接口服务

    注意:本文只适合小文本文件的上传下载,因为post请求是有大小限制的.默认大小是2m,虽然具体数值可以调节,但不适合做大文件的传输 最近公司有这么个需求:以后所有的项目开发中需要使用ftp服务器的地方 ...

  4. 【WebService】使用CXF开发WebService(四)

    CXF简介 Apache CXF = Celtix + XFire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了,以下简称为 CXF.CXF 继承了 Celtix ...

  5. struts1+spring+myeclipse +cxf 开发webservice以及普通java应用调用webservice的实例

    Cxf + Spring+ myeclipse+ cxf 进行  Webservice服务端开发 使用Cxf开发webservice的服务端项目结构 Spring配置文件applicationCont ...

  6. 使用WCF对外提供接口

    本篇将通过WCF以webservices的方式对外提供接口.同时使用NUnit对webservices中的方法进行单元测试. 开发契约 contract Contract项目为类库项目,该项目下会包含 ...

  7. 使用cxf开发webservice应用时抛出异常

    在使用cxf开发webservice应用时,报出了类似下面的错误 JAXB: [javax.xml.bind.UnmarshalException: unexpected element (uri:& ...

  8. Frp内网穿透搭建,家庭主机对外提供接口,支持ssh访问

    Frp内网穿透搭建,家庭主机对外提供接口,支持ssh访问 1.使用场景: 需求1.家中服务器 ubuntu 主机,跑接口服务,需要对外暴漏, 需求2.同时需要在外网ssh远程 ​ 关键词: frp内网 ...

  9. CXF 开发 WebService

    什么是CXF: Apache CXF = Celtix + Xfire 支持多种协议: SOAP1.1,1.2 XML/HTTP CORBA(Common Object Request Broker ...

随机推荐

  1. select * from 的一些心得

    如何简单运用好 select * from语句,在不同的函数下,有不同的先后顺序. 语法格式 (代表先后顺便) (2)select 字段名 查询什么东西 (1)from 表名,从哪个表查询 例如:查询 ...

  2. Python 面向对象(一) 基础

    Python 中一切皆对象 什么是面向对象? 面向对象就是将一些事物的共有特征抽象成类,从类来创建实例. 类class 可以理解为模版 比如人类,都具有身高.体重.年龄.性别.籍贯...等属性,但属性 ...

  3. LKD: Chapter 8 Bottom Halves and Deferring Work

    In 2.6.x, there are 3 mechanisms for implementing a bottom half: softirqs, tasklets and work queues. ...

  4. unity android相互调用

    简介 有一些手机功能,Unity没有提供相应的接口,例如震动,例如不锁屏,例如GPS,例如... 有太多的特殊功能Unity都没有提供接口,这时候,我们就需要通过使用Android原生的ADT编辑器去 ...

  5. Bootstrap-datepicker3官方文档中文翻译---概述(原版翻译 http://bootstrap-datepicker.readthedocs.io/en/latest/index.html)

    bootstrap-datepicker Bootstrap-datepicker 提供了一个拥有Bootstrap样式的弹性Datepicker控件 Requirements/使用要求 Bootst ...

  6. Axios 执行post发送两次请求的小坑

    vue-resource2.0已经不再更新,所以vue2.0官方推荐使用axios来代替.实际项目也是应用上了vue+axios,然后就有了这么一段填坑的经历. 问题:axios使用post请求时,发 ...

  7. Spring Cloud Ribbon 整合 Hystrix

    在前面随笔 Spring Cloud 之 Ribbon 的ribbon工程基础上进行改造 1.pom.xml 加入依赖 <dependency> <groupId>org.sp ...

  8. 51Nod 1284 2 3 5 7的倍数 容斥原理

    1284 2 3 5 7的倍数基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 收藏 关注给出一个数N,求1至N中,有多少个数不是2 3 5 7的倍数. 例如N = 1 ...

  9. PAT 1008. Elevator (20)

    1008. Elevator (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue The highest ...

  10. 使用superMap实现点标注和区域着色

    1.定义html文件,引入superMap的js和theme文件: <script src='${_ctxPath }/statics/js/superMap/SuperMap.Include. ...