如何使用Axis传送附件[原]

原创 2004年07月08日 09:35:00

使用Axis传送附件有两种方式:

1. 将你要传送的文件封装在DataHandler中,然后将DataHandler对象或DataHandler数组(多个文件传送的时候)作为客户端调用函数的参数(从客户端上传文件到服务器)Axis服务的返回类型(从服务器端下载文件到客户端)进行传输。

2. 还有一种方式是直接修改soap信封的内容,将附件信息加到soap信封中发送。

这里我们只讨论第一种方法,因为它实现起来非常简单。关于第二种方法在Axis包的webapps/attachments/TestRf.java中有详细的原码可以参考。

下面的例子是把文件从服务器端下载到客户端:

1.服务端程序:

假设传输多个文件:在服务器端将文件取出来,并将文件封装在DataHandler数组中。
代码如下:

 DataHandler[] ret = new DataHandler[totalFileNum];
 ... ...
 java.io.File myFile = new java.io.File(filePath);
 if(myFile.isFile() && myFile.canRead())
 {
  String fname = myFile.getAbsoluteFile().getCanonicalPath();
  DataHandler[0] = new DataHandler(new FileDataSource(fname));
 }
 ... ...

 return ret;

上面的代码将所有的文件封装在了DataHandler数组中,并返回。

2. 客户端的访问:

代码如下:
 Service service = new Service();
 Call call = (Call) service.createCall();

 URL myURL = new URL("http://192.168.0.26:8080/axis/servlet/AxisServlet");
 call.setTargetEndpointAddress(myURL); //设定服务的主机和位置
 call.setOperationName(new QName("urn:MyAttachServer","echoDir")); //设置要调用的服务的方法
 QName qnameAttachment = new QName("urn:MyAttachServer","DataHandler");

 call.registerTypeMapping(DataHandler.class, qnameAttachment, JAFDataHandlerSerializerFactory.class,JAFDataHandlerDeserializerFactory.class); //为附件(即DataHandler类)创建序列化生成器

 call.addParameter("source", XMLType.XSD_STRING ,ParameterMode.IN); //设置服务调用方法的传入参数类型
 call.setReturnType(XMLType.SOAP_ARRAY); //设置调用服务方法的返回类型,由于返回的是DataHandler数组,所以设置为SOAP_ARRAY类型
 javax.activation.DataHandler[] ret = (javax.activation.DataHandler[])call.invoke(new Object[]{null}); //调用方法

 for (i = 0; i < ret.length; ++i)
        {
            DataHandler recDH = ret[i];
            java.io.File receivedFile = new java.io.File(recDH.getName()); //文件生成
        }

3. 服务的部署:

注意:你要在部署的时候,定义DataHandler的序列化生成器。

  编写deploy.wsdd文件:

 <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java" xmlns:ns1="urn:att_STC_Server" >
  <service name="urn:att_STC_Server" provider="java:RPC" >
    <parameter name="className" value="samples.att_STC.att_STC_Server"/>
    <parameter name="allowedMethods" value="echoDir"/>

 <typeMapping deserializer="org.apache.axis.encoding.ser.JAFDataHandlerDeserializerFactory"
   languageSpecificType="java:javax.activation.DataHandler" qname="ns1:DataHandler"
    serializer="org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory"
    encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
  </service>

</deployment>

运行java org.apache.axis.client.AdminClient %* deploy.wsdd,部署服务。

有想要源代码的请留下邮箱地址

如何使用Axis传送附件

使用Axis传送附件有两种方式:1. 将你要传送的文件封装在DataHandler中,然后将DataHandler对象或DataHandler数组(多个文件传送的时候)作为客户端调用函数的参数(从客户...
  • xiongbobo
  • xiongbobo
  • 2005-07-24 10:11:00
  • 1096

如何使用Axis传送附件

使用Axis传送附件有两种方式:1. 将你要传送的文件封装在DataHandler中,然后将DataHandler对象或DataHandler数组(多个文件传送的时候)作为客户端调用函数的参数(从客户...
  • TomyGuan
  • TomyGuan
  • 2006-02-21 17:31:00
  • 895

在axis中实现附件上传

通过SOAP传送文件,最简单的方式就是将数据先进行Base64编码,这对于数据量小的文件来说是一个不错的解决方案,同时实现起来也比较方便.然后Base64编码有其局限性,经过编码后的数据要比原文多1/...
  • tsimgsong
  • tsimgsong
  • 2007-01-10 01:02:00
  • 1346

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

WebService处理传递普通的信息,还可以传输文件,下面介绍WebService是怎么完成文件传输的。 1、 首先编写服务器端上传文件的WebService方法 package com.ho...
  • FZfeng
  • FZfeng
  • 2014-02-19 15:21:38
  • 4674

如何使用Axis传送附件[转载]

使用Axis传送附件有两种方式:1. 将你要传送的文件封装在DataHandler中,然后将DataHandler对象或DataHandler数组(多个文件传送的时候)作为客户端调用函数的参数(从客户...
  • liumyong
  • liumyong
  • 2004-12-08 14:13:00
  • 834

soap消息如何传送附件

soap消息如何传送附件 项目中使用了soap接口实现远程通讯,有文件传送的需求。常见的解决方案如下: 文件内容读出后,使用base64编码传输 通过MTOM方式,以消息附件发送 如果文件内...
  • iamthefirstone
  • iamthefirstone
  • 2017-07-30 17:50:03
  • 313

axis1.4部署webService 读取和响应Header信息\传送文件\BasicHandler\ SimpleChain\传递对象集合等测试

axis1.4部署webService 读取和响应Header信息\BasicHandler\ SimpleChain等测试 webSevice开发指南+项目测试(已有所相关的jar包)+源码+部署相...
  • liangrui1988
  • liangrui1988
  • 2013-12-29 13:08:15
  • 1527

java 中用Axis访问C#的webservice接口

自己随便整理的 ,写得不好请见谅 方法一: 要遵守axis的一些语法规则,它内部做了封装处理,只要传指定参数即可 引入的jar包: axis.jar     commons-digester-2....
  • fangqun663775
  • fangqun663775
  • 2015-04-23 16:38:27
  • 654

smtp发送邮件和附件

// testsmtp.cpp : Defines the entry point for the console application.   //      #include "stdafx...
  • stonesharp
  • stonesharp
  • 2013-10-08 13:22:10
  • 1449

phpcms v9附件上传后显示链接名称如何改为附件名称?

使用phpcms v9的朋友都知道,v9在后台添加内容的时候上传附件显示的是一个链接,这样太不人性化了,那怎么显示文件名称呢 ?小编以前发布文章的时候都是上传后复制链接在给文字加上超链接的,这样非常的...
  • sinat_14932597
  • sinat_14932597
  • 2015-09-12 12:11:17
  • 353
收藏助手
不良信息举报
您举报文章:如何使用Axis传送附件[原]
举报原因:
原因补充:

(最多只允许输入30个字)