Revision
4
Author
dandiep
Date
2007-09-13 06:18:27 -0500 (Thu, 13 Sep 2007)

Log Message

Initial import.

Added Paths

Diff

Added: mule-transport-jersey/pom.xml (0 => 4)

--- mule-transport-jersey/pom.xml                            (rev 0)
+++ mule-transport-jersey/pom.xml       2007-09-13 11:18:27 UTC (rev 4)
@@ -0,0 +1,98 @@
+<project>
+ <modelVersion>4.0.0</modelVersion>
+   <groupId>org.mule</groupId>
+   <artifactId>mule-transport-jersey</artifactId>
+   <packaging>jar</packaging>
+    <name>Mule Jersey Transport</name>
+   <version>0.1-SNASPHOT</version>
+  <description>Jersey</description>
+
+  <!-- Common Dependencies -->
+    <dependencies>
+        <dependency>
+            <groupId>org.mule</groupId>
+            <artifactId>mule-core</artifactId>
+            <version>2.0-M2-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.mule.transports</groupId>
+            <artifactId>mule-transport-http</artifactId>
+            <version>2.0-M2-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.mule.modules</groupId>
+            <artifactId>mule-module-client</artifactId>
+            <version>2.0-M2-SNAPSHOT</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.mule.tests</groupId>
+            <artifactId>mule-tests-functional</artifactId>
+            <version>2.0-M2-SNAPSHOT</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>javax.activation</groupId>
+            <artifactId>activation</artifactId>
+            <version>1.1</version>
+        </dependency>
+        <dependency>
+            <groupId>javax.mail</groupId>
+            <artifactId>mail</artifactId>
+            <version>1.4</version>
+        </dependency>
+        <dependency>
+            <groupId>com.sun.xml.bind</groupId>
+            <artifactId>jaxb-impl</artifactId>
+            <version>2.1.4</version>
+        </dependency>
+        <dependency>
+            <groupId>jdom</groupId>
+            <artifactId>jdom</artifactId>
+            <version>1.0</version>
+        </dependency>
+        <dependency>
+            <groupId>rome</groupId>
+            <artifactId>rome</artifactId>
+            <version>0.9</version>
+        </dependency>
+        <dependency>
+            <groupId>org.codehaus.jettison</groupId>
+            <artifactId>jettison</artifactId>
+            <version>1.0-RC2</version>
+        </dependency>
+        <dependency>
+            <groupId>javax.persistence</groupId>
+            <artifactId>persistence-api</artifactId>
+            <version>1.0</version>
+        </dependency>
+        <dependency>
+          <groupId>javax.ws.rs</groupId>
+          <artifactId>jsr311-api</artifactId>
+          <version>2.0</version>
+          <scope>system</scope>
+          <systemPath>${basedir}/repository/jsr311-api.jar</systemPath>
+        </dependency>
+        <dependency>
+          <groupId>com.sun.ws.rs</groupId>
+          <artifactId>jersey</artifactId>
+          <version>0.2-SNAPSHOT</version>
+          <scope>system</scope>
+          <systemPath>${basedir}/repository/jersey-0.2-SNAPSHOT.jar</systemPath>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>3.8.1</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+    <repositories>
+    <repository>
+      <id>java.net</id>
+      <name>java.net Repository</name>
+      <url>http://download.java.net/maven/1/</url>
+      <layout>legacy</layout>
+    </repository>
+  </repositories>
+</project>

Added: mule-transport-jersey/repository/jersey-0.2-SNAPSHOT.jar

(Binary files differ)

Property changes on: mule-transport-jersey/repository/jersey-0.2-SNAPSHOT.jar ___________________________________________________________________ Name: svn:mime-type + application/octet-stream

Added: mule-transport-jersey/repository/jsr311-api.jar

(Binary files differ)

Property changes on: mule-transport-jersey/repository/jsr311-api.jar ___________________________________________________________________ Name: svn:mime-type + application/octet-stream

Added: mule-transport-jersey/repository/jsr311-api.src.zip

(Binary files differ)

Property changes on: mule-transport-jersey/repository/jsr311-api.src.zip ___________________________________________________________________ Name: svn:mime-type + application/octet-stream

Added: mule-transport-jersey/src/main/java/org/mule/providers/jersey/JerseyConnector.java (0 => 4)

--- mule-transport-jersey/src/main/java/org/mule/providers/jersey/JerseyConnector.java                               (rev 0)
+++ mule-transport-jersey/src/main/java/org/mule/providers/jersey/JerseyConnector.java  2007-09-13 11:18:27 UTC (rev 4)
@@ -0,0 +1,134 @@
+/*
+ * $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.providers.jersey;
+
+import org.mule.config.MuleProperties;
+import org.mule.impl.MuleDescriptor;
+import org.mule.impl.endpoint.MuleEndpoint;
+import org.mule.providers.AbstractConnector;
+import org.mule.umo.UMOException;
+import org.mule.umo.endpoint.UMOEndpoint;
+import org.mule.umo.endpoint.UMOEndpointURI;
+import org.mule.umo.lifecycle.InitialisationException;
+import org.mule.umo.provider.UMOMessageReceiver;
+import org.mule.util.object.SingletonObjectFactory;
+
+/**
+ * 
+ */
+public class JerseyConnector extends AbstractConnector
+{
+    public JerseyConnector() {
+        super();
+        registerSupportedProtocol("http");
+        registerSupportedProtocol("https");
+        registerSupportedProtocol("jms");
+        registerSupportedProtocol("vm");
+        registerSupportedProtocol("servlet");
+    }
+
+
+    @SuppressWarnings("unchecked")
+    protected void registerReceiverWithMuleService(UMOMessageReceiver receiver, UMOEndpointURI ep)
+        throws UMOException
+    {
+        JerseyMessageReceiver jReceiver = (JerseyMessageReceiver) receiver;
+        
+        String name = "foo";
+        MuleDescriptor descriptor = new MuleDescriptor("_jerseyConnector." + name);
+        descriptor.setServiceFactory(new SingletonObjectFactory(jReceiver));
+        
+        // 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();
+        String scheme = ep.getScheme().toLowerCase();
+
+
+        boolean sync = receiver.getEndpoint().isSynchronous();
+
+        // If we are using sockets then we need to set the endpoint name appropiately
+        // and if using http/https
+        // we need to default to POST and set the Content-Type
+        if (scheme.equals("http") || scheme.equals("https") || scheme.equals("ssl")
+            || scheme.equals("tcp") || scheme.equals("servlet"))
+        {
+//            receiver.getEndpoint().getProperties().put(HttpConnector.HTTP_METHOD_PROPERTY, "POST");
+//            receiver.getEndpoint().getProperties().put(HttpConstants.HEADER_CONTENT_TYPE,
+//                "text/xml");
+
+            // Default to using synchronous for socket based protocols unless the
+            // synchronous property has been set explicitly
+            if (!receiver.getEndpoint().isSynchronousSet())
+            {
+                sync = true;
+            }
+        }
+       
+        UMOEndpoint serviceEndpoint = new MuleEndpoint(endpoint, true);
+        serviceEndpoint.setSynchronous(sync);
+        serviceEndpoint.setName(ep.getScheme() + ":" + name);
+
+        // Set the transformers on the endpoint too
+        serviceEndpoint.setTransformer(receiver.getEndpoint().getTransformer());
+        receiver.getEndpoint().setTransformer(null);
+
+        serviceEndpoint.setResponseTransformer(receiver.getEndpoint().getResponseTransformer());
+        receiver.getEndpoint().setResponseTransformer(null);
+
+        // set the filter on the axis endpoint on the real receiver endpoint
+        serviceEndpoint.setFilter(receiver.getEndpoint().getFilter());
+        // Remove the Axis filter now
+        receiver.getEndpoint().setFilter(null);
+
+        // set the Security filter on the axis endpoint on the real receiver
+        // endpoint
+        serviceEndpoint.setSecurityFilter(receiver.getEndpoint().getSecurityFilter());
+        
+        // Remove the Axis Receiver Security filter now
+        receiver.getEndpoint().setSecurityFilter(null);
+        descriptor.getInboundRouter().addEndpoint(serviceEndpoint);
+        
+        //cxfDescriptor.addInterceptor(new MethodFixInterceptor());
+        
+        descriptor.setModelName(MuleProperties.OBJECT_SYSTEM_MODEL);
+        managementContext.getRegistry().registerService(descriptor, managementContext);
+    }
+    
+    @Override
+    protected void doConnect() throws Exception {
+    }
+
+    @Override
+    protected void doDisconnect() throws Exception {
+    }
+
+    @Override
+    protected void doDispose() {
+    }
+
+    @Override
+    protected void doInitialise() throws InitialisationException {
+    }
+
+    @Override
+    protected void doStart() throws UMOException {
+    }
+
+    @Override
+    protected void doStop() throws UMOException {
+    }
+
+    public String getProtocol() {
+        return "jersey";
+    }
+
+}

Added: mule-transport-jersey/src/main/java/org/mule/providers/jersey/JerseyMessageAdapter.java (0 => 4)

