利用axis创建webservice实现文件传输

用基于AXIS的Web Service传输文件   最近项目中需要使用Web Service来传输文件,研究了下Axis中对文件传输的支持机制,现写在博客里,一方面是作为备忘,二来希望对用到的人有作帮助。  Axis中主要使用DataHandler来提供对文件的读入操作,DataHandler的getInputStream方法可以得到从客户端传入的文件流,DataHandler的作用主要是对客户端传输的文件进行序列化操作。  下面来看S 阅读详情
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;

/**
 * axis WebService完成文件上传服务器端
 */
public class UploadFileService {

    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服务,在WEB-INF/目录下创建deploy.wsdd文件,文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
    xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
    <service name="UploadFile" provider="java:RPC">
        <parameter name="className" value="com.hoo.service.UploadFileService" />
        <parameter name="allowedMethods" value="*" />
        <parameter name="scope" value="Session" />
        <!-- 和服务器端上传文件的方法签名对应,参数也对应 -->
        <operation name="upload" qname="operNS:upload" xmlns:operNS="upload" returnType="rns:string"
            xmlns:rns="http://www.w3.org/2001/XMLSchema">
            <parameter name="handler" type="ns:DataHandler" xmlns:ns="http://www.w3.org/2001/XMLSchema"/>
            <parameter name="fileName" type="ns:string" xmlns:ns="http://www.w3.org/2001/XMLSchema"/>
        </operation>
        <typeMapping qname="hns:DataHandler" xmlns:hns="ns:FileUploadHandler"  
            languageSpecificType="java:javax.activation.DataHandler"
    serializer="org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory" deserializer="org.apache.axis.encoding.ser.JAFDataHandlerDeserializerFactory" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
    </service>
</deployment>

 上面才xml节点元素在前面都见过了,说明下operation中的参数,注意要指定参数类型,特别是DataHandler的类型,然后就是typeMapping的serializer、deserializer的序列化和反序列化工厂类的配置。这里的deploy.wsdd是我们刚才定制的wsdd文件,java当然是jvm的命令,-Djava.ext.dirs=lib设置当前命令的依赖包,AdminClient是axis提供的工具类,这个类本来是可以在官方的工程中admin可以直接运行的(这里不可以,下载下来的少了AdminServlet,有兴趣的可以研究下,就是前面说的官方的示例);


3、 用dos命令发布当前WebService

C:\apache-tomcat-5.5.26\webapps\axis\WEB-INF>java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -lhttp://localhost:8080/axis/services/AdminService deployUpload.wsdd

发布完成后,可以通过这个地址查看uploadFile这个service了

http://localhost:8080/axis/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;

/**
 * 上传文件WebService客户端
 */
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:hns="ns:FileUploadHandler" 的对应 DataHandler
         * 和 wsdd 配置文件中的typeMapping中的qname="hns: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);
    }
}
Java使用Axis远程调用webService、传输文件 一、引言 项目需要对接一部分数据进来,刚想问一下有没有接口api,一个wsdl结尾的webService链接就猝不及防的闯入了。 好吧。准备工作 由于项目原因无maven,jar包只能引入项目了 环境:jdk1.7,axis.jar 简单测试后出现诸多问题又引入了commons-discovery.jar、cxf.jar、jackson-annotations.jar、jackson-core.jar、jackson-databind.jar、jaxrpc.jar 如果遇到jar包版本冲突问题多 阅读详情

相关推荐

Axis实现webservice完整实例

利用空闲时间整理出的使用Axis实现的webservice,该实例为Axis实现的服务端和客户端的完整实例代码(测试已通过),希望能帮助跟我一样初次接触webservice的新手

AXIS:使用web service进行文件的上传

文件的上传同一般JavaBean类的上传没有太大的区别,主要是使用javax.activation.DataHandler类来对文件进行包装。下面是一个可以进行文件上传的web service的例子,这里只给出了文件上传相关部分的代码。 1,服务器端Java类: 这个类接收客户端上传的文件,并进行相关处理,我这里仅仅是把客户端上传的文件存放到服务器的指定目录,下面是服务器端的处理方法代

糖糖糖糖糖先森 1295

深入解析Vivado FIFO的Standard与FWFT模式:性能对比与应用场景

本文深入解析了Vivado FIFO的Standard与FWFT两种工作模式的核心差异。通过对比数据就绪时机、读延迟、控制逻辑和有效深度等关键特性,并结合图像处理、数据包转发等典型应用场景,为FPGA设计者提供了清晰的选择依据和实战配置指南,帮助优化数据流性能与设计效率。

weixin_29219189的博客 255

WebService 大文件上传,怎么断点续传

