Package service.attachment

Source Code of service.attachment.MultipartsServiceImpl

/**
* Copyright (C) 2010 Talend Inc. - www.talend.com
*/
package service.attachment;

import java.io.IOException;
import java.util.LinkedList;
import java.util.List;

import javax.activation.DataHandler;

import common.attachment.Book;
import common.attachment.MultipartsService;

import org.apache.cxf.jaxrs.ext.multipart.Attachment;
import org.apache.cxf.jaxrs.ext.multipart.MultipartBody;

/**
* JAX-RS MultipartsService root resource
*/
public class MultipartsServiceImpl implements MultipartsService {

    /**
     * {@inheritDoc}
     */
    public MultipartBody echoAttachment(MultipartBody body) {
        return duplicateMultipartBody(body);
    }

    /**
     * Verifies the MultipartBody by reading the individual parts
     * and copying them to a new MultipartBody instance which
     * will be written out in the multipart/mixed format.
     *
     * @param body the incoming MultipartBody
     * @return new MultipartBody
     */
    private MultipartBody duplicateMultipartBody(MultipartBody body) {
       
        // It is possible to access individual parts by the Content-Id values
        // This MultipartBody is expected to contain 3 parts,
        // "book1", "book2" and "image".
       
        // These individual parts have their Content-Type set to
        // application/xml, application/json and application/octet-stream
       
        // MultipartBody will use the Content-Type value of the individual
        // part to read its data in a type safe way by delegating to a matching
        // JAX-RS MessageBodyReader provider
       
        Book jaxbBook = body.getAttachmentObject("book1", Book.class);
        Book jsonBook = body.getAttachmentObject("book2", Book.class);
       
        // Accessing individual attachment part, its DataHandler will be
        // used to access the underlying input stream, the type-safe access
        // is also possible
       
        Attachment imageAtt = body.getAttachment("image");
       
        if ("JAXB".equals(jaxbBook.getName()) && 1L == jaxbBook.getId()
            && "JSON".equals(jsonBook.getName()) && 2L == jsonBook.getId()
            && imageAtt != null) {
            return createMultipartBody(jaxbBook, jsonBook, imageAtt.getDataHandler());
        }
        throw new RuntimeException("Received Book attachment is corrupted");
    }
   
    private MultipartBody createMultipartBody(Book jaxbBook, Book jsonBook, DataHandler imageHandler) {
        List<Attachment> atts = new LinkedList<Attachment>();
       
        // One of the ways to create an individual part is to use
        // a Content-Id, Content-Type and the object triple.
        // Multipart Provider will delegate to a matching JAX-RS
        // MessageBodyWriter
       
        atts.add(new Attachment("book1", "application/xml", jaxbBook));
        atts.add(new Attachment("book2", "application/json", jsonBook));
        try {
            atts.add(new Attachment("image", "application/octet-stream", imageHandler.getInputStream()));
        } catch (IOException ex) {
            throw new RuntimeException(ex);
        }
        return new MultipartBody(atts, true)

    }
}
TOP

Related Classes of service.attachment.MultipartsServiceImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.