--- mule-transport-jersey/src/main/java/org/mule/providers/jersey/JerseyMessageAdapter.java                          (rev 0)
+++ mule-transport-jersey/src/main/java/org/mule/providers/jersey/JerseyMessageAdapter.java     2007-09-13 11:18:27 UTC (rev 4)
@@ -0,0 +1,65 @@
+/*
+ * $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.providers.jersey;
+
+import java.io.ByteArrayOutputStream;
+
+import org.mule.impl.ThreadSafeAccess;
+import org.mule.providers.AbstractMessageAdapter;
+import org.mule.providers.jersey.server.MuleResponseAdapter;
+import org.mule.umo.MessagingException;
+import org.mule.umo.provider.MessageTypeNotSupportedException;
+
+/**
+ * <code>AbderaMessageAdapter</code> TODO document
+ */
+public class JerseyMessageAdapter extends AbstractMessageAdapter
+{
+ 
+    /* For general guidelines on writing transports see
+       http://mule.mulesource.org/display/MULE/Writing+Transports */
+
+    /* IMPLEMENTATION NOTE: The MessageAdapter is used to wrap an underlying
+       message. It should store a copy of the underlying message as an
+       instance variable. */
+    
+    private MuleResponseAdapter res;
+
+    public JerseyMessageAdapter(MuleResponseAdapter message) 
+    {
+        this.res = message;
+    }
+
+    public String getPayloadAsString(String encoding) throws Exception
+    {
+        return new String(getPayloadAsBytes(), encoding);
+    }
+
+    public byte[] getPayloadAsBytes() throws Exception
+    {
+        return ((ByteArrayOutputStream)res.getOutputStream()).toByteArray();
+    }
+
+    public Object getPayload()
+    {
+        try {
+            return getPayloadAsString();
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Override
+    public ThreadSafeAccess newThreadCopy() {
+        return new JerseyMessageAdapter(res);
+    }
+
+}

Added: mule-transport-jersey/src/main/java/org/mule/providers/jersey/JerseyMessageReceiver.java (0 => 4)

--- mule-transport-jersey/src/main/java/org/mule/providers/jersey/JerseyMessageReceiver.java                         (rev 0)
+++ mule-transport-jersey/src/main/java/org/mule/providers/jersey/JerseyMessageReceiver.java    2007-09-13 11:18:27 UTC (rev 4)
@@ -0,0 +1,107 @@
+/*
+ * $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.providers.jersey;
+
+import java.util.HashSet;
+import java.util.Set;
+
+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 org.mule.providers.ConnectException;
+import org.mule.providers.AbstractMessageReceiver;
+import org.mule.providers.jersey.server.MuleRequestAdaptor;
+import org.mule.providers.jersey.server.MuleResponseAdapter;
+import org.mule.umo.UMOComponent;
+import org.mule.umo.UMOEventContext;
+import org.mule.umo.UMOMessage;
+import org.mule.umo.endpoint.UMOEndpoint;
+import org.mule.umo.lifecycle.Callable;
+import org.mule.umo.lifecycle.CreateException;
+import org.mule.umo.lifecycle.InitialisationException;
+import org.mule.umo.provider.UMOConnector;
+
+/**
+ * <code>JerseyMessageReceiver</code> TODO document
+ */
+public class JerseyMessageReceiver extends AbstractMessageReceiver implements Callable {
+
+    private WebApplication application;
+    
+    public JerseyMessageReceiver(UMOConnector connector, UMOComponent component, 
+                                 UMOEndpoint endpoint)
+        throws CreateException {
+        super(connector, component, endpoint);
+    }
+
+    public Object onCall(UMOEventContext event) throws Exception {
+        UMOMessage message = event.getMessage();
+        
+        MuleRequestAdaptor req = new MuleRequestAdaptor(message, endpoint.getEndpointURI());
+        
+        MuleResponseAdapter res = new MuleResponseAdapter(req);
+        
+        application.handleRequest(req, res);
+
+        res.commit();
+        
+        return res.getMessage();
+    }
+
+    public void doConnect() throws Exception {
+        final Set<Class> resources = new HashSet<Class>();
+        
+        try {
+            Class c = component.getDescriptor().getServiceFactory().create().getClass();
+            resources.add(c);
+        } catch (Exception e) {
+            throw new ConnectException(e, this);
+        }
+        
+        ResourceConfig resourceConfig = new ResourceConfig() {
+
+            public Set<Class> getResourceClasses() {
+                return resources;
+            }
+
+            public boolean isIgnoreMatrixParams() {
+                return false;
+            }
+
+            public boolean isRedirectToNormalizedURI() {
+                return false;
+            }
+            
+        };
+        
+        application = WebApplicationFactory.createWebApplication();
+        application.initiate(this, resourceConfig, null);
+        
+        ((JerseyConnector) connector).registerReceiverWithMuleService(this, getEndpointURI());
+    }
+
+    public void doDisconnect() throws ConnectException {
+        
+    }
+
+    public void doStart() {
+       
+    }
+
+    public void doStop() {
+        
+    }
+
+    public void doDispose() {
+
+    }
+
+}

Added: mule-transport-jersey/src/main/java/org/mule/providers/jersey/config/JerseyNamespaceHandler.java (0 => 4)

--- mule-transport-jersey/src/main/java/org/mule/providers/jersey/config/JerseyNamespaceHandler.java                         (rev 0)
+++ mule-transport-jersey/src/main/java/org/mule/providers/jersey/config/JerseyNamespaceHandler.java    2007-09-13 11:18:27 UTC (rev 4)
@@ -0,0 +1,23 @@
+/*
+ * $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.providers.jersey.config;
+
+import org.mule.config.spring.parsers.generic.OrphanDefinitionParser;
+import org.mule.providers.jersey.JerseyConnector;
+import org.springframework.beans.factory.xml.NamespaceHandlerSupport;
+
+public class JerseyNamespaceHandler extends NamespaceHandlerSupport
+{
+    public void init()
+    {
+        registerBeanDefinitionParser("connector", new OrphanDefinitionParser(JerseyConnector.class, true));
+    }
+}
\ No newline at end of file

Added: mule-transport-jersey/src/main/java/org/mule/providers/jersey/server/MuleRequestAdaptor.java (0 => 4)

--- mule-transport-jersey/src/main/java/org/mule/providers/jersey/server/MuleRequestAdaptor.java                             (rev 0)
+++ mule-transport-jersey/src/main/java/org/mule/providers/jersey/server/MuleRequestAdaptor.java        2007-09-13 11:18:27 UTC (rev 4)
@@ -0,0 +1,116 @@
+/*
+ * 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.providers.jersey.server;
+
+import com.sun.ws.rest.impl.HttpRequestContextImpl;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+
+import javax.ws.rs.core.MultivaluedMap;
+
+import org.mule.config.MuleProperties;
+import org.mule.providers.http.HttpConnector;
+import org.mule.providers.http.HttpConstants;
+import org.mule.umo.UMOMessage;
+import org.mule.umo.endpoint.UMOEndpointURI;
+
+/**
+ * Adapts a HttpServletRequest to provide the methods of HttpRequest
+ */
+public class MuleRequestAdaptor extends HttpRequestContextImpl {
+    
+    private UMOMessage message;
+    
+    /** Creates a new instance of HttpRequestAdaptor */
+    public MuleRequestAdaptor(UMOMessage message, UMOEndpointURI endpointUri) throws IOException {
+        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);
+            path = path.substring(0, queryIdx);
+        }
+        
+        try {
+            this.uri = new URI(endpointUri.getScheme(), null, endpointUri.getHost(), endpointUri.getPort(), path, query, null);
+        } catch (URISyntaxException e) {
+           
+            e.printStackTrace();
+        }
+       
+        this.queryString = uri.getQuery();
+        this.uriPath = uri.getPath();
+        if (this.uriPath.startsWith("/")) {
+            this.uriPath = uriPath.substring(1);
+        }
+        this.baseURI = getBaseURI(this.uri, this.uriPath);
+        
+        this.queryParameters = extractQueryParameters(this.queryString, true);
+        
+        copyHttpHeaders();
+    }
+    
+    private static InputStream getInputStream(UMOMessage message) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @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);
+        }
+        
+//        List<Cookie> cookies = getCookies();
+//        javax.servlet.http.Cookie servletCookies[] = request.getCookies();
+//        if (servletCookies != null) {
+//            for (javax.servlet.http.Cookie c: servletCookies) {
+//                NewCookie n = new NewCookie(c.getName(), c.getValue());
+//                n.setComment(c.getComment());
+//                n.setDomain(c.getDomain());
+//                n.setPath(c.getPath());
+//                n.setSecure(c.getSecure());
+//                n.setVersion(c.getVersion());
+//                n.setMaxAge(c.getMaxAge());
+//                cookies.add(n);
+//            }
+//        }
+    }
+
+}

