因公司新项目决定使用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实现WEBSERVICE 上传下载的更多相关文章

  1. JAVA 实现FTP上传下载(sun.net.ftp.FtpClient)

    package com.why.ftp; import java.io.DataInputStream; import java.io.File; import java.io.FileInputSt ...

  2. CentOS下安装配置NFS并通过Java进行文件上传下载

    1:安装NFS (1)安装 yum install nfs-utils rpcbind (2)启动rpcbind服务 systemctl restart rpcbind.service 查看服务状态 ...

  3. java实现文件上传下载

    喜欢的朋友可以关注下,粉丝也缺. 今天发现已经有很久没有给大家分享一篇技术文章了,于是想了一下给大家分享一篇java实现文件上传下载功能的文章,不喜欢的希望大家勿喷. 想必大家都知道文件的上传前端页面 ...

  4. Delphi调用JAVA的WebService上传XML文件(XE10.2+WIN764)

    相关资料:1.http://blog.csdn.net/luojianfeng/article/details/512198902.http://blog.csdn.net/avsuper/artic ...

  5. java web service 上传下载文件

    1.新建动态web工程youmeFileServer,新建包com,里面新建类FileProgress package com; import java.io.FileInputStream; imp ...

  6. java web 文件上传下载

    文件上传下载案例: 首先是此案例工程的目录结构:

  7. FasfDFS整合Java实现文件上传下载

    文章目录     一 : 添加配置文件     二 : 加载配置文件         1. 测试加载配置文件         2. 输出配置文件     三:功能实现         1.初始化连接信 ...

  8. .NET企业级应用WebService上传下载文件

    在建立好一个WebService后会有一个自带的 [WebMethod]//在待会写的所有方法中都要写这个,便于调试 public string HelloWorld() { return " ...

  9. fastDFS与java整合文件上传下载

    准备 下载fastdfs-client-java源码 源码地址 密码:s3sw 修改pom.xml 第一个plugins是必需要的,是maven用来编译的插件,第二个是maven打源码包的,可以不要. ...

随机推荐

  1. 1、3 list 加入缓存,并postman测试

    1.pom.xml导入redis依赖 2.配置文件配置 redis 3.主类开启缓存注解 4.Service方法上加注解 @Cacheable(value="list")//val ...

  2. ASP.NET请求过程-Module

    管道模型     上图中为Http请求在Asp.net程序中处理的过程.管道处理模型来自上面的HttpApplication,管道处理模型其实就是多个Module(其实这些module都是在往http ...

  3. Python豆瓣源镜像

    pip install pymysql -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

  4. 【C++札记】指针函数与函数指针

    指针函数 指针函数是一个函数,只不过指针函数返回的类型是某一类型的指针. 格式: 类型名* 函数名(函数参数列表) 如下代码存在问题 void test(char *p) { p = (char*)m ...

  5. LeetCode. 3的幂

    题目要求: 给定一个整数,写一个函数来判断它是否是 3 的幂次方. 示例: 输入: 27 输出: true 代码: class Solution { public: bool isPowerOfThr ...

  6. WUSTOJ 1247: 递增或递减排序(Java)

    1247: 递增或递减排序 题目   有n个整数,求它的递增排序序列或递减排序序列.更多内容点击标题. 分析 统一升序排序,输出的时候做区分. 先区分是升序还是降序,调用库函数. 代码   方法1,将 ...

  7. Linux yum安装java环境

    1.jdk 1.8 #系统版本 [root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) #安装 ...

  8. vue 集成jTopo 处理方法

    jTopo 帮助说明网站 http://www.jtopo.com/index.html 使用例子: http://www.jtopo.com/demo/helloworld.html 不建议直接安装 ...

  9. 初试Maven

    1 [检查]确认已经安装jdk,已经环境变量中配置JAVA_HOME,已经修改Path 2 [下载]从http://maven.apache.org/download.cgi下载所需要的版本,笔者使用 ...

  10. 动手实现CNN卷积神经网络

    数据集采用的是手写数据集(http://yann.lecun.com/exdb/mnist/): 本文构建的CNN网络图如下: 像素点:28*28 = 784,55000张手写数字图片. # -*- ...