东莞市建设网站培训,公司怎么注册企业邮箱,未来的软件开发方向是什么,最新楼盘价格走势图前些天发现了一个巨牛的人工智能学习网站#xff0c;通俗易懂#xff0c;风趣幽默#xff0c;忍不住分享一下给大家。点击跳转到教程。 WebService处理传递普通的信息#xff0c;还可以传输文件#xff0c;下面介绍WebService是怎么完成文件传输的。 1、 首先编写服务器端…前些天发现了一个巨牛的人工智能学习网站通俗易懂风趣幽默忍不住分享一下给大家。点击跳转到教程。 WebService处理传递普通的信息还可以传输文件下面介绍WebService是怎么完成文件传输的。 1、 首先编写服务器端上传文件的WebService方法 package com.hoo.service; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.InputStream; import javax.activation.DataHandler; /** * bfunction:/bAxis WebService完成文件上传服务器端 * author hoojo * createDate Dec 18, 2010 1:16:16 PM * file UploadFileService.java * package com.hoo.service * project AxisWebService * blog http://blog.csdn.net/IBM_hoojo * email hoojo_126.com * version 1.0 */ public class UploadFileService { /** * bfunction:/b传递文件 * author hoojo * createDate Dec 18, 2010 1:27:58 PM * param handler DataHandler这个参数必须 * param fileName 文件名称 * return upload Info */ public String upload(DataHandler handler, String fileName) { if (fileName ! null !.equals(fileName)) { File file new File(fileName); if (handler ! null) { InputStream is null; FileOutputStream fos null; try { is handler.getInputStream(); fos new FileOutputStream(file); byte[] buff new byte[1024 * 8]; int len 0; while ((len is.read(buff)) 0) { fos.write(buff, 0, len); } } catch(FileNotFoundException e) { return fileNotFound; } catch (Exception e) { return upload File failure; } finally { try { if (fos ! null) { fos.flush(); fos.close(); } if (is ! null) { is.close(); } } catch (Exception e) { e.printStackTrace(); } } return file absolute path: file.getAbsolutePath(); } else { return handler is null; } } else { return fileName is null; } } } 上传方法和我们以前在Web中上传唯一不同的就是参数一DataHandler可以将这类看成文件传输器他可以把文件序列化。然后通过DataHandler可以得到一个输入流InputStream通过这个流可以读到文件的内容。其他的操作和普通上传类似。 2、 定制wsdd发布文件上传的WebService服务 ?xml version1.0 encodingUTF-8? deployment xmlnshttp://xml.apache.org/axis/wsdd/ xmlns:javahttp://xml.apache.org/axis/wsdd/providers/java service nameUploadFile providerjava:RPC parameter nameclassName valuecom.hoo.service.UploadFileService / parameter nameallowedMethods value* / parameter namescope valueSession / !-- 和服务器端上传文件的方法签名对应参数也对应 -- operation nameupload qnameoperNS:upload xmlns:operNSupload returnTyperns:string xmlns:rnshttp://www.w3.org/2001/XMLSchema parameter namehandler typens:DataHandler xmlns:nshttp://www.w3.org/2001/XMLSchema/ parameter namefileName typens:string xmlns:nshttp://www.w3.org/2001/XMLSchema/ /operation typeMapping qnamehns:DataHandler xmlns:hnsns:FileUploadHandler languageSpecificTypejava:javax.activation.DataHandler serializerorg.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory deserializerorg.apache.axis.encoding.ser.JAFDataHandlerDeserializerFactory encodingStylehttp://schemas.xmlsoap.org/soap/encoding// /service /deployment 上面才xml节点元素在前面都见过了说明下operation中的参数注意要指定参数类型特别是DataHandler的类型然后就是typeMapping的serializer、deserializer的序列化和反序列化工厂类的配置。 3、 用dos命令发布当前WebService C:\SoftWare\tomcat-5.0.28\tomcat-5.0.28\webapps\AxisWebService\WEB-INFjava -Djava.ext.dirslib org.apache.axis.client.AdminClient -lhttp://localhost:8080/AxisWebService/services/AdminService deployUpload.wsdd 发布完成后可以通过这个地址查看uploadFile这个service了 http://localhost:8080/AxisWebService/servlet/AxisServlet 4、 编写客户端代码 package com.hoo.client; import java.rmi.RemoteException; import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.xml.namespace.QName; import javax.xml.rpc.ParameterMode; import javax.xml.rpc.ServiceException; import org.apache.axis.client.Call; import org.apache.axis.client.Service; import org.apache.axis.encoding.XMLType; import org.apache.axis.encoding.ser.JAFDataHandlerDeserializerFactory; import org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory; /** * bfunction:/b上传文件WebService客户端 * * author hoojo * createDate Dec 18, 2010 1:38:14 PM * file UploadFileClient.java * package com.hoo.client * project AxisWebService * blog http://blog.csdn.net/IBM_hoojo * email hoojo_126.com * version 1.0 */ public class UploadFileClient { public static void main(String[] args) throws ServiceException, RemoteException { String url http://localhost:8080/AxisWebService/services/UploadFile; String fileName readMe.txt; String path System.getProperty(user.dir) \\WebRoot\\ fileName; System.out.println(path); //这样就相当于构造了一个带文件路径的File了 DataHandler handler new DataHandler(new FileDataSource(path)); Service service new Service(); Call call (Call) service.createCall(); call.setTargetEndpointAddress(url); /** * 注册异常类信息和序列化类 ns:FileUploadHandler 和 wsdd 配置文件中的typeMapping中的xmlns:hnsns:FileUploadHandler 的对应 DataHandler * 和 wsdd 配置文件中的typeMapping中的qnamehns:DataHandler的DataHandler对应 */ QName qn new QName(ns:FileUploadHandler, DataHandler); call.registerTypeMapping(DataHandler.class, qn, JAFDataHandlerSerializerFactory.class, JAFDataHandlerDeserializerFactory.class); call.setOperationName(new QName(url, upload)); //设置方法形参注意的是参数1的type的DataHandler类型的和上面的qn的类型是一样的 call.addParameter(handler, qn, ParameterMode.IN); call.addParameter(fileName, XMLType.XSD_STRING, ParameterMode.IN); //设置返回值类型下面2种方法都可以 call.setReturnClass(String.class); //call.setReturnType(XMLType.XSD_STRING); String result (String) call.invoke(new Object[] { handler, remote_server_readMe.txt }); System.out.println(result); } } 至此文件传输就完成了。怎么样还不错吧 如果你用myEclipse进行开发的话运行时可能会出现以下的错误: Exception in thread main java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream 原因是jar包版本不统一,解决方法如下: 删除Java EE 5 Libraries/javaee.jar/mail里的包有东西. 具体方法如下: 用rar打开X:/Program Files/MyEclipse 6.0/myeclipse/eclipse/plugins/com.genuitec.eclipse.j2eedt.core_6.0.1.zmyeclipse601200710/data/libraryset/EE_5/javaee.jar,然后删除mail,一切就ok了.