Added: mule-transport-jersey/src/main/java/org/mule/providers/jersey/server/MuleResponseAdapter.java (0 => 4)

--- mule-transport-jersey/src/main/java/org/mule/providers/jersey/server/MuleResponseAdapter.java                            (rev 0)
+++ mule-transport-jersey/src/main/java/org/mule/providers/jersey/server/MuleResponseAdapter.java       2007-09-13 11:18:27 UTC (rev 4)
@@ -0,0 +1,90 @@
+/*
+ * 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.providers.jersey.server;
+
+import com.sun.ws.rest.impl.HttpResponseContextImpl;
+
+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 javax.ws.rs.ext.EntityProvider;
+import javax.ws.rs.ext.ProviderFactory;
+
+import org.mule.impl.MuleMessage;
+import org.mule.providers.http.HttpConnector;
+import org.mule.providers.jersey.JerseyMessageAdapter;
+import org.mule.umo.UMOMessage;
+
+/**
+ * Adapts a HttpServletResponse to provide the methods of HttpResponse
+ *
+ */
+public final class MuleResponseAdapter extends HttpResponseContextImpl {
+
+    private OutputStream out;
+    private MuleMessage message;
+    
+    public MuleResponseAdapter(MuleRequestAdaptor requestContext) {
+        super(requestContext);
+        
+        this.message = new MuleMessage(new JerseyMessageAdapter(this));
+    }
+
+    @SuppressWarnings("unchecked")
+    public void commit() 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());
+        
+        Object entity = this.getEntity();
+        if (entity != null) {
+            final EntityProvider p = ProviderFactory.getInstance().createEntityProvider(entity.getClass());
+            p.writeTo(entity, this.getHttpHeaders(), this.getOutputStream());
+            if (out != null) {
+                out.flush();
+                out.close();
+            }
+        }
+                
+    }
+
+    public OutputStream getOutputStream() throws IOException {
+        if (out != null)
+            return out;
+        
+        return out = new ByteArrayOutputStream();
+    }
+
+    public UMOMessage getMessage() {
+        return message;
+    }
+}
\ No newline at end of file

Added: mule-transport-jersey/src/main/resources/META-INF/mule-jersey.xsd (0 => 4)

--- mule-transport-jersey/src/main/resources/META-INF/mule-jersey.xsd                                (rev 0)
+++ mule-transport-jersey/src/main/resources/META-INF/mule-jersey.xsd   2007-09-13 11:18:27 UTC (rev 4)
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<xsd:schema xmlns="http://www.mulesource.org/schema/mule/jersey/2.0"
+            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+            xmlns:mule="http://www.mulesource.org/schema/mule/core/2.0"
+            targetNamespace="http://www.mulesource.org/schema/mule/jersey/2.0"
+            elementFormDefault="qualified"
+            attributeFormDefault="unqualified">
+
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
+    <xsd:import namespace="http://www.springframework.org/schema/beans"
+                schemaLocation="http://www.springframework.org/schema/beans"/>
+    <xsd:import namespace="http://www.mulesource.org/schema/mule/core/2.0" 
+                schemaLocation="http://www.mulesource.org/schema/mule/core/2.0/mule.xsd" />
+
+    <xsd:element name="connector" type="jerseyConnectorType"/>
+    
+    <xsd:complexType name="jerseyConnectorType">
+        <xsd:sequence/>
+    </xsd:complexType>
+
+</xsd:schema>

Added: mule-transport-jersey/src/main/resources/META-INF/services/org/mule/i18n/jersey-messages.properties (0 => 4)

--- mule-transport-jersey/src/main/resources/META-INF/services/org/mule/i18n/jersey-messages.properties                              (rev 0)
+++ mule-transport-jersey/src/main/resources/META-INF/services/org/mule/i18n/jersey-messages.properties 2007-09-13 11:18:27 UTC (rev 4)
@@ -0,0 +1,16 @@
+#Add any string messages here that are specific to your transport
+#Messages put here can be translated into other languages
+#Each message should be given a unique numerical id i.e.
+#
+#1=This is a test message with a single argument {0}
+#
+#Arguments can be placed in the message using {0}, {1}, etc placeholders
+#
+#To get a message listed here use the following -
+# new Message("Abdera", "<message id>" [, <arg 1>, <arg 2>]);
+#
+# "Abdera" is the protocol of this transport
+# <message id> is the id of the message in this file
+# <arg x> is a list of String arguments to pass to the message
+#
+# For more info see http://mule.mulesource.org/wiki/x/zQU
\ No newline at end of file

Added: mule-transport-jersey/src/main/resources/META-INF/services/org/mule/providers/jersey.properties (0 => 4)

--- mule-transport-jersey/src/main/resources/META-INF/services/org/mule/providers/jersey.properties                          (rev 0)
+++ mule-transport-jersey/src/main/resources/META-INF/services/org/mule/providers/jersey.properties     2007-09-13 11:18:27 UTC (rev 4)
@@ -0,0 +1,32 @@
+#This file is the service descriptor for your transport
+#It ties all the implementation classes together so that Mule can
+#construct endpoints for your transport protocol at runtime
+#For a full list of properties that can be set here see -
+#http://mule.mulesource.org/wiki/x/pwI
+
+#The connector class for your transport. This is alwas required
+connector=org.mule.providers.jersey.JerseyConnector
+
+#Used as the Mule internal representation of a message received or sent by 
+#your transport. This is always required.
+message.adapter=org.mule.providers.jersey.JerseyMessageAdapter
+
+#The message adapter to use if the inbound endpoint is marked for streaming
+#streaming.message.adapter=org.mule.providers.jersey.JerseyStreamingMessageAdapter
+
+#The factory used to create dispatchers responsible for sending events from the underlying technology
+#dispatcher.factory=org.mule.providers.jersey.JerseyMessageDispatcherFactory
+
+#The standard message receiver used to consume events from the underlying technology
+message.receiver=org.mule.providers.jersey.JerseyMessageReceiver
+
+
+#Defines the way in which endpoints for your transport will be constructed
+#Options are (but you can write your own) -
+#org.mule.impl.endpoint.ResourceEndpointBuilder i.e. vm://my.queue
+#org.mule.impl.endpoint.UrlEndpointBuilder i.e. axis:http://localhost:1234/context/Service?params
+#org.mule.impl.endpoint.SocketEndpointBuilder i.e. udp://localhost:2222
+
+endpoint.builder=org.mule.impl.endpoint.UrlEndpointBuilder
+
+#For more information see - http://mule.mulesource.org/wiki/x/DQ

Added: mule-transport-jersey/src/main/resources/META-INF/spring.handlers (0 => 4)

--- mule-transport-jersey/src/main/resources/META-INF/spring.handlers                                (rev 0)
+++ mule-transport-jersey/src/main/resources/META-INF/spring.handlers   2007-09-13 11:18:27 UTC (rev 4)
@@ -0,0 +1 @@
+http\://www.mulesource.org/schema/mule/jersey/2.0=org.mule.providers.jersey.config.JerseyNamespaceHandler

Added: mule-transport-jersey/src/main/resources/META-INF/spring.schemas (0 => 4)

--- mule-transport-jersey/src/main/resources/META-INF/spring.schemas                         (rev 0)
+++ mule-transport-jersey/src/main/resources/META-INF/spring.schemas    2007-09-13 11:18:27 UTC (rev 4)
@@ -0,0 +1 @@
+http\://www.mulesource.org/schema/mule/jersey/2.0/mule-jersey.xsd=META-INF/mule-jersey.xsd
\ No newline at end of file

Added: mule-transport-jersey/src/test/java/org/mule/providers/jersey/AbderaConnectorFactoryTestCase.class

(Binary files differ)

Property changes on: mule-transport-jersey/src/test/java/org/mule/providers/jersey/AbderaConnectorFactoryTestCase.class ___________________________________________________________________ Name: svn:mime-type + application/octet-stream

Added: mule-transport-jersey/src/test/java/org/mule/providers/jersey/AbderaConnectorTestCase.class

(Binary files differ)

Property changes on: mule-transport-jersey/src/test/java/org/mule/providers/jersey/AbderaConnectorTestCase.class ___________________________________________________________________ Name: svn:mime-type + application/octet-stream

Added: mule-transport-jersey/src/test/java/org/mule/providers/jersey/AbderaEndpointTestCase.class

(Binary files differ)

Property changes on: mule-transport-jersey/src/test/java/org/mule/providers/jersey/AbderaEndpointTestCase.class ___________________________________________________________________ Name: svn:mime-type + application/octet-stream

Added: mule-transport-jersey/src/test/java/org/mule/providers/jersey/AbderaMessageAdapterTestCase.class

(Binary files differ)

Property changes on: mule-transport-jersey/src/test/java/org/mule/providers/jersey/AbderaMessageAdapterTestCase.class ___________________________________________________________________ Name: svn:mime-type + application/octet-stream

Added: mule-transport-jersey/src/test/java/org/mule/providers/jersey/AbderaMessageReceiverTestCase.class

(Binary files differ)

Property changes on: mule-transport-jersey/src/test/java/org/mule/providers/jersey/AbderaMessageReceiverTestCase.class ___________________________________________________________________ Name: svn:mime-type + application/octet-stream

Added: mule-transport-jersey/src/test/java/org/mule/providers/jersey/BasicJerseyTest.java (0 => 4)

--- mule-transport-jersey/src/test/java/org/mule/providers/jersey/BasicJerseyTest.java                               (rev 0)
+++ mule-transport-jersey/src/test/java/org/mule/providers/jersey/BasicJerseyTest.java  2007-09-13 11:18:27 UTC (rev 4)
@@ -0,0 +1,41 @@
+package org.mule.providers.jersey;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.mule.extras.client.MuleClient;
+import org.mule.providers.http.HttpConnector;
+import org.mule.providers.http.HttpConstants;
+import org.mule.tck.FunctionalTestCase;
+import org.mule.umo.UMOMessage;
+
+public class BasicJerseyTest extends FunctionalTestCase {
+
+    public void testBasic() throws Exception
+    {
+        MuleClient client = new MuleClient();
+        
+        UMOMessage result = client.send("http://localhost:10081/helloworld", "", null);
+        assertEquals("Hello World", result.getPayloadAsString());
+        assertEquals(200, result.getIntProperty(HttpConnector.HTTP_STATUS_PROPERTY, 0));
+        
+        result = client.send("http://localhost:10081/hello", "", null);
+        assertEquals(404, result.getIntProperty(HttpConnector.HTTP_STATUS_PROPERTY, 0));
+        
+        Map<String, String> props = new HashMap<String, String>();
+        props.put(HttpConnector.HTTP_METHOD_PROPERTY, HttpConstants.METHOD_GET);
+        result = client.send("http://localhost:10081/helloworld", "", props);
+        assertEquals(405, result.getIntProperty(HttpConnector.HTTP_STATUS_PROPERTY, 0));
+        
+        props.put(HttpConnector.HTTP_METHOD_PROPERTY, HttpConstants.METHOD_DELETE);
+        result = client.send("http://localhost:10081/helloworld", "", props);
+        assertEquals("Hello World Delete", result.getPayloadAsString());
+        assertEquals(200, result.getIntProperty(HttpConnector.HTTP_STATUS_PROPERTY, 0));
+    }
+    
+    @Override
+    protected String getConfigResources() {
+        return "basic-conf.xml";
+    }
+
+}

Added: mule-transport-jersey/src/test/java/org/mule/providers/jersey/HelloWorldResource.java (0 => 4)

--- mule-transport-jersey/src/test/java/org/mule/providers/jersey/HelloWorldResource.java                            (rev 0)
+++ mule-transport-jersey/src/test/java/org/mule/providers/jersey/HelloWorldResource.java       2007-09-13 11:18:27 UTC (rev 4)
@@ -0,0 +1,21 @@
+package org.mule.providers.jersey;
+
+import javax.ws.rs.HttpMethod;
+import javax.ws.rs.ProduceMime;
+import javax.ws.rs.UriTemplate;
+
+@UriTemplate("/helloworld")
+public class HelloWorldResource {
+
+    @HttpMethod("POST") 
+    @ProduceMime("text/plain")
+    public String sayHelloWorld() {
+        return "Hello World";
+    }
+    
+    @HttpMethod("DELETE") 
+    @ProduceMime("text/plain")
+    public String deleteHelloWorld() {
+        return "Hello World Delete";
+    }
+}
\ No newline at end of file

Added: mule-transport-jersey/src/test/java/org/mule/providers/jersey/ServletJerseyTest.java (0 => 4)

--- mule-transport-jersey/src/test/java/org/mule/providers/jersey/ServletJerseyTest.java                             (rev 0)
+++ mule-transport-jersey/src/test/java/org/mule/providers/jersey/ServletJerseyTest.java        2007-09-13 11:18:27 UTC (rev 4)
@@ -0,0 +1,78 @@
+package org.mule.providers.jersey;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.mortbay.http.HttpContext;
+import org.mortbay.http.SocketListener;
+import org.mortbay.jetty.Server;
+import org.mortbay.jetty.servlet.ServletHandler;
+import org.mortbay.util.InetAddrPort;
+import org.mule.extras.client.MuleClient;
+import org.mule.providers.http.HttpConnector;
+import org.mule.providers.http.HttpConstants;
+import org.mule.providers.http.servlet.MuleReceiverServlet;
+import org.mule.tck.FunctionalTestCase;
+import org.mule.umo.UMOMessage;
+
+public class ServletJerseyTest extends FunctionalTestCase {
+    public static final int HTTP_PORT = 18088;
+
+    private Server httpServer;
+
+    @Override
+    protected void doSetUp() throws Exception {
+        super.doSetUp();
+        httpServer = new Server();
+        SocketListener socketListener = new SocketListener(new InetAddrPort(HTTP_PORT));
+        httpServer.addListener(socketListener);
+
+        HttpContext context = httpServer.getContext("/");
+        context.setRequestLog(null);
+
+        ServletHandler handler = new ServletHandler();
+        handler.addServlet("MuleReceiverServlet", "/*", MuleReceiverServlet.class
+            .getName());
+
+        context.addHandler(handler);
+        httpServer.start();
+    }
+    
+    @Override
+    protected void doTearDown() throws Exception
+    {
+        super.doTearDown();
+        if (httpServer != null && httpServer.isStarted())
+        {
+            httpServer.stop();
+        }
+    }
+    
+    public void testBasic() throws Exception
+    {
+        MuleClient client = new MuleClient();
+        
+        UMOMessage result = client.send("http://localhost:18088/helloworld", "", null);
+        assertEquals("Hello World", result.getPayloadAsString());
+        assertEquals(200, result.getIntProperty(HttpConnector.HTTP_STATUS_PROPERTY, 0));
+        
+        result = client.send("http://localhost:18088/hello", "", null);
+        assertEquals(404, result.getIntProperty(HttpConnector.HTTP_STATUS_PROPERTY, 0));
+        
+        Map<String, String> props = new HashMap<String, String>();
+        props.put(HttpConnector.HTTP_METHOD_PROPERTY, HttpConstants.METHOD_GET);
+        result = client.send("http://localhost:18088/helloworld", "", props);
+        assertEquals(405, result.getIntProperty(HttpConnector.HTTP_STATUS_PROPERTY, 0));
+        
+        props.put(HttpConnector.HTTP_METHOD_PROPERTY, HttpConstants.METHOD_DELETE);
+        result = client.send("http://localhost:18088/helloworld", "", props);
+        assertEquals("Hello World Delete", result.getPayloadAsString());
+        assertEquals(200, result.getIntProperty(HttpConnector.HTTP_STATUS_PROPERTY, 0));
+    }
+    
+    @Override
+    protected String getConfigResources() {
+        return "servlet-conf.xml";
+    }
+
+}

Added: mule-transport-jersey/src/test/resources/basic-conf.xml (0 => 4)

--- mule-transport-jersey/src/test/resources/basic-conf.xml                          (rev 0)
+++ mule-transport-jersey/src/test/resources/basic-conf.xml     2007-09-13 11:18:27 UTC (rev 4)
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:mule="http://www.mulesource.org/schema/mule/core/2.0"
+       xmlns:jersey="http://www.mulesource.org/schema/mule/jersey/2.0"
+       xmlns:vm="http://www.mulesource.org/schema/mule/vm/2.0"
+       xsi:schemaLocation="
+               http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
+               http://www.mulesource.org/schema/mule/core/2.0 http://www.mulesource.org/schema/mule/core/2.0/mule.xsd
+               http://www.mulesource.org/schema/mule/jersey/2.0 http://www.mulesource.org/schema/mule/jersey/2.0/mule-jersey.xsd
+               http://www.mulesource.org/schema/mule/vm/2.0 http://www.mulesource.org/schema/mule/vm/2.0/mule-vm.xsd">
+
+    <jersey:connector/>
+    
+    <mule:model-seda name="BasicJerseyTest">
+    
+        <mule:service name="helloWorldResource">
+            <mule:component class="org.mule.providers.jersey.HelloWorldResource"/>
+            <mule:inbound-router>
+                <mule:endpoint address="jersey:http://localhost:10081/helloworld"/>
+            </mule:inbound-router>
+        </mule:service>
+        
+    </mule:model-seda>
+
+</beans>
+        

Added: mule-transport-jersey/src/test/resources/log4j.properties (0 => 4)

--- mule-transport-jersey/src/test/resources/log4j.properties                                (rev 0)
+++ mule-transport-jersey/src/test/resources/log4j.properties   2007-09-13 11:18:27 UTC (rev 4)
@@ -0,0 +1,9 @@
+
+# default properties to initialise log4j
+log4j.rootLogger=WARN, A1
+log4j.appender.A1=org.apache.log4j.ConsoleAppender
+log4j.appender.A1.layout=org.apache.log4j.PatternLayout
+log4j.appender.A1.layout.ConversionPattern=[%d{MM-dd HH:mm:ss}] %-5p %c{1} [%t]: %m%n
+
+# settings for specific packages
+log4j.logger.org.mule=WARN

Added: mule-transport-jersey/src/test/resources/namespace-config.xml (0 => 4)

--- mule-transport-jersey/src/test/resources/namespace-config.xml                            (rev 0)
+++ mule-transport-jersey/src/test/resources/namespace-config.xml       2007-09-13 11:18:27 UTC (rev 4)
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:mule="http://www.mulesource.org/schema/mule/core/2.0"
+       xmlns:jersey="http://www.mulesource.org/schema/mule/jersey/2.0"
+       xmlns:vm="http://www.mulesource.org/schema/mule/vm/2.0"
+       xsi:schemaLocation="
+               http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
+               http://www.mulesource.org/schema/mule/core/2.0 http://www.mulesource.org/schema/mule/core/2.0/mule.xsd
+               http://www.mulesource.org/schema/mule/jersey/2.0 http://www.mulesource.org/schema/mule/jersey/2.0/mule-jersey.xsd
+               http://www.mulesource.org/schema/mule/vm/2.0 http://www.mulesource.org/schema/mule/vm/2.0/mule-vm.xsd">
+
+    <jersey:connector/>
+
+</beans>
+        

Added: mule-transport-jersey/src/test/resources/servlet-conf.xml (0 => 4)

--- mule-transport-jersey/src/test/resources/servlet-conf.xml                                (rev 0)
+++ mule-transport-jersey/src/test/resources/servlet-conf.xml   2007-09-13 11:18:27 UTC (rev 4)
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:mule="http://www.mulesource.org/schema/mule/core/2.0"
+       xmlns:jersey="http://www.mulesource.org/schema/mule/jersey/2.0"
+       xmlns:servlet="http://www.mulesource.org/schema/mule/servlet/2.0"
+       xsi:schemaLocation="
+               http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
+               http://www.mulesource.org/schema/mule/core/2.0 http://www.mulesource.org/schema/mule/core/2.0/mule.xsd
+               http://www.mulesource.org/schema/mule/jersey/2.0 http://www.mulesource.org/schema/mule/jersey/2.0/mule-jersey.xsd
+               http://www.mulesource.org/schema/mule/servlet/2.0 http://www.mulesource.org/schema/mule/servlet/2.0/mule-servlet.xsd">
+
+    <jersey:connector/>
+    
+    <servlet:connector name="servlet" servletUrl="http://localhost:18088/"/>
+    
+    <mule:model-seda name="BasicJerseyTest">
+    
+        <mule:service name="helloWorldResource">
+            <mule:component class="org.mule.providers.jersey.HelloWorldResource"/>
+            <mule:inbound-router>
+                <mule:endpoint address="jersey:servlet://hello"/>
+            </mule:inbound-router>
+        </mule:service>
+        
+    </mule:model-seda>
+
+</beans>
+        

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

Message Thread

[mule-transport-jersey-dev] [4] mule-transport-jersey: Initial import. dandiep@muleforge...
11:18 AM UTC, Thursday 13 September 2007