// * 发送一个附件的情况
// */
// //设置附件
// //DataSource是对附件的封装,是一个接口,系统已经实现的子类有URLDataSource, DataHandlerDataSource, FileDataSource
// //里面封装了各种与附件有关的方法,包括获取附件的InputStream
// DataSource dataSource = new FileDataSource(new File("E:\\aaa.txt"))
// //DataHandler是对DataSource的封装,可以把Stream转换为String,
// DataHandler dataHandler = new DataHandler(dataSource)
// part4.setDataHandler(dataHandler)
// //附件的名称,默认为content,如果文件名不加仿衫扩展名在进行附件下载的时候系统会不知道该附件是什么类型的附件,
// //这样在不清楚文件类型的情况下,文件有可能是打不开的
// part4.setFileName("doc.sql")
//
// /**
// * 发送多个附件的情况
// */
// Multipart attachments = new MimeMultipart()
// BodyPart attach1 = new MimeBodyPart()
// //设置附件1的内容
// DataSource dataSource_attach1 = new FileDataSource(new File("E:\\aaa.txt"))
// DataHandler dataHandler_attach1 = new DataHandler(dataSource_attach1)
// attach1.setDataHandler(dataHandler_attach1)
// attach1.setFileName("attach1_doc.sql")
// BodyPart attach2 = new MimeBodyPart()
// //设置附件2的内容
// DataSource dataSource_attach2 = new FileDataSource(new File("E:\\aaa.txt"))
// DataHandler dataHandler_attach2 = new DataHandler(dataSource_attach2)
// attach2.setDataHandler(dataHandler_attach2)
// attach2.setFileName("attach2_doc.sql")
// attachments.addBodyPart(attach1)
// attachments.addBodyPart(attach2)
// part5.setContent(attachments)
//这里可以成功发磨圆送附件,请参考,发附件功能用得相对较少,瞎大塌注意附件大小不要太大了
当然可以传附件了、、。。。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>
自己试试。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)