Diff

Modified: trunk/pom.xml (10 => 11)

--- trunk/pom.xml    2008-03-03 21:56:43 UTC (rev 10)
+++ trunk/pom.xml       2008-03-03 22:33:06 UTC (rev 11)
@@ -1,10 +1,10 @@
-<project>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <groupId>org.mule.transports</groupId>
     <artifactId>mule-transport-jersey</artifactId>
     <packaging>jar</packaging>
     <name>Mule Jersey Transport</name>
-    <version>1.0-alpha-1-SNAPSHOT</version>
+    <version>1.0-M1</version>
     <description>Jersey</description>
     <properties>
         <mule.version>2.0.0-RC2</mule.version>
@@ -112,8 +112,8 @@
     </distributionManagement>
 
     <scm>
-        <connection>scm:svn:https://svn.muleforge.org/mule-transport-jersey/trunk</connection>
-        <developerConnection>scm:svn:https://svn.muleforge.org/mule-transport-jersey/trunk</developerConnection>
-        <url>http://svn.mule-transport-jersey.muleforge.org/</url>
+        <connection>scm:svn:https://svn.muleforge.org/mule-transport-jersey/tags/mule-transport-jersey-1.0-M1</connection>
+        <developerConnection>scm:svn:https://svn.muleforge.org/mule-transport-jersey/tags/mule-transport-jersey-1.0-M1</developerConnection>
+        <url>http://svn.mule-transport-jersey.muleforge.org/tags/mule-transport-jersey-1.0-M1</url>
     </scm>
 </project>

Added: trunk/src/main/java/org/mule/transport/jersey/JerseyConnector.java (0 => 11)