4GB以上超大文件上传和断点续传服务器的实现 随着视频网站和大数据应用的普及,特别是高清视频和4K视频应用的到来,超大文件上传已经成为了日常的基础应用需求。 但是在很多情况下,平台运营方并没有大文件上传和断点续传的开发经验,往往在网上找一些简单的PHP或者Java程序来实现基本的上传功能,然而在实际使用中会发现,这些基于脚本语言实现的上传功能模块性能很弱,一是不支持2GB以上的内容上传;二是无法支持断点续传;三是效率极低,单台服务器最多支持几十个并发上传连接。 当前我们要搭建一个运营级的视频服务平台,

Mr_Zang666的博客 186

Cibersort免疫浸润 --- 详细教程

免疫浸润是指免疫细胞如淋巴细胞、浆细胞、巨噬细胞等进入到组织或器官中,并在这些组织或器官中发挥免疫功能的过程。免疫细胞的浸润可以是炎症反应的一部分,也可以是针对感染、肿瘤或其他疾病的免疫应答的一部分。免疫浸润通过调节免疫反应和炎症反应的程度和类型,起到维护机体免疫平衡和清除异常细胞或病原体的作用。在某些情况下,免疫浸润可能导致炎症反应过度,引起组织损伤,例如自身免疫性疾病。因此,免疫浸润在许多疾病的诊断和治疗中都具有重要的意义。免疫浸润可以通过组织切片染色和免疫组织化学等方法观察和分析。

ZxVSaccount的博客 9109

【UOJ170】Picks loves segment tree VIII

【题目链接】 点击打开链接 【前置阅读】 【BZOJ4695】最假女选手 【BZOJ3064】【TYVJ1518】CPU监控【UOJ169】【UR #11】元旦老人与数列 【思路要点】 前置阅读中的前两题中,我们分别对线段树的区间取最大/最小值和线段树的历史最大/最小值进行了研究。本题中,两类问题同时出现,因此我们

cz_xuyixuan的博客 1254

使用Axis2实现WebService的发布和调用

一、Axis2简介: Axis2是一套崭新的WebService引擎,该版本是对Axis1.x重新设计的产物。Axis2不仅支持SOAP1.1和SOAP1.2,还集成了非常流行的REST WebService,同时还支持Spring、JSON等技术。在本文中主要介绍了如何使用Axis2开发一个不需要任何配置文件的WebService,并在客户端使用Java调用这个WebService。 二、A...

weixin_30877755的博客 1048

V-REP(Cooprliesim EDU)自学笔记 实现UR5机械臂末端按轨迹移动

V-REP(Cooprliesim EDU)自学笔记 实现UR5机械臂末端按轨迹移动

xu_white的博客 7583

使用axis2进行WebService的开发

使用axis2进行WebService的开发 Apache Axis2 是 Apache Axis SOAP 项目的后继项目。此项目是 Web 服务核心引擎的重要改进,目标是成为 Web 服务和面向服务的体系结构(Service-Oriented Architecture,SOA)的下一代平台。 axis2 WebService开发分为服务端开发与客户端开发,服务端开发为对外提供服务,客户

Hsing Hsu's Blog 4万+

FreeModbus从入门到实战:手把手教你用STM32实现工业级Modbus RTU通信

本文详细介绍了如何使用STM32和FreeModbus实现工业级Modbus RTU通信,涵盖硬件搭建、协议栈移植及优化技巧。重点解析了FreeModbus的移植过程,包括串口驱动适配、定时器配置和工业级稳定性优化,为开发者提供了一套完整的工业通信解决方案。

weixin_33737774的博客 350

petalinux2022.2启动文件编译配置

petalinux2021之前的版本里,导入目录components/yocto/下的“environment-setup-aarch64-xilinx-linux” 和 “layers/core/oe-init-build-env”的环境,能使用Yocto的devtool工具。(加入下面内容,先petalinux-build下载完成后才能有源码)制作 BOOT.BIN 启动文件:petalinux-package --boot --fsbl --fpga --u-boot --force。

wangjie36的博客 1391

WebService大讲堂之Axis2(4):二进制文件传输

原文来自:http://www.blogjava.net/nokiaguy/archive/2009/01/archive/2009/01/04/249805.html  在《WebService大讲堂之Axis2(2):复合类型数据的传递》中讲过,如果要传递二进制文件(如图像、音频文件等),可以使用byte[]作为数据类型进行传递,然后客户端使用RPC方式进行调用。这样做只是其中的一种方法...

lanjiasheng的专栏 115

华为od 面试八股文_Spring_03_含答案

控制反转IOC是一个很大的概念,可以用不同的方式来实现。其主要实现方式有两种:依赖注入和依赖查找依赖注入;

MISAYAONE的博客 2341

java中通过axis2访问webservice实现文件传输

