快捷搜索:

使用CXF和MTOM上传附件

CXF是一个不错的开源的WS框架,支持多种WS协议,此中包括对附件上传的协议MTOM,下文以一个例子来阐明,若何用CXF和MTOM来

实现上传一个WORD的文件到办事端。

首先是办事端WS的实现。我们编写一个POJO,来处置惩罚一个待上传的简历:

Resume.java

import javax.activation.DataHandler;

public class Resume

{

private String candidateName;

private String resumeFileType;

private DataHandler resume;

。。。。。。

这里留意应用DataHandler来处置惩罚待上传的简历WORD文件

接口:ResumeUploadService.java

import javax.jws.WebParam;

import javax.jws.WebService;

import com.thea.dto.Resume;

@WebService

public interface ResumeUploadService {

void uploadResume(@WebParam(name="resume") Resume resume);

}

这里应用了jax-ws规范的注释去实现

实现类:

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import javax.activation.DataHandler;

import javax.jws.WebService;

import com.thea.dto.Resume;

@WebService(endpointInterface = "com.thea.service.ResumeUploadService",

serviceName = "ResumeService")

public class ResumeUploadServiceImpl implements ResumeUploadService {

public void uploadResume(Resume resume) {

DataHandler handler = resume.getResume();

try {

InputStream is = handler.getInputStream();

OutputStream os = new FileOutputStream(new File("c:\\"

+ resume.getCandidateName() +"."+

resume.getResumeFileType()));

byte[] b = new byte[100000];

int bytesRead = 0;

while ((bytesRead = is.read(b)) != -1) {

os.write(b, 0, bytesRead);

}

os.flush();

os.close();

is.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

然后在src目录下建立cxf.xml,做为办事真个设置设置设备摆设摆设文件

这里留意应用了设置应用MTOM附件

接下来设计客户端:

作为客户端,必须首先有Resume的POJO类,以及还有办事真个接口ResumeUploadService,设计的Client如下:

public static void main(String args[]) throws Exception {

JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();

factory.getInInterceptors().add(new LoggingInInterceptor());

factory.getOutInterceptors().add(new LoggingOutInterceptor());

factory.setServiceClass(ResumeUploadService.class);

factory.setAddress

("http://localhost:8085/CxfUploadService/services/UploadResumeWS");

ResumeUploadService client = (ResumeUploadService) factory.create();

Resume resume=new Resume();

resume.setCandidateName("KarthikeyanC");

resume.setResumeFileType("doc");

DataSource source = new FileDataSource(new File("d:\\upload.doc"));

resume.setResume(new DataHandler(source));

client.uploadResume(resume);

System.exit(0);

}

留意这里因为应用了JaxWsProxyFactoryBean,并在法度榜样中设定了对WS的种种指定,以是不用再写客户真个WS文件了

您可能还会对下面的文章感兴趣: