ohair@286: /* alanb@368: * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. ohair@286: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. ohair@286: * ohair@286: * This code is free software; you can redistribute it and/or modify it ohair@286: * under the terms of the GNU General Public License version 2 only, as ohair@286: * published by the Free Software Foundation. Oracle designates this ohair@286: * particular file as subject to the "Classpath" exception as provided ohair@286: * by Oracle in the LICENSE file that accompanied this code. ohair@286: * ohair@286: * This code is distributed in the hope that it will be useful, but WITHOUT ohair@286: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ohair@286: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License ohair@286: * version 2 for more details (a copy is included in the LICENSE file that ohair@286: * accompanied this code). ohair@286: * ohair@286: * You should have received a copy of the GNU General Public License version ohair@286: * 2 along with this work; if not, write to the Free Software Foundation, ohair@286: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. ohair@286: * ohair@286: * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA ohair@286: * or visit www.oracle.com if you need additional information or have any ohair@286: * questions. ohair@286: */ ohair@286: ohair@286: package com.sun.xml.internal.ws.encoding; ohair@286: ohair@286: import com.sun.xml.internal.org.jvnet.mimepull.MIMEPart; ohair@286: ohair@286: import javax.activation.DataSource; ohair@286: import java.io.InputStream; ohair@286: import java.io.IOException; ohair@286: import java.io.OutputStream; ohair@286: import java.io.File; ohair@286: ohair@286: import com.sun.xml.internal.ws.developer.StreamingDataHandler; ohair@286: ohair@286: /** ohair@286: * Implementation of {@link StreamingDataHandler} to access MIME ohair@286: * attachments efficiently. Applications can use the additional methods and decide ohair@286: * on how to access the attachment data in JAX-WS applications. ohair@286: * ohair@286: *

ohair@286: * for e.g.: ohair@286: * ohair@286: * DataHandler dh = proxy.getData(); ohair@286: * StreamingDataHandler sdh = (StreamingDataHandler)dh; ohair@286: * // readOnce() doesn't store attachment on the disk in some cases ohair@286: * // for e.g when only one huge attachment after soap envelope part in MIME message ohair@286: * InputStream in = sdh.readOnce(); ohair@286: * ... ohair@286: * in.close(); ohair@286: * sdh.close(); ohair@286: * ohair@286: * @author Jitendra Kotamraju ohair@286: */ ohair@286: public class MIMEPartStreamingDataHandler extends StreamingDataHandler { ohair@286: private final StreamingDataSource ds; ohair@286: ohair@286: public MIMEPartStreamingDataHandler(MIMEPart part) { ohair@286: super(new StreamingDataSource(part)); ohair@286: ds = (StreamingDataSource)getDataSource(); ohair@286: } ohair@286: alanb@368: @Override ohair@286: public InputStream readOnce() throws IOException { ohair@286: return ds.readOnce(); ohair@286: } ohair@286: alanb@368: @Override ohair@286: public void moveTo(File file) throws IOException { ohair@286: ds.moveTo(file); ohair@286: } ohair@286: alanb@368: @Override ohair@286: public void close() throws IOException { ohair@286: ds.close(); ohair@286: } ohair@286: ohair@286: private static final class StreamingDataSource implements DataSource { ohair@286: private final MIMEPart part; ohair@286: ohair@286: StreamingDataSource(MIMEPart part) { ohair@286: this.part = part; ohair@286: } ohair@286: alanb@368: @Override ohair@286: public InputStream getInputStream() throws IOException { ohair@286: return part.read(); //readOnce() ?? ohair@286: } ohair@286: ohair@286: InputStream readOnce() throws IOException { ohair@286: try { ohair@286: return part.readOnce(); ohair@286: } catch(Exception e) { ohair@286: throw new MyIOException(e); ohair@286: } ohair@286: } ohair@286: ohair@286: void moveTo(File file) throws IOException { ohair@286: part.moveTo(file); ohair@286: } ohair@286: alanb@368: @Override ohair@286: public OutputStream getOutputStream() throws IOException { ohair@286: return null; ohair@286: } ohair@286: alanb@368: @Override ohair@286: public String getContentType() { ohair@286: return part.getContentType(); ohair@286: } ohair@286: alanb@368: @Override ohair@286: public String getName() { ohair@286: return ""; ohair@286: } ohair@286: ohair@286: public void close() throws IOException { ohair@286: part.close(); ohair@286: } ohair@286: } ohair@286: ohair@286: private static final class MyIOException extends IOException { ohair@286: private final Exception linkedException; ohair@286: ohair@286: MyIOException(Exception linkedException) { ohair@286: this.linkedException = linkedException; ohair@286: } ohair@286: ohair@286: @Override ohair@286: public Throwable getCause() { ohair@286: return linkedException; ohair@286: } ohair@286: } ohair@286: ohair@286: }