最近在做一个webservice的项目,本人选用的是Apache CXF来实现,因为需要再项目中进行大文件的传输问题,在网上找了很多这方面的资料,都不甚理想,说的都不够明白,有的文章讲的传输小文件还可以,在传输大文件的时候就会报内存溢出异常,这个是麻烦的事情,本人在综合了各位前辈的经验,终于实现了大文件大的传输问题,采用的是mtom的机制进行附件传输,废话少说,下面就是cxf整合spring进行大文件传输的一个例子,当然了,至于jar包就自己到官网下载了,首先开发客户端代码:
第一步:开发接口
package cn.genomics.signtureServer.cxf;
import javax.jws.WebParam;
import javax.jws.WebService;
import cn.genomics.signtureServer.model.Resume;
@WebService
public interface IFileUpload {
String upload(@WebParam(name="resume") Resume resume);
}
@WebService和(@WebParam这两个注释是不可以少的哦。
类Resume包含传输文件的参数:文件名,文件类型,数据源(可以是Datahandler或是一个字节数组)我这用的是Datahandler,代码如下:
package cn.genomics.signtureServer.model;
import javax.activation.DataHandler;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlMimeType;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="resume")
@XmlAccessorType(XmlAccessType.FIELD)
public class Resume {
private String fileName;
private String fileType;
@XmlMimeType("application/octet-stream")
private DataHandler fileData;
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public String getFileType() {
return fileType;
}
public void setFileType(String fileType) {
this.fileType = fileType;
}
public DataHandler getFileData() {
return fileData;
}
public void setFileData(DataHandler fileData) {
this.fileData = fileData;
}
}
@XmlMimeType("application/octet-stream")记住这个注释是必不可少的,说明这是一个二进制文件。