--- trunk/src/main/java/org/mule/transport/jersey/JerseyConnector.java                               (rev 0)
+++ trunk/src/main/java/org/mule/transport/jersey/JerseyConnector.java  2008-03-03 22:33:06 UTC (rev 11)
@@ -0,0 +1,165 @@
+/*
+ * $Id$
+ * --------------------------------------------------------------------------------------
+ * Copyright (c) MuleSource, Inc.  All rights reserved.  http://www.mulesource.com
+ *
+ * The software in this package is published under the terms of the MuleSource MPL
+ * license, a copy of which has been included with this distribution in the
+ * LICENSE.txt file.
+ */
+
+package org.mule.transport.jersey;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.mule.api.MuleException;
+import org.mule.api.context.notification.ManagerNotificationListener;
+import org.mule.api.context.notification.ServerNotification;
+import org.mule.api.endpoint.EndpointBuilder;
+import org.mule.api.endpoint.EndpointURI;
+import org.mule.api.endpoint.ImmutableEndpoint;
+import org.mule.api.lifecycle.InitialisationException;
+import org.mule.api.service.Service;
+import org.mule.api.transport.MessageReceiver;
+import org.mule.context.notification.ManagerNotification;
+import org.mule.endpoint.EndpointURIEndpointBuilder;
+import org.mule.endpoint.InboundEndpoint;
+import org.mule.model.seda.SedaService;
+import org.mule.routing.inbound.DefaultInboundRouterCollection;
+import org.mule.transformer.TransformerUtils;
+import org.mule.transport.AbstractConnector;
+import org.mule.util.object.SingletonObjectFactory;
+
+/**
+ * 
+ */
+public class JerseyConnector extends AbstractConnector implements ManagerNotificationListener {
+    private List<SedaService> services = new ArrayList<SedaService>();
+
+    public JerseyConnector() {
+        super();
+        registerSupportedProtocol("http");
+        registerSupportedProtocol("https");
+        registerSupportedProtocol("jms");
+        registerSupportedProtocol("vm");
+        registerSupportedProtocol("servlet");
+    }
+
+    @SuppressWarnings("unchecked")
+    protected void registerReceiverWithMuleService(MessageReceiver receiver, EndpointURI ep)
+        throws MuleException {
+        JerseyMessageReceiver jReceiver = (JerseyMessageReceiver)receiver;
+        String name = "foo";
+
+        // TODO MULE-2228 Simplify this API
+        SedaService c = new SedaService();
+        c.setName("_jerseyConnector" + name + jReceiver.hashCode());
+        c.setModel(muleContext.getRegistry().lookupSystemModel());
+
+        SingletonObjectFactory of = new SingletonObjectFactory(jReceiver);
+        of.setService(c);
+        of.initialise();
+        c.setServiceFactory(of);
+
+        // No determine if the endpointUri requires a new connector to be
+        // registed in the case of http we only need to register the new
+        // endpointUri if the port is different
+        String endpoint = receiver.getEndpointURI().getAddress();
+
+        boolean sync = receiver.getEndpoint().isSynchronous();
+
+        EndpointBuilder serviceEndpointbuilder = new EndpointURIEndpointBuilder(endpoint, muleContext);
+        serviceEndpointbuilder.setSynchronous(sync);
+        serviceEndpointbuilder.setName(ep.getScheme() + ":" + name);
+        // Set the transformers on the endpoint too
+        serviceEndpointbuilder.setTransformers(receiver.getEndpoint().getTransformers());
+        serviceEndpointbuilder.setResponseTransformers(receiver.getEndpoint().getResponseTransformers());
+        // set the filter on the axis endpoint on the real receiver endpoint
+        serviceEndpointbuilder.setFilter(receiver.getEndpoint().getFilter());
+        // set the Security filter on the axis endpoint on the real receiver
+        // endpoint
+        serviceEndpointbuilder.setSecurityFilter(receiver.getEndpoint().getSecurityFilter());
+
+        // TODO Do we really need to modify the existing receiver endpoint? What
+        // happnes if we don't security,
+        // filters and transformers will get invoked twice?
+        EndpointBuilder receiverEndpointBuilder = new EndpointURIEndpointBuilder(receiver.getEndpoint(),
+                                                                                 muleContext);
+        receiverEndpointBuilder.setTransformers(TransformerUtils.UNDEFINED);
+        receiverEndpointBuilder.setResponseTransformers(TransformerUtils.UNDEFINED);
+        // Remove the Axis filter now
+        receiverEndpointBuilder.setFilter(null);
+        // Remove the Axis Receiver Security filter now
+        receiverEndpointBuilder.setSecurityFilter(null);
+
+        ImmutableEndpoint serviceEndpoint = muleContext.getRegistry().lookupEndpointFactory()
+            .getInboundEndpoint(serviceEndpointbuilder);
+
+        ImmutableEndpoint receiverEndpoint = muleContext.getRegistry().lookupEndpointFactory()
+            .getInboundEndpoint(receiverEndpointBuilder);
+
+        receiver.setEndpoint(receiverEndpoint);
+
+        c.setInboundRouter(new DefaultInboundRouterCollection());
+        c.getInboundRouter().addEndpoint(serviceEndpoint);
+
+        services.add(c);
+    }
+
+    public void onNotification(ServerNotification event) {
+        // We need to register the CXF service service once the model
+        // starts because
+        // when the model starts listeners on components are started, thus
+        // all listener
+        // need to be registered for this connector before the CXF service
+        // service is registered. The implication of this is that to add a
+        // new service and a
+        // different http port the model needs to be restarted before the
+        // listener is available
+        if (event.getAction() == ManagerNotification.MANAGER_STARTED) {
+            for (Service c : services) {
+                try {
+                    muleContext.getRegistry().registerService(c);
+                } catch (MuleException e) {
+                    handleException(e);
+                }
+            }
+        }
+    }
+
+    @Override
+    protected void doConnect() throws Exception {
+    }
+
+    @Override
+    protected void doDisconnect() throws Exception {
+    }
+
+    @Override
+    protected void doDispose() {
+    }
+
+    @Override
+    protected void doInitialise() throws InitialisationException {
+        // Registers the listener
+        try {
+            muleContext.registerListener(this);
+        } catch (Exception e) {
+            throw new InitialisationException(e, this);
+        }
+    }
+
+    @Override
+    protected void doStart() throws MuleException {
+    }
+
+    @Override
+    protected void doStop() throws MuleException {
+    }
+
+    public String getProtocol() {
+        return "jersey";
+    }
+
+}
Property changes on: trunk/src/main/java/org/mule/transport/jersey/JerseyConnector.java
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:keywords
   + Rev Date
Name: svn:eol-style
   + native

Added: trunk/src/main/java/org/mule/transport/jersey/JerseyMessageReceiver.java (0 => 11)

--- trunk/src/main/java/org/mule/transport/jersey/JerseyMessageReceiver.java                         (rev 0)
+++ trunk/src/main/java/org/mule/transport/jersey/JerseyMessageReceiver.java    2008-03-03 22:33:06 UTC (rev 11)
@@ -0,0 +1,96 @@
+/*
+ * $Id$
+ * --------------------------------------------------------------------------------------
+ * Copyright (c) MuleSource, Inc.  All rights reserved.  http://www.mulesource.com
+ *
+ * The software in this package is published under the terms of the MuleSource MPL
+ * license, a copy of which has been included with this distribution in the
+ * LICENSE.txt file.
+ */
+
+package org.mule.transport.jersey;
+
+import com.sun.ws.rest.api.core.DefaultResourceConfig;
+import com.sun.ws.rest.api.core.ResourceConfig;
+import com.sun.ws.rest.spi.container.WebApplication;
+import com.sun.ws.rest.spi.container.WebApplicationFactory;
+
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.mule.api.MuleEventContext;
+import org.mule.api.MuleMessage;
+import org.mule.api.endpoint.Endpoint;
+import org.mule.api.lifecycle.Callable;
+import org.mule.api.lifecycle.CreateException;
+import org.mule.api.service.Service;
+import org.mule.api.transport.Connector;
+import org.mule.transport.AbstractMessageReceiver;
+import org.mule.transport.ConnectException;
+import org.mule.transport.jersey.server.MuleRequestAdaptor;
+import org.mule.transport.jersey.server.MuleResponseAdapter;
+
+/**
+ * <code>JerseyMessageReceiver</code> TODO document
+ */
+public class JerseyMessageReceiver extends AbstractMessageReceiver implements Callable {
+
+    private WebApplication application;
+    
+    public JerseyMessageReceiver(Connector connector, 
+                                 Service service, 
+                                 Endpoint endpoint)
+        throws CreateException {
+        super(connector, service, endpoint);
+    }
+
+    public Object onCall(MuleEventContext event) throws Exception {
+        MuleMessage message = event.getMessage();
+        
+        MuleRequestAdaptor req = new MuleRequestAdaptor(message, endpoint.getEndpointURI());
+        
+        MuleResponseAdapter res = new MuleResponseAdapter(req);
+        
+        application.handleRequest(req, res);
+        
+        res.commitStatusAndHeaders();
+        
+        return res.getMessage();
+    }
+
+    public void doConnect() throws Exception {
+        final Set<Class> resources = new HashSet<Class>();
+        
+        try {
+            Class c = service.getServiceFactory().getObjectClass();
+            resources.add(c);
+        } catch (Exception e) {
+            throw new ConnectException(e, this);
+        }
+        
+        DefaultResourceConfig resourceConfig = new DefaultResourceConfig(resources);
+        
+        application = WebApplicationFactory.createWebApplication();
+        application.initiate(this, resourceConfig);
+        
+        ((JerseyConnector) connector).registerReceiverWithMuleService(this, getEndpointURI());
+    }
+
+    public void doDisconnect() throws ConnectException {
+        
+    }
+
+    public void doStart() {
+       
+    }
+
+    public void doStop() {
+        
+    }
+
+    public void doDispose() {
+
+    }
+
+}
Property changes on: trunk/src/main/java/org/mule/transport/jersey/JerseyMessageReceiver.java
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:keywords
   + Rev Date
Name: svn:eol-style
   + native

Added: trunk/src/main/java/org/mule/transport/jersey/JerseyResponseToByteArray.java (0 => 11)

--- trunk/src/main/java/org/mule/transport/jersey/JerseyResponseToByteArray.java                             (rev 0)
+++ trunk/src/main/java/org/mule/transport/jersey/JerseyResponseToByteArray.java        2008-03-03 22:33:06 UTC (rev 11)
@@ -0,0 +1,36 @@
+package org.mule.transport.jersey;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+
+import org.mule.api.MuleEvent;
+import org.mule.api.transformer.TransformerException;
+import org.mule.api.transport.OutputHandler;
+import org.mule.transformer.AbstractDiscoverableTransformer;
+import org.mule.transport.jersey.server.MuleResponseAdapter;
+
+public class JerseyResponseToByteArray extends AbstractDiscoverableTransformer {
+
+    public JerseyResponseToByteArray() {
+        super();
+        
+        registerSourceType(MuleResponseAdapter.class);
+        setReturnClass(byte[].class);
+    }
+
+    @Override
+    protected Object doTransform(Object o, String arg1) throws TransformerException {
+
+        final MuleResponseAdapter res = (MuleResponseAdapter) o;
+        
+        try {
+            res.commitAll();
+            
+            return ((ByteArrayOutputStream)res.getUnderlyingOutputStream()).toByteArray();
+        } catch (IOException e) {
+            throw new TransformerException(this, e);
+        }
+    }
+
+}
Property changes on: trunk/src/main/java/org/mule/transport/jersey/JerseyResponseToByteArray.java
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:keywords
   + Rev Date
Name: svn:eol-style
   + native

Added: trunk/src/main/java/org/mule/transport/jersey/JerseyResponseToOutputHandler.java (0 => 11)

--- trunk/src/main/java/org/mule/transport/jersey/JerseyResponseToOutputHandler.java                         (rev 0)
+++ trunk/src/main/java/org/mule/transport/jersey/JerseyResponseToOutputHandler.java    2008-03-03 22:33:06 UTC (rev 11)
@@ -0,0 +1,35 @@
+package org.mule.transport.jersey;
+
+import java.io.IOException;
+import java.io.OutputStream;
+
+import org.mule.api.MuleEvent;
+import org.mule.api.transformer.TransformerException;
+import org.mule.api.transport.OutputHandler;
+import org.mule.transformer.AbstractDiscoverableTransformer;
+import org.mule.transport.jersey.server.MuleResponseAdapter;
+
+public class JerseyResponseToOutputHandler extends AbstractDiscoverableTransformer {
+
+    public JerseyResponseToOutputHandler() {
+        super();
+        
+        registerSourceType(MuleResponseAdapter.class);
+        setReturnClass(OutputHandler.class);
+    }
+
+    @Override
+    protected Object doTransform(Object o, String arg1) throws TransformerException {
+        final MuleResponseAdapter res = (MuleResponseAdapter) o;
+        
+        return new OutputHandler() {
+
+            public void write(MuleEvent event, OutputStream out) throws IOException {
+                res.setUnderlyingOutputStream(out);
+                
+                res.commitAll();
+            }
+        };
+    }
+
+}
Property changes on: trunk/src/main/java/org/mule/transport/jersey/JerseyResponseToOutputHandler.java
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:keywords
   + Rev Date
Name: svn:eol-style
   + native

Added: trunk/src/main/java/org/mule/transport/jersey/JerseyResponseToString.java (0 => 11)

--- trunk/src/main/java/org/mule/transport/jersey/JerseyResponseToString.java                                (rev 0)
+++ trunk/src/main/java/org/mule/transport/jersey/JerseyResponseToString.java   2008-03-03 22:33:06 UTC (rev 11)
@@ -0,0 +1,31 @@
+package org.mule.transport.jersey;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+
+import org.mule.api.transformer.TransformerException;
+import org.mule.transformer.AbstractDiscoverableTransformer;
+import org.mule.transport.jersey.server.MuleResponseAdapter;
+
+public class JerseyResponseToString extends AbstractDiscoverableTransformer {
+
+    public JerseyResponseToString() {
+        super();;
+        registerSourceType(MuleResponseAdapter.class);
+        setReturnClass(String.class);
+    }
+
+    @Override
+    protected Object doTransform(Object o, String enc) throws TransformerException {
+        final MuleResponseAdapter res = (MuleResponseAdapter) o;
+        
+        try {
+            res.commitAll();
+            
+            return new String(((ByteArrayOutputStream)res.getUnderlyingOutputStream()).toByteArray(), enc);
+        } catch (IOException e) {
+            throw new TransformerException(this, e);
+        }
+    }
+
+}
Property changes on: trunk/src/main/java/org/mule/transport/jersey/JerseyResponseToString.java
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:keywords
   + Rev Date
Name: svn:eol-style
   + native

Added: trunk/src/main/java/org/mule/transport/jersey/config/JerseyNamespaceHandler.java (0 => 11)

