博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Boot用Cxf的jax-ws开发WebService
阅读量:6224 次
发布时间:2019-06-21

本文共 11946 字,大约阅读时间需要 39 分钟。

首先上项目的pom.xml:

1 
2
4
4.0.0
5 6
com.mathxh-webservice
7
webservice
8
0.0.1-SNAPSHOT
9
jar
10 11
webservice
12
Learning WebService
13 14
15
org.springframework.boot
16
spring-boot-starter-parent
17
1.5.14.BUILD-SNAPSHOT
18
19
20 21
22
UTF-8
23
UTF-8
24
1.8
25
26 27
28
29
org.springframework.boot
30
spring-boot-starter
31
32 33
34
org.springframework.boot
35
spring-boot-starter-test
36
test
37
38 39
40
org.springframework.boot
41
spring-boot-starter-web
42
43 44
45
46
org.apache.cxf
47
cxf-spring-boot-starter-jaxws
48
3.1.11
49
50
51
52 53
54
55
56
org.springframework.boot
57
spring-boot-maven-plugin
58
59
60
61 62
63
64
spring-snapshots
65
Spring Snapshots
66
https://repo.spring.io/snapshot
67
68
true
69
70
71
72
spring-milestones
73
Spring Milestones
74
https://repo.spring.io/milestone
75
76
false
77
78
79
80 81
82
83
spring-snapshots
84
Spring Snapshots
85
https://repo.spring.io/snapshot
86
87
true
88
89
90
91
spring-milestones
92
Spring Milestones
93
https://repo.spring.io/milestone
94
95
false
96
97
98
99 100 101
View Code

然后开发WebService服务接口并实现接口:

1 package com.mathxhwebservice.webservice.service; 2  3  4 /** 5  * 接口 6  * 7  * @author MathxH Chen 8  * 9  */10 11 import com.mathxhwebservice.webservice.mtom.BinaryFile;12 13 import javax.jws.WebMethod;14 import javax.jws.WebParam;15 import javax.jws.WebResult;16 import javax.jws.WebService;17 import javax.xml.ws.soap.MTOM;18 19 @WebService(name = "CommonService", // 暴露服务名称20         targetNamespace = "http://service.webservice.mathxhwebservice.com/")// 命名空间,一般是接口的包名倒序21 @MTOM(threshold = 1024)22 public interface CommonService {23 24     @WebMethod25     @WebResult(name = "String")26     String sayHello(@WebParam(name = "userName") String name);27 28     @WebMethod29     @WebResult(name ="BinaryFile")30     BinaryFile downloadFile(@WebParam(name = "fileName") String fileName);31 32     @WebMethod33     @WebResult(name = "boolean")34     boolean uploadFile(@WebParam(name = "file") BinaryFile file);35 }
View Code

之后是实现WebService接口:

1 package com.mathxhwebservice.webservice.service; 2  3 import com.mathxhwebservice.webservice.mtom.BinaryFile; 4 import org.springframework.stereotype.Component; 5  6 import javax.activation.DataHandler; 7 import javax.activation.DataSource; 8 import javax.activation.FileDataSource; 9 import javax.jws.WebService;10 import java.io.*;11 12 @WebService(serviceName = "CommonService", // 与接口中指定的name一致13         targetNamespace = "http://service.webservice.mathxhwebservice.com/", // 与接口中的命名空间一致,一般是接口的包名倒14         endpointInterface = "com.mathxhwebservice.webservice.service.CommonService"// 接口地址15 )16 @Component17 public class CommonServiceImpl implements CommonService{18 19     @Override20     public String sayHello(String name) {21         return "Hello ," + name;22     }23 24     @Override25     public BinaryFile downloadFile(String fileName){26         BinaryFile file = new BinaryFile();27         file.setTitle(fileName);28         DataSource source = new FileDataSource(new File("d:" + File.separator + fileName));29         file.setBinaryData(new DataHandler(source));30         return file;31     }32 33     @Override34     public  boolean uploadFile(BinaryFile file){35         DataHandler dataHandler = file.getBinaryData();36         String fileTitle = file.getTitle();37 38         try (39                 InputStream is = dataHandler.getInputStream();40                 OutputStream os = new FileOutputStream(new File("d:" + File.separator + fileTitle));41                 BufferedOutputStream bos = new BufferedOutputStream(os))42         {43 44             byte[] buffer = new byte[100000];45             int bytesRead = 0;46             while ((bytesRead = is.read(buffer)) != -1) {47                 bos.write(buffer, 0, bytesRead);48             }49 50             bos.flush();51         } catch (IOException e) {52             e.printStackTrace();53             return false;54         }55         return true;56     }57 }
View Code

然后是配置WebService的发布类:

1 package com.mathxhwebservice.webservice.config; 2  3 import com.mathxhwebservice.webservice.service.CommonService; 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 @Configuration13 public class CxfConfig {14     @Autowired15     private Bus bus;16 17     @Autowired18     CommonService commonService;19 20     /** JAX-WS **/21     @Bean22     public Endpoint endpoint() {23         EndpointImpl endpoint = new EndpointImpl(bus, commonService);24         endpoint.publish("/CommonService");25 26         return endpoint;27     }28 }
View Code

最后实现客户端调用(基本调用返回字符串,基于MTOM的上传下载文件):

1 package com.mathxhwebservice.webservice.wsclient;  2   3 import com.mathxhwebservice.webservice.mtom.BinaryFile;  4 import com.mathxhwebservice.webservice.service.CommonService;  5 import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;  6   7 import javax.activation.DataHandler;  8 import javax.activation.DataSource;  9 import javax.activation.FileDataSource; 10 import java.io.*; 11  12 public class CxfClient { 13     public static void main(String[] args) { 14         //cl1(); 15        // downloadTest(); 16         uploadTest(); 17     } 18  19     /** 20      * 方式1.代理类工厂的方式,需要拿到对方的接口 21      */ 22     public static void cl1() { 23         try { 24             // 接口地址 25             String address = "http://localhost:8080/services/CommonService?wsdl"; 26             // 代理工厂 27             JaxWsProxyFactoryBean jaxWsProxyFactoryBean = new JaxWsProxyFactoryBean(); 28             // 设置代理地址 29             jaxWsProxyFactoryBean.setAddress(address); 30             // 设置接口类型 31             jaxWsProxyFactoryBean.setServiceClass(CommonService.class); 32             // 创建一个代理接口实现 33             CommonService cs = (CommonService) jaxWsProxyFactoryBean.create(); 34             // 数据准备 35             String userName = "MathxH Chen"; 36             // 调用代理接口的方法调用并返回结果 37             String result = cs.sayHello(userName); 38             System.out.println("返回结果:" + result); 39         } catch (Exception e) { 40             e.printStackTrace(); 41         } 42     } 43  44     public static void uploadTest(){ 45         try{ 46             // 接口地址 47             String address = "http://localhost:8080/services/CommonService?wsdl"; 48             // 代理工厂 49             JaxWsProxyFactoryBean jaxWsProxyFactoryBean = new JaxWsProxyFactoryBean(); 50             // 设置代理地址 51             jaxWsProxyFactoryBean.setAddress(address); 52             // 设置接口类型 53             jaxWsProxyFactoryBean.setServiceClass(CommonService.class); 54             // 创建一个代理接口实现 55             CommonService cs = (CommonService) jaxWsProxyFactoryBean.create(); 56  57             BinaryFile file = new BinaryFile(); 58             file.setTitle("uploaded.png"); 59             DataSource source = new FileDataSource(new File("d:" + File.separator + "downloaded.png")); 60             file.setBinaryData(new DataHandler(source)); 61             if(cs.uploadFile(file)) { 62                 System.out.println("upload success"); 63             }else{ 64                 System.out.println("upload failed"); 65             } 66  67         }catch (Exception e){ 68             e.printStackTrace(); 69         } 70     } 71  72     public static void downloadTest(){ 73         try{ 74             // 接口地址 75             String address = "http://localhost:8080/services/CommonService?wsdl"; 76             // 代理工厂 77             JaxWsProxyFactoryBean jaxWsProxyFactoryBean = new JaxWsProxyFactoryBean(); 78             // 设置代理地址 79             jaxWsProxyFactoryBean.setAddress(address); 80             // 设置接口类型 81             jaxWsProxyFactoryBean.setServiceClass(CommonService.class); 82             // 创建一个代理接口实现 83             CommonService cs = (CommonService) jaxWsProxyFactoryBean.create(); 84  85            BinaryFile file = cs.downloadFile("test.png"); 86            String title = file.getTitle(); 87            DataHandler binaryData = file.getBinaryData(); 88  89             try ( 90                     InputStream is = binaryData.getInputStream(); 91                     OutputStream os = new FileOutputStream(new File("d:" + File.separator + "downloaded.png")); 92                     BufferedOutputStream bos = new BufferedOutputStream(os)) 93             { 94  95                 byte[] buffer = new byte[100000]; 96                 int bytesRead = 0; 97                 while ((bytesRead = is.read(buffer)) != -1) { 98                     bos.write(buffer, 0, bytesRead); 99                 }100 101                 bos.flush();102             } catch (IOException e) {103                 e.printStackTrace();104 105             }106 107         } catch (Exception e) {108             e.printStackTrace();109         }110     }111 }
View Code

 

 

references:

http://cxf.apache.org/docs/developing-a-service.html

http://cxf.apache.org/docs/developing-a-consumer.html

http://cxf.apache.org/docs/mtom-attachments-with-jaxb.html

http://yufenfei.iteye.com/blog/1685910

https://blog.csdn.net/accountwcx/article/details/47165321

https://blog.csdn.net/a363722188/article/details/43983959

http://cxf.apache.org/docs/a-simple-jax-ws-service.html

http://cxf.apache.org/docs/jax-ws-configuration.html

 

你可能感兴趣的文章
JS判断数组方法大全
查看>>
【20181019T3】比特战争【最小生成树思想】
查看>>
Python之初识模块
查看>>
iphone-common-codes-ccteam源代码 CCUICalloutView.m
查看>>
鐵打的營盤
查看>>
成功来自刻意练习
查看>>
LR11生成图表后修正Analysis中显示请求的地址长度过短50个字符的问题
查看>>
架构之美阅读笔记之二
查看>>
11.时间序列分析狠
查看>>
Java之Annotation
查看>>
汇编语言中整数常量表示方式
查看>>
XML Schema choice 元素
查看>>
【Luogu 3810】三维偏序
查看>>
hdu Hike on a Graph
查看>>
深入分析 ThreadLocal 内存泄漏问题
查看>>
[HNOI2017]礼物
查看>>
[转]推荐一些不错的计算机书籍
查看>>
linux命令(30):tail
查看>>
有关windows dpi适配(c#)
查看>>
SoupUI的使用
查看>>