axis1和axis2在技术架构上有着很大的不同,在网上找了很多方法,在自己本地测试无法通过。后来发现这是axis的版本不同,导致很多方法无法找到。 下面介绍axis2实现访问webservice,首先搭建webservice服务端: 在官网下载axis2所依赖的jar包。官网地址:http://axis.apache.org/axis2/java/core/download.cgi 下载ax...

qq_39481762的博客 2885

Linux 命令行的艺术

Linux 命令行的艺术前言基础日常使用文件及数据处理系统调试单行脚本冷门但有用仅限 OS X 系统仅限 Windows 系统更多资源免责声明熟练使用命令行是一种常常被忽视,或被认为难以掌握的技能,但实际上,它会提高你作为工程师的灵活性以及生产力。本文是一份我在 Linux 上工作时,发现的一些命令行使用技巧的摘要。有些技巧非常基础,而另一些则相当复杂,甚至晦涩难懂。这篇文章并不长,但当你能够熟练...

AI天才研究院 9283

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

利用AXIS开发Webservice传递文件

利用AXIS开发Webservice传递文件: 我们先来编写服务器代码 Java代码  package com.chnic.webservice; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io...

黒涩兲箜 207

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

axis+webservice教程

利用 AXIS 开发 Webservice(一) —— 如何 发布自己的 webservice 先介绍下本人开发环境吧。 JDK 1.4.2 + Myeclipse 6.0(实在经不起诱惑,尝尝鲜) + Tomcat 5.0.28 + AXIS 1.4。 AXIS 1.4 包可以在 http://ws.apach

狮子心2012的专栏 2904

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

java webservice 文件传输_九、WebService中文件传输

WebService处理传递普通的信息,还可以传输文件,下面介绍WebService是怎么完成文件传输的。1、 首先编写服务器端上传文件的WebService方法代码packagecom.hoo.service;importjava.io.File;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importja...

weixin_34642354的博客 983

WebService学习笔记4——AXIS1基础

1.AXIS简介:Axis是Apache组织推出的SOAP引擎,Axis项目是Apache组织著名的SOAP项目的后继项目,目前最新版本是采用Java开发的1.1版本,C++的版本正在开发之中。但是Axis不仅仅是一个SOAP引擎,它还包括:(1). 一个独立运行的SOAP服务器。 (2).一个servlet引擎的插件,这个servlet引擎可以是Tomcat。 (3).对WSDL的扩展支持。(4).一个将WSDL的描述生成JAVA类的工具。 (5).一些示例代码。 (6).还有一个监控TCP/IP

Tony Chen的专栏 8235

java 利用webservice传输文件

几天前,好不容易用java的ftp方式实现传输数据了,可结果客户觉得ftp传输数据不安全,而且嫌弃ftp还单独创建一个ftp服务器,觉得管理起来比较麻烦,所以人家希望用webservice来传输数据,虽然webservice用来传递数据量比较大的数据时,会不太稳定,但是客户喜欢那就照做啦。关于ftp数据上传我会单独写文章来说明。 好了下面就来开始整理webservice传输文件把。 既然

爱的叹息的专栏 4万+

使用axis1.4实现webservice,包含自定义对象、附件传输

目标:调用接口服务器端读取文件传输到客户端。 这里服务器端使用TOMCAT服务器,客户端直接在Eclipse中跑个小的应用程序将接收到的文件保存在硬盘(服务器端需要配置AXIS运行环境,这里不再描述)。 1,FilesObject.java package cn

比特零的专栏 3165

webservice+axis文件传递

今天来介绍一下如何利用AXIS来传递文件。因为这已经是关于AXIS的第五篇文章了,所以讲的会比较快,有不明白的朋友可以翻翻前面的文章来参考一下。 <br /> <br />直入主题,我们先来编写服务器代码Java代码 package com.chnic.webservice;     import java.io.File;   import java.io.FileOutputStream;   import java.io.IOException;   import java.io.InputStre

xufaxi的专栏 600

axis传递文件

利用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;     publicclass FileTransfer {         public

xufaxi的专栏 954

Webservice传送文件的实现(AXIS2 MTOM)

工作环境:IDE:Eclipse 3.1.2 jdk: jdk1.5.0_06 Tomcat: apache-tomcat-5.5.15 AXIS2:1.0(war版本和bin版本) 环境准备: http://ws.apache.org/axis2/download/1_0/download.cgi去下载AXIS2的Binary Distribution url: htt...

★不可思议★ 160

WebService中文件传输

见:http://www.cnblogs.com/hoojo/archive/2010/12/20/1911385.html WebService处理传递普通的信息,还可以传输文件,下面介绍WebService是怎么完成文件传输的。 1、 首先编写服务器端上传文件的WebService方法 package com.hoo.service; impor

愿我如星君如月 ... 夜夜流光相皎洁 ... 1457
上一篇: java swing内嵌浏览器
下一篇: WebKit – WebKit For Android
FZfeng
博客等级 码龄19年 72粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值