因公司新项目决定使用webservice与其它项目做交互,于是开始了webservice之旅。
初入webservice的时候第一个接触的工具叫axis2,网上有着大量的简单案例。功能很强大,代码自动生成,能传递各种类型的数据。但是考虑到整合入公司项目的问题,决定去找一个不是自动生成手写的webservice。于是看到了关于JWS相关的文章,但是在使用JWS(java jdk自带)的时候难以实现对复杂参数的传递。于是想将文件读入后将其byte数组转换成String。以String的方式来传递文件,但是后来在测试的时候发现new String(byte[])的方式转换成的zip文件的String与webservice生成的xml相冲突。于是想到了将文件转换成base64字符串试试,于是有了如下代码:
server端:
package com.forms.tool.webservice; import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream; import javax.jws.WebService; import Decoder.BASE64Decoder;import Decoder.BASE64Encoder; @WebServicepublic class WebServiceImp { public String sendFile(String name,String file) throws Exception { FileOutputStream fos = null; try { fos = new FileOutputStream("D:\\webserviceCBRC\\"+name); byte[] filebs = new BASE64Decoder().decodeBuffer(file); fos.write(filebs); } catch (Exception e) { e.printStackTrace(); } finally { fos.close(); } System.out.println("----------------------------------------------------------------------------------------"); System.out.println("----------------------------------------------------------------------------------------"); System.out.println("the file "+name+" was gotten !!"); System.out.println("----------------------------------------------------------------------------------------"); System.out.println("----------------------------------------------------------------------------------------"); File loc_file = new File("D:\\webserviceOT\\A001B0000001N000000000000000000002.zip"); FileInputStream fis = null; String out = null; try { fis = new FileInputStream(loc_file); byte[] bs = new byte[(int)loc_file.length()]; fis.read(bs); out = new BASE64Encoder().encode(bs); fis.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } System.out.println("----------------------------------------------------------------------------------------"); System.out.println("----------------------------------------------------------------------------------------"); System.out.println("return CBRC"); System.out.println("----------------------------------------------------------------------------------------"); System.out.println("----------------------------------------------------------------------------------------"); return out; } }
发布:
package com.forms.tool.webservice; import java.net.InetAddress;import com.forms.tool.webservice.WebServiceImp;import javax.xml.ws.Endpoint; public class StartService { public static void main(String[] args) { try { //获取当前IP String ip = InetAddress.getLocalHost().getHostAddress(); //将服务发布到指定路径 Endpoint.publish("http://"+ip+":9527/webservice/CBRC", new WebServiceImp()); System.out.println("webservice 发布成功!"); } catch (Exception e) { System.out.println("webservice 发布失败!"); ; } }}
客户端:
package test; import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.net.URL; import javax.xml.namespace.QName; import org.apache.axis.client.Call;import org.apache.axis.client.Service;import org.apache.axis.encoding.XMLType; import Decoder.BASE64Decoder;import Decoder.BASE64Encoder; public class CBRC { public static void main(String[] args) throws Exception { String endpoint = "http://192.168.100.17:9527/webservice/CBRC?wsdl"; //此处为wsdl地址 Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress(new URL(endpoint)); //setOperationName 方法 Qname 前一个参数为设置namespace,后一个参数为设置想要访问的方法 call.setOperationName(new QName("http://webservice.tool.forms.com/","sendFile")); //addParameter 方法即为添加元素的方法 call.addParameter("arg0",org.apache.axis.encoding.XMLType.XSD_DATE,javax.xml.rpc.ParameterMode.IN); call.addParameter("arg1",org.apache.axis.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN); //设置返回值类型 call.setReturnType(XMLType.XSD_STRING); File xml1 = new File("C:\\Users\\admin\\Desktop\\webservice\\axis2\\A001B0000001N000000000000000000001.zip"); FileInputStream fis1 = new FileInputStream(xml1); byte[] bytes1 = new byte[(int)xml1.length()]; fis1.read(bytes1); //将byte数组转换为base64字符串 String base64file = new BASE64Encoder().encode(bytes1); fis1.close(); //访问目标方法 String result = (String) call.invoke(new Object[]{"A001B0000001N000000000000000000001.zip",base64file}); FileOutputStream fos = new FileOutputStream("C:\\Users\\admin\\Desktop\\webservice\\axis2\\A001B0000001N000000000000000000002.zip"); fos.write(new BASE64Decoder().decodeBuffer(result)); fos.close(); System.out.println("end"); } }
关于使用的jar包
server端只需要:
client端需要的jar:
以及以下的部分。。。。。。。。。。
另外以上代码是查阅了大量网上代码后综合所得。就没有一一写引用出处
源码和axis2 jar包下载地址:http://download.csdn.net/detail/kokoyuo/9587652
---------------------
作者:kokoyuo
来源:CSDN
原文:https://blog.csdn.net/kokoyuo/article/details/52045554
版权声明:本文为博主原创文章,转载请附上博文链接!
- JAVA 实现FTP上传下载(sun.net.ftp.FtpClient)
package com.why.ftp; import java.io.DataInputStream; import java.io.File; import java.io.FileInputSt ...
- CentOS下安装配置NFS并通过Java进行文件上传下载
1:安装NFS (1)安装 yum install nfs-utils rpcbind (2)启动rpcbind服务 systemctl restart rpcbind.service 查看服务状态 ...
- java实现文件上传下载
喜欢的朋友可以关注下,粉丝也缺. 今天发现已经有很久没有给大家分享一篇技术文章了,于是想了一下给大家分享一篇java实现文件上传下载功能的文章,不喜欢的希望大家勿喷. 想必大家都知道文件的上传前端页面 ...
- Delphi调用JAVA的WebService上传XML文件(XE10.2+WIN764)
相关资料:1.http://blog.csdn.net/luojianfeng/article/details/512198902.http://blog.csdn.net/avsuper/artic ...
- java web service 上传下载文件
1.新建动态web工程youmeFileServer,新建包com,里面新建类FileProgress package com; import java.io.FileInputStream; imp ...
- java web 文件上传下载
文件上传下载案例: 首先是此案例工程的目录结构:
- FasfDFS整合Java实现文件上传下载
文章目录 一 : 添加配置文件 二 : 加载配置文件 1. 测试加载配置文件 2. 输出配置文件 三:功能实现 1.初始化连接信 ...
- .NET企业级应用WebService上传下载文件
在建立好一个WebService后会有一个自带的 [WebMethod]//在待会写的所有方法中都要写这个,便于调试 public string HelloWorld() { return " ...
- fastDFS与java整合文件上传下载
准备 下载fastdfs-client-java源码 源码地址 密码:s3sw 修改pom.xml 第一个plugins是必需要的,是maven用来编译的插件,第二个是maven打源码包的,可以不要. ...
随机推荐
- [学习笔记] 在Eclipse中添加用户库 Add User Libraries ,在项目中引用用户库
如果还没有安装Eclipse, 则请参考前文: [学习笔记] 下载.安装.启动 Eclipse(OEPE) 添加用户库 本文主要介绍在项目中直接使用第三方库的情况.就是把第三方的jar文件直接放到某 ...
- Acquire and Release Fences
转载自: http://preshing.com/20130922/acquire-and-release-fences/ Acquire and release fences, in my op ...
- [知乎]鲲鹏920对比intel8180
作者:韩朴宇链接:https://www.zhihu.com/question/308298687/answer/568737742来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...
- [转帖]Nginx服务器的六种负载均衡策略详解
Nginx服务器的六种负载均衡策略详解 咔咔侃技术 2019-09-11 17:40:12 一.关于Nginx的负载均衡 在服务器集群中,Nginx起到一个代理服务器的角色(即反向代理),为了避免单独 ...
- K8S踩坑篇-master节点作为node节点加入集群
前面我们二进制部署K8S集群时,三台master节点仅仅作为集群管理节点,所以master节点上中并未部署docker.kubelet.kube-proxy等服务.后来我在部署mertics-serv ...
- java poi3.10.1基本excel使用
效果: 代码: //时间 String checkTime = "yyyy/MM/dd"; //人员查询 Set preParticipantNames = new HashSet ...
- WUSTOJ 1251: 报数游戏(Java)
1251: 报数游戏 原题链接 Description n个人站成一行玩一个报数游戏.所有人从左到右编号为1到n.游戏开始时,最左边的人报1,他右边的人报2,编号为3的人报3,等等.当编号为n的人(即 ...
- shell习题第20题:统计文件大小
[题目要求] 加入需要每小时执行一个脚本.功能:当时间是0点和12点时,将/data/log/下的文件全部清空,注意只能清空文件内容而不能删除文件.而其他时间只需要统计一下每个文件的大小,一个文件一行 ...
- MySQL 子查询(二)
接上篇文章,从这节起:MySQL 5.7 13.2.10.5 Row Subqueries 五.行子查询(ROW Subqueries) 标量子查询返回单个值,列子查询返回一个列的多个值.而行子查询是 ...
- hdu 1875 最小生成树 prime版
最小生成树prime版 大致的步骤 首先选取一个到集合最近的点 然后标记起在集合内部 然后更新最短距离 畅通工程再续 Time Limit: 2000/1000 MS (Java/Others) ...