All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.axiom.attachments.MultipartAttachmentStreams Maven / Gradle / Ivy

There is a newer version: 1.4.0
Show newest version
/*
 * Copyright 2004,2005 The Apache Software Foundation.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.apache.axiom.attachments;

import java.io.IOException;
import java.util.Enumeration;

import javax.mail.Header;
import javax.mail.MessagingException;
import javax.mail.internet.InternetHeaders;

import org.apache.axiom.om.OMException;
/**
 * The MultipartAttachmentStreams class is used to create
 * IncomingAttachmentInputStream objects when the HTTP stream shows a marked
 * separation between the SOAP and each attachment parts. Unlike the DIME
 * version, this class will use the BoundaryDelimitedStream to parse data in the
 * SwA format. Another difference between the two is that the
 * MultipartAttachmentStreams class must also provide a way to hold attachment
 * parts parsed prior to where the SOAP part appears in the HTTP stream (i.e.
 * the root part of the multipart-related message). Our DIME counterpart didn't
 * have to worry about this since the SOAP part is guaranteed to be the first in
 * the stream. But since SwA has no such guarantee, we must fall back to caching
 * these first parts. Afterwards, we can stream the rest of the attachments that
 * are after the SOAP part of the request message.
 */
public final class MultipartAttachmentStreams extends IncomingAttachmentStreams {
    private BoundaryDelimitedStream _delimitedStream = null;

    public MultipartAttachmentStreams(BoundaryDelimitedStream delimitedStream)
            throws OMException {
    	this._delimitedStream = delimitedStream;
    }

    /**
     * 
     * @see org.apache.axis.attachments.IncomingAttachmentStreams#getNextStream()
     */
    public IncomingAttachmentInputStream getNextStream() throws OMException {
    	IncomingAttachmentInputStream stream;
    	
    	if (!isReadyToGetNextStream()) {
    		throw new IllegalStateException("nextStreamNotReady");
    	}
    	
    	InternetHeaders headers;
    	
    	try {
    		_delimitedStream = _delimitedStream.getNextStream();
    		if (_delimitedStream == null) {
    			return null;
    		}
    		
        	headers = new InternetHeaders(_delimitedStream);

    	} catch (IOException ioe) {
    		ioe.printStackTrace();
    		throw new OMException(ioe);
    	} catch (MessagingException me) {
    		me.printStackTrace();
    		throw new OMException(me);
    	}

    	stream = new IncomingAttachmentInputStream(_delimitedStream, this);
    	
    	Header header;
    	String name;
    	String value;
    	Enumeration e = headers.getAllHeaders();
    	while (e != null && e.hasMoreElements()) {
    		header = (Header) e.nextElement();
    		name = header.getName().toLowerCase();
    		value = header.getValue();
    		if (IncomingAttachmentInputStream.HEADER_CONTENT_ID.equals(name)
    				|| IncomingAttachmentInputStream.HEADER_CONTENT_TYPE.equals(name)
    				|| IncomingAttachmentInputStream.HEADER_CONTENT_LOCATION.equals(name)) {
    			value = value.trim();
    		}
    		stream.addHeader(name, value);
    	}

    	setReadyToGetNextStream(false);
    	return stream;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy