java webservice 传输文件(四)
2014-11-24 09:56:29
·
作者:
·
浏览: 3
ttachment.getDataHandler().getInputStream()); } return image; } catch(Exception e) { e.printStackTrace(); return null; } } //把附件解码成Image public BufferedImage decodeImage(java.io.InputStream in)throws java.io.IOException { BufferedImage image=null ; image = new BufferedImage(600,800, BufferedImage.TYPE_INT_RGB); com.sun.image.codec.jpeg.JPEGImageDecoder dencoder = JPEGCodec.createJPEGDecoder(in); image=dencoder.decodeAsBufferedImage(); return image; } //打印附件的一些信息 private void printAttachmentInfo( AttachmentPart attachment)throws Exception { Object content = attachment.getContent(); System.out.println("ContentLocation="+attachment.getContentLocation()); System.out.println("Contentsize="+attachment.getSize()); System.out.println("ContentType="+attachment.getContentType()); String id = attachment.getContentId(); System.out.print("Attachment " + id + " contains: " +content); } }
(对于上面这段程序,请原谅我使用了一个特别庞大的getImageFromWebservice方法,并且使用了一个超级长的try{}语句,因为我实在没有时间来把它写得漂亮一点了^_^)
客户端的执行过程是这样的:
创建SOAP消息
发送SOAP消息
获得返回结果
从返回的SOAP消息中获得Attachment
对Attachment进行处理
由于一个SOAP消息中可能有多个附件,那么returnedSOAPMessage.getAttachments()方法获得的可能是一个Iterator,所以要遍历这个Iterator对SOAP消息的附件进行处理。attachment.getDataHandler().getInputStream()获得了附件的输入流,DecodeImage是从这个输入流进行获得输入,然后把它们解码成Image。这里的解码方式和BASE64解码方式稍有不同,BASE64解码方式是把String类型的对象解码成byte[],具体我们使用了sun.misc.BASE64Decoder类的decodeBuffer方法;这里的解码是把一个输入流中的数据解码成BufferedImage。
当然,这里举例的是图像的处理,如果是别的格式数据,您同样可以进行其它的处理。由于篇幅的限制,在这里就不在赘述了。 你同样可以运行GetImageByAttachmentClient来测试运行的效果。需要指出的是,使用这种方式来传输图像时效率比前一种方法好,响应速度(启动客户端到在客户端打印出图像的时间)大概是使用BASE64编码速度的一倍(我的机器环境是:WinXP,AMD Athlon XP 16000+,512M内存,Tomcat 4.03),您可以在您的机器上测试,如果您的测试结果比我的相差很多,您可以通过email告诉我,到时我们可以深入讨论这个效率问题。
运行代码说明:
运行前,需要安装JWSDP1.1。然后把代码(axis目录)拷贝到%JWSDP_HOME%/webapps/目录下,启动Tomcat即可。主程序在axis/WEB-INF/classes/目录下,分别是GetImageByString.java和GetImageByAttachmentClient.java。