java webservice下载文件,CXF webservice 上传以及下载文件

【实例简介】

CXF是支持对附件上传的协议MTOM。

MTOM(SOAP Message Transmission Optimization Mechanism)SOAP 消息传输优化机制,可以在SOAP 消息中发送二进制数据,与SAAJ 传输附件不同,MTOM需要XOP(XML-binary Optimized Packing)来传输二进制数据。MTOM 允许将消息中包含的大型数据元素外部化,并将其作为无任何特殊编码的二进制数据随消息一起传送。MTOM 消息会打包为多部分相关 MIME 序列,放在SOAP 消息中一起传送。因此你可以看出MTOM 并不是将附件转为Base64 编码,这样可以大大的提高性能,因为二进制文件转Base64 编码会非常庞大。

MTOM 方式中要传输的附件必须使用javax.activation.DataHandler 类,然后对象类型还要使用@javax.xml.binding.annotation.XmlMimeType 进行注解,标注这是一个附件类型的数据。

这里拿上传及下载用户的图像为例子,大致的说下CXF的MTOM协议对附件的支持

【实例截图】

【核心代码】

package com.exp.service.outer;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.util.ArrayList;

import java.util.List;

import javax.activation.DataHandler;

import javax.activation.FileDataSource;

import org.springframework.stereotype.Service;

@Service("HelloWorldImpl")

public class HelloWorldImpl implements HelloWorld {

public String say(String name) {

return name ",您好!";

}

public String sayHello(User user) {

return user.getName() ",您好!";

}

public List getList(Long id){

List list = new ArrayList();

User user = new User();

Long sid=1L;

user.setId(sid);

user.setName("张三" sid);

list.add(user);

user = new User();

sid=2L;

user.setId(sid);

user.setName("张三" sid);

list.add(user);

user = new User();

sid=3L;

user.setId(sid);

user.setName("张三" sid);

list.add(user);

return list;

}

/**

*

* 创 建 人: XX

* 创建时间: 2012-9-26 下午04:50:23

* @param user

* @see [类、类#方法、类#成员]

*/

public void updateUser(User user){

System.out.println("姓名:" user.getName() ",年龄:" user.getAge());

DataHandler handler = user.getImageData();

try {

InputStream is = handler.getInputStream();

OutputStream os = new FileOutputStream(new File("c:\\test11.jpg"));

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();

}

}

/**

* 查询用户信息,包括以附件的形式返回用户的图像

* 创 建 人: XX

* 创建时间: 2012-9-26 下午04:49:43

* @return

* @see [类、类#方法、类#成员]

*/

public User getUser(){

User user =new User(11L,"李四",21);

user.setImageData(new DataHandler(new FileDataSource(new File("d:" File.separator) "test.jpg")));

return user;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值