Java WS和二进制数据传送
2008-02-23 09:34:51来源:互联网 阅读 ()
(一) 有关介绍
二进制数据在WS中传送,可以有两种方式:
1 把数据直接作为XML文档中某元素的字节流,作为XML解析器要解析的一部分,很明显这种方式比较低效.
2 二进制数据作为附件,作为带外(out of band)数据随同XML发送, 提高了效率.目前这类处理有几个规范:
DIME(直接 Internet 消息封装),这个数据包装格式及其处理,只有微软在支持.
http://www.microsoft.com/china/msdn/archives/library/dnwebsrv/html/DIMEWSAttch.asp
http://www.zdnet.com.cn/developer/code/story/0,3800066897,39358789,00.htm
MTOM(SOAP 消息传输优化机制)和XOP(二进制 XML 优化封装);
在Sun规范JAX-RPC1.1中,要求使用SwA(SOAP with Attachments) 支持附件,为此Sun提供了SOAP with Attachments API for Java,带附件的SoapAPI(SAAJ),早期它和jaxm合在一起的,现在已经独立开来形成了soap包,这个API专门用来处理Soap附件的所有操作.
JAXRPC 1.1 规范定义了MIME类型到Java类型的影射.
MIME Type
Java Typeimage/gifjava.awt.Imageimage/jpegjava.awt.Imagetext/plainjava.lang.Stringmultipart/*javax.mail.internet.MimeMultiparttext/xml or application/xmljavax.xml.transform.Source
JAXRPC 1.1 规范定义了这种情况:当绑定到上表中没有定义的类型影射或者是绑定到备用MIME类型时,它应该影射到 javax.activation.DataHandler.
wscompile工具中的选项-f:<features>用于类型影射的项:datahandleronly,该项指明总是把附件影射到DataHandler类型.
(二) 编写例子应用
文件清单
SEI接口类IImage.java,实现SEI接口的类IIMageImpl.java,描述文件信息的值类型类FileInfo.java,Web应用部署描述文件web.xml,WS发布配置文件jaxrpc-ri.xml,WS编译配置文件config-interface.xml,构建客户端桩的config-wsdl.xml,构建文件build.xml
客户端测试类:MainBrowser.java,ImageListProvider.java和ImageLabelProvider.java,测试使用了SWT和JFace,请适当配置你的Eclipse环境,引入适当的库.
这个例子是从SEI开始,绑定样式为 RPC.
IImage.java清单:
package com.bin;
import java.rmi.Remote;
import java.rmi.RemoteException;
import javax.activation.*;
import javax.xml.soap.*;
import java.util.*;
public interface IImage extends Remote {
public DataHandler fetchImg(String sn) throws RemoteException;
public ArrayList fetchImgs(String[] sn) throws RemoteException;
public SOAPMessage construcMsg(String[] fn) throws RemoteException;
public ArrayList fetchFileList() throws java.rmi.RemoteException;
public FileInfo getFileList(String fn) throws java.rmi.RemoteException;
}
实现类 ImageImpl.java清单:
package com.bin;
import javax.xml.soap.*;
import java.net.*;
import java.util.*;
import java.io.*;
import javax.activation.*;
import java.rmi.*;
import java.awt.*;
import javax.xml.rpc.ServiceException;
import javax.xml.rpc.server.*;
import javax.xml.rpc.handler.soap.SOAPMessageContext;
import javax.xml.rpc.handler.MessageContext;
import javax.Servlet.ServletContext;
import com.sun.xml.rpc.server.*;
public class ImageImpl implements IImage, ServiceLifecycle {
ServletEndpointContext servletEndpointContext = null;
String binarypath = "";
ArrayList al;
ServletContext servletContext = null;
public void init(Object p0) throws ServiceException {
// Some logic to do upon service creation
servletEndpointContext = (ServletEndpointContext) p0;
servletContext = servletEndpointContext.getServletContext();
binarypath = servletContext.getInitParameter("BinaryPath");
}
public void destroy() {
// Some logic to do on service destruction - e.g. clean up JDBC
servletEndpointContext = null;
servletContext = null;
}
public ArrayList fetchFileList() throws RemoteException {
File file = new File(this.binarypath);
//System.out.println(this.binarypath);
if (al == null)
al = new ArrayList();
File[] c = file.listFiles();
for (int i = 0; i < c.length; i ) {
FileInfo fi = new FileInfo();
fi.setIsdir(c[i].isDirectory());
fi.setFilename(c[i].getName());
fi.setFilelength(c[i].length());
fi.setFilepath(c[i].getAbsolutePath());
fi.setCreatedate(new Date(c[i].lastModified()));
al.add(fi);
}
return al;
}
public DataHandler fetchImg(String sn) throws RemoteException {
File file = new File(sn);
DataHandler dataHandler = null;
try {
URL url = new URL(file.toURL().toString());
dataHandler = new DataHandler(url);
} catch (Exception ex) {
System.out.println(ex);
throw new RemoteException(ex.getMessage());
}
return dataHandler;
}
public ArrayList fetchImgs(String[] fn) throws RemoteException {
ArrayList al = new ArrayList();
try {
for (int i = 0; i < fn.length; i ) {
File file = new File(fn[i]);
// Create attachment part for image
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash