天天看点

Spring Boot项目整合CXF,实现webservice接口上传下载大文件(包含服务端,消费端)

Spring Boot项目整合CXF,实现webservice接口上传下载大文件(包含服务端,消费端)

整合 CXF 实现消费端上传下载大文件,spring boot 项目。

具体可以见文章尾部的源码。

服务端:

Spring Boot项目整合CXF,实现webservice接口上传下载大文件(包含服务端,消费端)

cxfconfig 是cxf的一下配置文件。服务暴露的配置。

cxffilewrapper 存放附件属性的实体类

FileWS为服务端实现接口

Filewsimpl具体的服务端实现方法,包括对客户端上传的简单处理(保存),客户端下载文件,服务端提供的路径等。

具体依赖jar见源码。

消费端:

Spring Boot项目整合CXF,实现webservice接口上传下载大文件(包含服务端,消费端)

消费端 除 terryDownloadFile(自建用于下载文件),springboot启动类外,其余都是通过wsdl文件生成的客户端文件。

生成方式百度,一般来说jar 生成和cxf生成式有区别的,jar一般生成数据类型简单的。

wsdl2java -d D:\\ideaWorkSpace\\src\\main\\java -client http://localhost:8762/soap/user?wsdl

文件上传,在生成的代码,FileWS_FileWSImplPort_Client.java中进行了修改

主要代码如下:

在源码中注释掉了,没来得及改,其实这段代码是上传代码。

System.out.println("Invoking upload...");
        com.zyyfw.CxfFileWrapper _upload_file = new CxfFileWrapper();
        _upload_file.setFileName("test.csv");
        _upload_file.setFileExtension("csv");
        DataSource source = new FileDataSource(new File("d:\\test.csv"));
        _upload_file.setFile(new DataHandler(source));
        boolean _upload__return = port.upload(_upload_file);
        System.out.println("upload.result=" + _upload__return);
           

文件下载主要代码在terryDownLoadFile.java中:

public static void main(String args[]) throws java.lang.Exception {

        JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
        factory.setServiceClass(FileWS.class);
        factory.setAddress("http://localhost:8762/soap/user");

        FileWS fileWS = factory.create(FileWS.class);
        CxfFileWrapper fileWrapper = fileWS.download();
        OutputStream os = null;
        InputStream is = null;
        BufferedOutputStream bos = null;
        try

        {
            is = fileWrapper.getFile().getInputStream();

            // 文件在客户端的保存位置
            File dest = new File("d:\\download\\" + fileWrapper.getFileName());
            os = new FileOutputStream(dest);
            bos = new BufferedOutputStream(os);
            byte[] buffer = new byte[1024];
            int len = 0;
            while ((len = is.read(buffer)) != -1) {
                bos.write(buffer, 0, len);
            }

            bos.flush();
            System.out.println("下载完成");
        } catch (
                IOException e)

        {
            e.printStackTrace();
        } finally

        {
            if (bos != null) {
                try {
                    bos.close();
                } catch (Exception e) {
                }
            }

            if (os != null) {
                try {
                    os.close();
                } catch (Exception e) {
                }
            }

            if (is != null) {
                try {
                    is.close();
                } catch (Exception e) {
                }
            }
        }
    }
           

主要代码就这两端。具体可以详见源码。

参考文章:

https://www.cnblogs.com/huiy/p/6052221.html

https://blog.csdn.net/smugaoyi/article/details/78110879

源码地址:

https://github.com/TorresZheng/webservice-file-transport

联系方式:微信

Spring Boot项目整合CXF,实现webservice接口上传下载大文件(包含服务端,消费端)