基本信息
源码名称:CXF webservice 上传以及下载文件
源码大小:13.32M
文件格式:.zip
开发语言:Java
更新时间:2015-12-07
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 2 元 
   源码介绍

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<User> getList(Long id){
		List<User> list = new ArrayList<User>();
		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;
	}
}