axis用过吧?版本1就可以
将你要传送的文件封装在DataHandler中,然后将DataHandler对象或DataHandler数组(多个文件传送的时候)作为客户端调用函数的参数(从客户端上传文件到服务器)Axis服务的返回类型(从服务器端下载文件贺返到客户端)进行传输。
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
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 = 0i <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>
自己试试。
WebService中文件传输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
/**
* <b>function:</b>Axis 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 [email protected]
* @version 1.0
*/
public class UploadFileService {
/**
* <b>function:</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
在服务端拿答写一个专门针对文件的方法猛清,客户端参数类型可以是Byte/DataHandler等类型,在服务端进行解析消知慧参数写入文件即可。最重要的是要设置WebService为可传递附件,默认的WebService仅仅支持一般数据类型的传递。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)