Package org.mule.module.jersey

Source Code of org.mule.module.jersey.MuleResponseWriter

/*
* $Id: MuleResponseWriter.java 19270 2010-09-01 10:37:41Z dirk.olmes $
* --------------------------------------------------------------------------------------
* Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
*
* The software in this package is published under the terms of the CPAL v1.0
* license, a copy of which has been included with this distribution in the
* LICENSE.txt file.
*/

package org.mule.module.jersey;

import org.mule.api.MuleEvent;
import org.mule.api.MuleMessage;
import org.mule.api.transport.OutputHandler;
import org.mule.module.jersey.JerseyResourcesComponent;
import org.mule.transport.http.HttpConnector;

import com.sun.jersey.spi.container.ContainerResponse;
import com.sun.jersey.spi.container.ContainerResponseWriter;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MuleResponseWriter implements ContainerResponseWriter
{

    private ByteArrayOutputStream out;
    private OutputHandler output;
    private final MuleMessage message;

    public MuleResponseWriter(MuleMessage request)
    {
        super();
        this.message = request;
        this.out = new ByteArrayOutputStream();
        this.output = new OutputHandler()
        {

            public void write(MuleEvent arg0, OutputStream realOut) throws IOException
            {
                realOut.write(out.toByteArray());
                realOut.flush();
            }

        };
    }

    public OutputStream writeStatusAndHeaders(long x, ContainerResponse response) throws IOException
    {
        Map<String, String> customHeaders = new HashMap<String, String>();
        for (Map.Entry<String, List<Object>> e : response.getHttpHeaders().entrySet())
        {
              // TODO: is this correct?
              message.setOutboundProperty(e.getKey(), getHeaderValue(e.getValue()));
        }

        message.setInvocationProperty(JerseyResourcesComponent.JERSEY_RESPONSE, response);
        message.setOutboundProperty(HttpConnector.HTTP_STATUS_PROPERTY, response.getStatus());

        return out;
    }

    private String getHeaderValue(List<Object> values)
    {
        StringBuilder sb = new StringBuilder();
        boolean first = true;
        for (Object o : values)
        {
            if (!first)
            {
                sb.append(", ");
            }
            else
            {
                first = false;
            }

            sb.append(ContainerResponse.getHeaderValue(o));
        }
        return sb.toString();
    }

    public void finish() throws IOException
    {
    }

    public OutputHandler getResponse()
    {
        return output;
    }
}
TOP

Related Classes of org.mule.module.jersey.MuleResponseWriter

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.