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