--- trunk/src/main/java/org/mule/transport/jersey/config/JerseyNamespaceHandler.java                         (rev 0)
+++ trunk/src/main/java/org/mule/transport/jersey/config/JerseyNamespaceHandler.java    2008-03-03 22:33:06 UTC (rev 11)
@@ -0,0 +1,24 @@
+/*
+ * $Id: XFireNamespaceHandler.java 7167 2007-06-19 19:57:12Z acooke $
+ * --------------------------------------------------------------------------------------
+ * Copyright (c) MuleSource, Inc.  All rights reserved.  http://www.mulesource.com
+ *
+ * The software in this package is published under the terms of the MuleSource MPL
+ * license, a copy of which has been included with this distribution in the
+ * LICENSE.txt file.
+ */
+
+package org.mule.transport.jersey.config;
+
+import org.mule.config.spring.handlers.AbstractMuleNamespaceHandler;
+import org.mule.config.spring.parsers.generic.OrphanDefinitionParser;
+import org.mule.transport.jersey.JerseyConnector;
+
+public class JerseyNamespaceHandler extends AbstractMuleNamespaceHandler
+{
+    public void init()
+    {
+        registerConnectorDefinitionParser(JerseyConnector.class);
+        registerMetaTransportEndpoints("jersey");
+    }
+}
\ No newline at end of file
Property changes on: trunk/src/main/java/org/mule/transport/jersey/config/JerseyNamespaceHandler.java
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:keywords
   + Rev Date
Name: svn:eol-style
   + native

Added: trunk/src/main/java/org/mule/transport/jersey/server/MuleRequestAdaptor.java (0 => 11)

--- trunk/src/main/java/org/mule/transport/jersey/server/MuleRequestAdaptor.java                             (rev 0)
+++ trunk/src/main/java/org/mule/transport/jersey/server/MuleRequestAdaptor.java        2008-03-03 22:33:06 UTC (rev 11)
@@ -0,0 +1,95 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved. 
+ * 
+ * The contents of this file are subject to the terms of the Common Development
+ * and Distribution License("CDDL") (the "License").  You may not use this file
+ * except in compliance with the License. 
+ * 
+ * You can obtain a copy of the License at:
+ *     https://jersey.dev.java.net/license.txt
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * When distributing the Covered Code, include this CDDL Header Notice in each
+ * file and include the License file at:
+ *     https://jersey.dev.java.net/license.txt
+ * If applicable, add the following below this CDDL Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ *     "Portions Copyrighted [year] [name of copyright owner]"
+ */
+
+package org.mule.transport.jersey.server;
+
+import com.sun.ws.rest.impl.container.servlet.HttpRequestAdaptor;
+import com.sun.ws.rest.spi.container.AbstractContainerRequest;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.Collections;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.ws.rs.core.EntityTag;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Variant;
+
+import org.mule.api.MuleMessage;
+import org.mule.api.endpoint.EndpointURI;
+import org.mule.api.transformer.TransformerException;
+import org.mule.transport.http.HttpConnector;
+
+/**
+ * Adapts a HttpServletRequest to provide the methods of HttpRequest
+ */
+public class MuleRequestAdaptor extends AbstractContainerRequest {
+    
+    private MuleMessage message;
+    
+    /** Creates a new instance of HttpRequestAdaptor 
+     * @throws TransformerException */
+    public MuleRequestAdaptor(MuleMessage message, 
+                              EndpointURI endpointUri) throws IOException, TransformerException {
+        super((String)message.getProperty(HttpConnector.HTTP_METHOD_PROPERTY), 
+              getInputStream(message));
+        this.message = message;
+        
+        String path = (String) message.getProperty(HttpConnector.HTTP_REQUEST_PROPERTY);
+        String query = null;
+        int queryIdx = path.indexOf('?');
+        if (queryIdx != -1) {
+            query = path.substring(queryIdx+1);
+            path = path.substring(0, queryIdx);
+        }
+        
+        try {
+            this.baseUri = new URI(endpointUri.getScheme(), null, endpointUri.getHost(), endpointUri.getPort(), endpointUri.getPath(), null, null);
+            this.completeUri = new URI(endpointUri.getScheme(), null, endpointUri.getHost(), endpointUri.getPort(), path, query, null);
+        } catch (URISyntaxException e) {
+            throw new RuntimeException("Could not create URI for " + endpointUri.toString());
+        }
+        
+        copyHttpHeaders();
+    }
+    
+    private static InputStream getInputStream(MuleMessage message) throws TransformerException {
+        return (InputStream) message.getPayload(InputStream.class);
+    }
+
+    @SuppressWarnings("unchecked")
+    protected void copyHttpHeaders() {
+        MultivaluedMap<String, String> headers = getRequestHeaders();
+        for (Iterator names = message.getPropertyNames().iterator(); names.hasNext();) {
+            String name = (String) names.next();
+            List<String> valueList = Collections.singletonList((String)message.getProperty(name));
+            
+            headers.put(name, valueList);
+        }
+    }
+
+}
Property changes on: trunk/src/main/java/org/mule/transport/jersey/server/MuleRequestAdaptor.java
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:keywords
   + Rev Date
