使用axis1.4实现webservice,包含自定义对象、附件传输
发布时间:2020-12-17 01:15:50 所属栏目:安全 来源:网络整理
导读:目标:调用接口服务器端读取文件传输到客户端。 这里服务器端使用TOMCAT服务器,客户端直接在Eclipse中跑个小的应用程序将接收到的文件保存在硬盘(服务器端需要配置AXIS运行环境,这里不再描述)。 1,FilesObject.java package cn.ioid.test.axis;import j
目标:调用接口服务器端读取文件传输到客户端。 package cn.ioid.test.axis; import javax.activation.DataHandler; /** * 使用axis1.4实现webservice传输文件,返回结果对象 */ public class FilesObject { private String[] fileNames = null; private DataHandler[] files = null; public String[] getFileNames() { return fileNames; } public void setFileNames(String[] fileNames) { this.fileNames = fileNames; } public DataHandler[] getFiles() { return files; } public void setFiles(DataHandler[] files) { this.files = files; } } 2,FilesGetter.java package cn.ioid.test.axis; import javax.activation.DataHandler; import javax.activation.FileDataSource; /** * 使用axis1.4实现webservice传输文件,接口服务端 * <br>这里传入一个int型简单参数,返回一个自定义对象 */ public class FilesGetter { public FilesObject getFiles(int inparam){ FilesObject fo = new FilesObject(); fo.setFileNames(new String[]{"test.xls"}); FileDataSource fds = new FileDataSource("D:temptest.xls"); fo.setFiles(new DataHandler[]{new DataHandler(fds)}); return fo; } } 3,配置服务端的server-config.wsdd,添加: <service name="testAxis" provider="java:RPC"> <parameter name="allowedMethods" value="getFiles"/> <parameter name="className" value="cn.ioid.test.axis.FilesGetter"/> <beanMapping languageSpecificType="java:cn.ioid.test.axis.FilesObject" qname="ns1:FilesObject" xmlns:ns1="urn:FilesGetter"/> </service> 4,此时访问服务器:http://localhost:8080/axis/servlet/AxisServlet,点击“wsdl”,应该能看到服务的描述文件,说明正常服务发布。 5,编写客户端代码,使用axis自带的WADL2Java生成客户端代码 java -Djava.ext.dirs=D:Tomcat5.5.20webappsaxisWEB-INFlib org.apache.axis.wsdl.WSDL2Java http://localhost:8080/axis/services/testAxis?wsdl -p cn.ioid.test.axis注意-p参数,不写的话axis自动生成包名称比较乱。 6,编写调用代码:TestMain.java package cn.ioid.test.axis; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.net.URL; import javax.activation.DataHandler; import javax.xml.namespace.QName; import javax.xml.rpc.ParameterMode; import org.apache.axis.client.Call; import org.apache.axis.client.Service; import org.apache.axis.encoding.ser.BeanDeserializerFactory; import org.apache.axis.encoding.ser.BeanSerializerFactory; public class TestMain { public static void main(String[] args) { Service service = new Service(); try { Call call = (Call)service.createCall(); URL u = new URL("http://localhost:8080/axis/services/testAxis?wsdl"); call.setTargetEndpointAddress(u); call.setOperationName(new QName("urn:FilesGetter","getFiles")); call.addParameter("lastId",org.apache.axis.Constants.XSD_STRING,ParameterMode.IN); QName qnb = new QName("urn:BeanService","FilesObject"); call.registerTypeMapping(FilesObject.class,qnb,new BeanSerializerFactory(FilesObject.class,qnb),new BeanDeserializerFactory(FilesObject.class,qnb)); call.setReturnType(qnb); Object rtObj = call.invoke("getFiles",new Object[]{new Integer("0")}); if (rtObj != null) { FilesObject fo = (FilesObject)rtObj; String[] pns = fo.getFileNames(); DataHandler[] dhs = fo.getFiles(); for(int i=0; i<dhs.length; i++){ InputStream is = dhs[i].getInputStream(); File f = new File("D:temp_"+pns[i]); FileOutputStream fos = new FileOutputStream(f); int b = 0; while((b = is.read()) != -1){ fos.write(b); } fos.flush(); fos.close(); is.close(); } } } catch (Exception e) { e.printStackTrace(); } } } 7,写一个复杂点的Excel文件,命名为:test.xls保存到D:temp目录下 8,在Eclipse中直接Run ?--->?TestMain.java,该程序将读取“test.xls”并重命名为“_test.xls”保存到“D:temp”目录下 结束 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 日志切割工具cronolog yum安装和源码安装和基本使用
- websevice中runtime modeler error: Wrapper class com.ws.
- SOAP webserivce 和 RESTful webservice 对比及区别
- scala – 对Spark数据框/ Hive结果集进行排序
- angularjs – 如何在量角器中找到ng-repeat内的元素
- shell脚本学习第二天——变量定义(含字符串变量定义)
- angularjs – 通过Salesforce帐户循环
- 【数据结构】二叉树
- twitter-bootstrap – Bootstrap:img-responsive vs img-f
- bash – 使用ssh手动加载私钥