加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

webservice+axis文件传递

发布时间:2020-12-17 02:01:30 所属栏目:安全 来源:网络整理
导读:利用AXIS来传递文件 Java代码 package com.chnic.webservice; ?? ?? import java.io.File; ?? import java.io.FileOutputStream; ?? import java.io.IOException; ?? import java.io.InputStream; ?? ?? import javax.activation.DataHandler; ?? ?? public
利用AXIS来传递文件
Java代码

复制代码

  1. package com.chnic.webservice; ??
  2. ??
  3. import java.io.File; ??
  4. import java.io.FileOutputStream; ??
  5. import java.io.IOException; ??
  6. import java.io.InputStream; ??
  7. ??
  8. import javax.activation.DataHandler; ??
  9. ??
  10. public class FileTransfer { ??
  11. ??
  12. ????public FileTransfer(){ ??
  13. ???????? ??
  14. ???? } ??
  15. ???? ??
  16. ????public String transfer(DataHandler handler,String fileName){ ??
  17. ???????? String fullPath = "C:/" + fileName; ??
  18. ???????? File file = new File(fullPath); ??
  19. ????????int flag = 0; ??
  20. ????????if(handler == null) ??
  21. ????????????return "failure"; ??
  22. ????????if(fileName == null) ??
  23. ????????????return "failure"; ??
  24. ???????? ??
  25. ????????try { ??
  26. ???????????? InputStream input = handler.getInputStream(); ??
  27. ???????????? FileOutputStream fos = new FileOutputStream(file); ??
  28. ????????????byte[] buffer=new byte[4096]; ??
  29. ????????????while((flag=input.read(buffer))!=-1){ ??
  30. ???????????????? fos.write(buffer,0,flag); ??
  31. ???????????? } ??
  32. ???????????? input.close(); ??
  33. ???????????? fos.close(); ??
  34. ???????? } catch (IOException e) { ??
  35. ???????????? e.printStackTrace(); ??
  36. ????????????return "failure"; ??
  37. ???????? } ??
  38. ????????return "Success"; ??
  39. ???? } ??
  40. }??

?

transfer方法是service端接受客户端传来文件的方法,方法里面有两个参数,第一个是DataHandler。这个类可以看成是一个传送器,通过专门的序列化类将文件序列化。这个类的具体方法可以查一下SUN的API文档。第二个参数是一个String字符串,参数名就可以看出来,传递的是文件名。

?

这个方法从DataHandler得到一个输入流,从这个流里读出数据然后写到一个新文件里。这些都是一些基本的Java I/O操作。应该不会太难。服务器代码编写完之后下来是deploy.wsdd发布文件。

?

Xml代码

复制代码

  1. <deployment xmlns="http://xml.apache.org/axis/wsdd/" ??
  2. ????xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">??
  3. ???? ??
  4. ????<service name="FileTransfer" provider="java:RPC">??
  5. ????????<parameter name="className" value="com.chnic.webservice.FileTransfer"/>??
  6. ????????<parameter name="allowedMethods" value="transfer"/>??
  7. ????????<parameter name="scope" value="session"/>??
  8. ???????? ??
  9. ????????<operation name="transfer"??
  10. ???????????????????qname="operNS:transfer"??
  11. ???????????????????xmlns:operNS="file"??
  12. ???????????????????returnQName="fileSend" ??
  13. ???????????????????returnType="rtns:string" ??
  14. ???????????????????xmlns:rtns="http://www.w3.org/2001/XMLSchema">??
  15. ??????????????????? ??
  16. ????????????<parameter name="handler" type="tns:string" ??
  17. ???????????????????????xmlns:tns="http://www.w3.org/2001/XMLSchema"/>??
  18. ????????????<parameter name="fileName" type="myns:DataHandler" ??
  19. ???????????????????????xmlns:tns="http://www.w3.org/2001/XMLSchema"/>??
  20. ????????</operation>??
  21. ???????? ??
  22. ????????<typeMapping qname="myns:DataHandler" xmlns:myns="http://fileTransfer.sample"??
  23. ??????????languageSpecificType="java:javax.activation.DataHandler"??
  24. ??????????serializer="org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory"??
  25. ??????????deserializer="org.apache.axis.encoding.ser.JAFDataHandlerDeserializerFactory"??
  26. ??????????encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>??
  27. ????</service>??
  28. </deployment>??

?

这个配置文件也不多介绍了,前几篇关于这几个元素的介绍已经比较清楚了,在这里有必要提一下org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory 这个类。前面序列化对象的时候提到序列化不同对象的时候需要不同的工厂类,同样在序列化文件的时候就要用这个工厂类。编写完一切,启动tomcat然后发布服务。

?

服务器端的代码已经编写完成了,现在轮到客户端代码。因为是个简单的sample,所以做的事情也比较简单就是把C盘根目录上的一个文件通过webwervice储存到C盘,当然文件名要用另外一个。下面是客户端代码。

?

Java代码

复制代码

  1. String fileName = "C:/sample.txt"; ??
  2. DataHandler dh=new DataHandler(new FileDataSource(fileName)); ??
  3. String endpoint="http://localhost:8080/axis/services/FileTransfer"; ??
  4. ??
  5. Service service=new Service(); ??
  6. Call call=(Call) service.createCall(); ??
  7. call.setTargetEndpointAddress(new java.net.URL(endpoint)); ??
  8. call.setOperationName(new QName(endpoint,"transfer")); ??
  9. QName qnameattachment=new QName("http://fileTransfer.sample",??
  10. ????????"myns:DataHandler"); ??
  11. ??
  12. call.registerTypeMapping(dh.getClass(),??
  13. ???????? qnameattachment,??
  14. ???????? JAFDataHandlerSerializerFactory.class,??
  15. ???????? JAFDataHandlerDeserializerFactory.class); ??
  16. ??
  17. call.addParameter("s1",qnameattachment,ParameterMode.IN); ??
  18. call.addParameter("s2",XMLType.XSD_STRING,ParameterMode.IN); ??
  19. call.setReturnClass(String.class); ??
  20. String ret=(String)call.invoke(new Object[] {dh,"aaaaaa.txt"}); ??
  21. System.out.println("transfer success...."); ??
  22. System.out.println(ret);??

?

客户端通过DataHandler取得源文件,之后注册DataHandler,注册两个输入参数和一个输出参数。之后传入相关的参数。新文件也在C盘下面名字为aaaaa.txt。运行测试代,控制台打出两句话。

transfer success....
Success

?

说明测试成功,到C盘上也可以找到aaaaa.txt这个文件。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读