Name: svn:eol-style
   + native

Added: trunk/src/main/java/org/mule/transport/jersey/server/MuleResponseAdapter.java (0 => 11)

--- trunk/src/main/java/org/mule/transport/jersey/server/MuleResponseAdapter.java                            (rev 0)
+++ trunk/src/main/java/org/mule/transport/jersey/server/MuleResponseAdapter.java       2008-03-03 22:33:06 UTC (rev 11)
@@ -0,0 +1,87 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ * 
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved. 
+ * 
+ * The contents of this file are subject to the terms of the Common Development
+ * and Distribution License("CDDL") (the "License").  You may not use this file
+ * except in compliance with the License. 
+ * 
+ * You can obtain a copy of the License at:
+ *     https://jersey.dev.java.net/license.txt
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * When distributing the Covered Code, include this CDDL Header Notice in each
+ * file and include the License file at:
+ *     https://jersey.dev.java.net/license.txt
+ * If applicable, add the following below this CDDL Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ *     "Portions Copyrighted [year] [name of copyright owner]"
+ */
+
+package org.mule.transport.jersey.server;
+
+import com.sun.ws.rest.spi.container.AbstractContainerResponse;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.mule.DefaultMuleMessage;
+import org.mule.api.MuleMessage;
+import org.mule.transport.DefaultMessageAdapter;
+import org.mule.transport.http.HttpConnector;
+
+/**
+ * Adapts a HttpServletResponse to provide the methods of HttpResponse
+ *
+ */
+public final class MuleResponseAdapter extends AbstractContainerResponse {
+
+    private OutputStream out;
+    private MuleMessage message;
+    
+    public MuleResponseAdapter(MuleRequestAdaptor requestContext) {
+        super(requestContext);
+        
+        this.message = new DefaultMuleMessage(new DefaultMessageAdapter(this));
+    }
+
+    @Override
+    public void commitStatusAndHeaders() throws IOException {
+        for (Map.Entry<String, List<Object>> e : this.getHttpHeaders().entrySet()) {
+            List<String> values = new ArrayList<String>();
+            for (Object v : e.getValue())
+                values.add(getHeaderValue(v));
+            message.setProperty(e.getKey(), values);
+        }
+        
+        message.setProperty(HttpConnector.HTTP_STATUS_PROPERTY, this.getStatus());
+    }
+
+    @Override
+    public OutputStream getUnderlyingOutputStream() throws IOException {
+        if (out != null)
+            return out;
+        
+        return out = new ByteArrayOutputStream();
+    }
+
+    public void setUnderlyingOutputStream(OutputStream out) {
+        this.out = out;
+    }
+    
+    public void commitAll() throws IOException {
+        if (isCommitted()) return;
+        
+        writeEntity(getUnderlyingOutputStream());
+    }    
+    
+    public MuleMessage getMessage() {
+        return message;
+    }
+}
\ No newline at end of file
Property changes on: trunk/src/main/java/org/mule/transport/jersey/server/MuleResponseAdapter.java
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:keywords
   + Rev Date
Name: svn:eol-style
   + native

--------------------------------------------------------------------- To unsubscribe from this list, please visit: http://admin.muleforge.org/manage_email

Message Thread

[mule-transport-jersey-dev] [11] trunk: Add missing files. dandiep@muleforge...
10:33 PM UTC, Monday 3 March 2008