免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
九、WebService中文件傳輸

WebService處理傳遞普通的信息,還可以傳輸文件,下面介紹WebService是怎么完成文件傳輸?shù)摹?/p>

1、 首先編寫(xiě)服務(wù)器端上傳文件的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完成文件上傳服務(wù)器端
*
@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 hoojo_@126.com
*
@version 1.0
*/
public class UploadFileService {

/**
* <b>function:</b>傳遞文件
*
@author hoojo
* @createDate Dec 18, 2010 1:27:58 PM
*
@param handler DataHandler這個(gè)參數(shù)必須
*
@param fileName 文件名稱(chēng)
*
@return upload Info
*/
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中上傳唯一不同的就是參數(shù)一DataHandler,可以將這類(lèi)看成文件傳輸器,他可以把文件序列化。然后通過(guò)DataHandler可以得到一個(gè)輸入流InputStream,通過(guò)這個(gè)流可以讀到文件的內(nèi)容。其他的操作和普通上傳類(lèi)似。

2、 定制wsdd發(fā)布文件上傳的WebService服務(wù)

 

<?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" />
<!-- 和服務(wù)器端上傳文件的方法簽名對(duì)應(yīng),參數(shù)也對(duì)應(yīng) -->
<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節(jié)點(diǎn)元素在前面都見(jiàn)過(guò)了,說(shuō)明下operation中的參數(shù),注意要指定參數(shù)類(lèi)型,特別是DataHandler的類(lèi)型,然后就是typeMapping的serializer、deserializer的序列化和反序列化工廠(chǎng)類(lèi)的配置。

3、 用dos命令發(fā)布當(dāng)前WebService

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

發(fā)布完成后,可以通過(guò)這個(gè)地址查看uploadFile這個(gè)service了

http://localhost:8080/AxisWebService/servlet/AxisServlet

4、 編寫(xiě)客戶(hù)端代碼

 


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;

/**
* <b>function:</b>上傳文件WebService客戶(hù)端
*
*
@author hoojo
* @createDate Dec 18, 2010 1:38:14 PM
* @file UploadFileClient.java
* @package com.hoo.client
* @project AxisWebService
* @blog
http://blog.csdn.net/IBM_hoojo
* @email hoojo_@126.com
*
@version 1.0
*/
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);

//這樣就相當(dāng)于構(gòu)造了一個(gè)帶文件路徑的File了
DataHandler handler = new DataHandler(new FileDataSource(path));

Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(url);

/**
* 注冊(cè)異常類(lèi)信息和序列化類(lèi) ns:FileUploadHandler 和 wsdd 配置文件中的typeMapping中的xmlns:hns="ns:FileUploadHandler" 的對(duì)應(yīng) DataHandler
* 和 wsdd 配置文件中的typeMapping中的qname="hns:DataHandler"的DataHandler對(duì)應(yīng)
*/
QName qn = new QName("ns:FileUploadHandler", "DataHandler");
call.registerTypeMapping(DataHandler.class, qn,
JAFDataHandlerSerializerFactory.class,
JAFDataHandlerDeserializerFactory.class);
call.setOperationName(new QName(url, "upload"));

//設(shè)置方法形參,注意的是參數(shù)1的type的DataHandler類(lèi)型的,和上面的qn的類(lèi)型是一樣的
call.addParameter("handler", qn, ParameterMode.IN);
call.addParameter("fileName", XMLType.XSD_STRING, ParameterMode.IN);

//設(shè)置返回值類(lèi)型,下面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);
}
}

 

 

至此,文件傳輸就完成了。怎么樣,還不錯(cuò)吧!

如果你用myEclipse進(jìn)行開(kāi)發(fā)的話(huà),運(yùn)行時(shí)可能會(huì)出現(xiàn)以下的錯(cuò)誤:

Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream

原因是jar包版本不統(tǒng)一,解決方法如下:

刪除Java EE 5 Libraries/javaee.jar/mail里的包有東西.

具體方法如下:

用rar打開(kāi)X:/Program Files/MyEclipse 6.0/myeclipse/eclipse/plugins/com.genuitec.eclipse.j2eedt.core_6.0.1.zmyeclipse601200710/data/libraryset/EE_5/javaee.jar,然后刪除mail,一切就ok了.

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
利用AXIS開(kāi)發(fā)Webservice(五) —— 如何傳遞文件
J2EE Web服務(wù)開(kāi)發(fā)系列之六: 使用Handler來(lái)增強(qiáng)Web服務(wù)的功能
java axis webservice 開(kāi)發(fā)實(shí)例 - 劉志猛博客
WebService大講堂之Axis2(4):二進(jìn)制文件傳輸
J2ME與WebService-KSOAP的羅曼史
Java - Webservice調(diào)用方式詳解
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服