cxf-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From j...@apache.org
Subject svn commit: r573429 [1/2] - in /incubator/cxf/branches/jliu: ./ maven_repo/ maven_repo/javax/ maven_repo/javax/rs/ maven_repo/javax/rs/jsr311-api/ maven_repo/javax/rs/jsr311-api/0.9/ rt/ rt/core/src/main/java/org/apache/cxf/endpoint/ rt/core/src/main/j...
Date Fri, 07 Sep 2007 02:44:47 GMT
Author: jliu
Date: Thu Sep  6 19:44:44 2007
New Revision: 573429

URL: http://svn.apache.org/viewvc?rev=573429&view=rev
Log: (empty)

Added:
    incubator/cxf/branches/jliu/maven_repo/
    incubator/cxf/branches/jliu/maven_repo/javax/
    incubator/cxf/branches/jliu/maven_repo/javax/rs/
    incubator/cxf/branches/jliu/maven_repo/javax/rs/jsr311-api/
    incubator/cxf/branches/jliu/maven_repo/javax/rs/jsr311-api/0.9/
    incubator/cxf/branches/jliu/maven_repo/javax/rs/jsr311-api/0.9/jsr311-api-0.9.jar   (with props)
    incubator/cxf/branches/jliu/maven_repo/javax/rs/jsr311-api/0.9/jsr311-api-0.9.jar.sha1
    incubator/cxf/branches/jliu/maven_repo/javax/rs/jsr311-api/0.9/jsr311-api-0.9.pom
    incubator/cxf/branches/jliu/maven_repo/javax/rs/jsr311-api/0.9/jsr311-api-0.9.pom.sha1
    incubator/cxf/branches/jliu/rt/core/src/main/java/org/apache/cxf/endpoint/AbstractEndpointFactory.java   (with props)
    incubator/cxf/branches/jliu/rt/frontend/jaxrs/
    incubator/cxf/branches/jliu/rt/frontend/jaxrs/pom.xml   (with props)
    incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/
    incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/
    incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/
    incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/
    incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/
    incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/
    incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/
    incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSBindingFactory.java   (with props)
    incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java   (with props)
    incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServerFactoryBean.java   (with props)
    incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServiceFactoryBean.java   (with props)
    incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServiceImpl.java   (with props)
    incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/
    incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSDispatchInterceptor.java   (with props)
    incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java   (with props)
    incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/
    incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/ClassResourceInfo.java   (with props)
    incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/MethodDispatcher.java   (with props)
    incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/OperationResourceInfo.java   (with props)
    incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/URITemplate.java   (with props)
    incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/
    incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java   (with props)
    incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactoryImpl.java   (with props)
    incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/resources/
    incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/resources/META-INF/
    incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/resources/META-INF/bus-extensions.xml   (with props)
    incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/resources/META-INF/cxf/
    incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/resources/META-INF/cxf/cxf-extension-jaxrs-binding.xml   (with props)
    incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/resources/META-INF/cxf/cxf.extension
    incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/resources/META-INF/services/
    incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/resources/META-INF/services/javax.ws.rs.ext.ProviderFactory
    incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/test/
    incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/test/java/
    incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/test/java/org/
    incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/test/java/org/apache/
    incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/test/java/org/apache/cxf/
    incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/test/java/org/apache/cxf/rs/
    incubator/cxf/branches/jliu/systests/src/test/java/org/apache/cxf/systest/jaxrs/
    incubator/cxf/branches/jliu/systests/src/test/java/org/apache/cxf/systest/jaxrs/Book.java   (with props)
    incubator/cxf/branches/jliu/systests/src/test/java/org/apache/cxf/systest/jaxrs/BookServer.java   (with props)
    incubator/cxf/branches/jliu/systests/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java   (with props)
    incubator/cxf/branches/jliu/systests/src/test/java/org/apache/cxf/systest/jaxrs/CD.java   (with props)
    incubator/cxf/branches/jliu/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java   (with props)
Modified:
    incubator/cxf/branches/jliu/pom.xml
    incubator/cxf/branches/jliu/rt/core/src/main/java/org/apache/cxf/endpoint/ManagedEndpoint.java
    incubator/cxf/branches/jliu/rt/core/src/main/java/org/apache/cxf/transport/ChainInitiationObserver.java
    incubator/cxf/branches/jliu/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/AbstractAegisTest.java
    incubator/cxf/branches/jliu/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/AbstractServiceFactory.java
    incubator/cxf/branches/jliu/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/ClientFactoryBean.java
    incubator/cxf/branches/jliu/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/ServerFactoryBean.java
    incubator/cxf/branches/jliu/rt/pom.xml
    incubator/cxf/branches/jliu/systests/pom.xml

Added: incubator/cxf/branches/jliu/maven_repo/javax/rs/jsr311-api/0.9/jsr311-api-0.9.jar
URL: http://svn.apache.org/viewvc/incubator/cxf/branches/jliu/maven_repo/javax/rs/jsr311-api/0.9/jsr311-api-0.9.jar?rev=573429&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/cxf/branches/jliu/maven_repo/javax/rs/jsr311-api/0.9/jsr311-api-0.9.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/cxf/branches/jliu/maven_repo/javax/rs/jsr311-api/0.9/jsr311-api-0.9.jar.sha1
URL: http://svn.apache.org/viewvc/incubator/cxf/branches/jliu/maven_repo/javax/rs/jsr311-api/0.9/jsr311-api-0.9.jar.sha1?rev=573429&view=auto
==============================================================================
--- incubator/cxf/branches/jliu/maven_repo/javax/rs/jsr311-api/0.9/jsr311-api-0.9.jar.sha1 (added)
+++ incubator/cxf/branches/jliu/maven_repo/javax/rs/jsr311-api/0.9/jsr311-api-0.9.jar.sha1 Thu Sep  6 19:44:44 2007
@@ -0,0 +1 @@
+efb2ae8fdef14a34ae4161bcdac1a145e335745f  jsr311-api-0.9.jar

Added: incubator/cxf/branches/jliu/maven_repo/javax/rs/jsr311-api/0.9/jsr311-api-0.9.pom
URL: http://svn.apache.org/viewvc/incubator/cxf/branches/jliu/maven_repo/javax/rs/jsr311-api/0.9/jsr311-api-0.9.pom?rev=573429&view=auto
==============================================================================
--- incubator/cxf/branches/jliu/maven_repo/javax/rs/jsr311-api/0.9/jsr311-api-0.9.pom (added)
+++ incubator/cxf/branches/jliu/maven_repo/javax/rs/jsr311-api/0.9/jsr311-api-0.9.pom Thu Sep  6 19:44:44 2007
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?><project>
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>javax.rs</groupId>
+  <artifactId>jsr311-api</artifactId>
+  <version>0.9</version>
+  <description>Web Service Annotations</description>
+  <url>https://jax-ws.dev.java.net/</url>
+  <distributionManagement>
+    <downloadUrl>https://jax-ws.dev.java.net/jax-ws-ea3/</downloadUrl>
+  </distributionManagement>
+</project>
\ No newline at end of file

Added: incubator/cxf/branches/jliu/maven_repo/javax/rs/jsr311-api/0.9/jsr311-api-0.9.pom.sha1
URL: http://svn.apache.org/viewvc/incubator/cxf/branches/jliu/maven_repo/javax/rs/jsr311-api/0.9/jsr311-api-0.9.pom.sha1?rev=573429&view=auto
==============================================================================
--- incubator/cxf/branches/jliu/maven_repo/javax/rs/jsr311-api/0.9/jsr311-api-0.9.pom.sha1 (added)
+++ incubator/cxf/branches/jliu/maven_repo/javax/rs/jsr311-api/0.9/jsr311-api-0.9.pom.sha1 Thu Sep  6 19:44:44 2007
@@ -0,0 +1 @@
+04be00a0d964c572f4b6471263ba166db9b5496c jsr311-api-0.9.pom

Modified: incubator/cxf/branches/jliu/pom.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/branches/jliu/pom.xml?rev=573429&r1=573428&r2=573429&view=diff
==============================================================================
--- incubator/cxf/branches/jliu/pom.xml (original)
+++ incubator/cxf/branches/jliu/pom.xml Thu Sep  6 19:44:44 2007
@@ -42,6 +42,7 @@
     </prerequisites>
 
     <properties>
+            <topDirectoryLocation>.</topDirectoryLocation>
          <compiler.fork>false</compiler.fork>
      </properties>
 
@@ -139,7 +140,29 @@
         <module>maven-plugins/archetypes</module>
         <module>maven-plugins/eclipse-plugin-generator</module>
     </modules>
+    
 
+    <repositories>
+        <repository>
+            <id>private-repo</id>
+            <name>private repo</name>
+            <url>file:${basedir}/${topDirectoryLocation}/maven_repo</url>
+            <releases>
+                <enabled>true</enabled>
+            </releases>
+            <snapshots>
+                <enabled>true</enabled>
+            </snapshots>
+        </repository>
+        <repository>
+            <id>java.net</id>
+            <name>java.net Maven Repository</name>
+            <url>https://maven-repository.dev.java.net/nonav/repository/</url>
+            <layout>legacy</layout>
+        </repository>
+    </repositories>
+    
+    
     <profiles>
         <profile>
             <!-- default profile enables checkstyle and Xlint stuff -->

Added: incubator/cxf/branches/jliu/rt/core/src/main/java/org/apache/cxf/endpoint/AbstractEndpointFactory.java
URL: http://svn.apache.org/viewvc/incubator/cxf/branches/jliu/rt/core/src/main/java/org/apache/cxf/endpoint/AbstractEndpointFactory.java?rev=573429&view=auto
==============================================================================
--- incubator/cxf/branches/jliu/rt/core/src/main/java/org/apache/cxf/endpoint/AbstractEndpointFactory.java (added)
+++ incubator/cxf/branches/jliu/rt/core/src/main/java/org/apache/cxf/endpoint/AbstractEndpointFactory.java Thu Sep  6 19:44:44 2007
@@ -0,0 +1,167 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.cxf.endpoint;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import javax.xml.namespace.QName;
+
+import org.apache.cxf.Bus;
+import org.apache.cxf.BusException;
+import org.apache.cxf.BusFactory;
+import org.apache.cxf.binding.BindingConfiguration;
+import org.apache.cxf.binding.BindingFactory;
+import org.apache.cxf.databinding.DataBinding;
+import org.apache.cxf.feature.AbstractFeature;
+import org.apache.cxf.interceptor.AbstractBasicInterceptorProvider;
+import org.apache.cxf.service.model.BindingInfo;
+import org.apache.cxf.service.model.EndpointInfo;
+import org.apache.cxf.transport.DestinationFactory;
+import org.apache.cxf.ws.addressing.EndpointReferenceType;
+
+public abstract class AbstractEndpointFactory extends AbstractBasicInterceptorProvider {
+    protected Bus bus;
+    protected String address;
+    protected String transportId;
+    protected String bindingId;
+    protected DataBinding dataBinding;
+    protected BindingFactory bindingFactory;
+    protected DestinationFactory destinationFactory;
+    protected QName endpointName;
+    protected Map<String, Object> properties;
+    protected List<AbstractFeature> features;
+    protected BindingConfiguration bindingConfig;
+    protected EndpointReferenceType endpointReference;
+    protected ConduitSelector conduitSelector;
+
+    protected abstract Endpoint createEndpoint() throws BusException, EndpointException;
+
+    protected abstract EndpointInfo createEndpointInfo() throws BusException;
+
+    protected abstract BindingInfo createBindingInfo();
+
+    public String getAddress() {
+        return address;
+    }
+
+    public void setAddress(String address) {
+        this.address = address;
+    }
+
+    public Bus getBus() {
+        if (bus == null) {
+            bus = BusFactory.getThreadDefaultBus();
+        }
+        return bus;
+    }
+
+    public void setBus(Bus bus) {
+        this.bus = bus;
+    }
+
+    public String getTransportId() {
+        return transportId;
+    }
+
+    public void setTransportId(String transportId) {
+        this.transportId = transportId;
+    }
+
+    public void setBindingId(String bind) {
+        bindingId = bind;
+    }
+
+    public String getBindingId() {
+        return bindingId;
+    }
+
+    public void setBindingConfig(BindingConfiguration obj) {
+        bindingConfig = obj;
+    }
+
+    public BindingConfiguration getBindingConfig() {
+        return bindingConfig;
+    }
+
+    public DestinationFactory getDestinationFactory() {
+        return destinationFactory;
+    }
+
+    public void setDestinationFactory(DestinationFactory destinationFactory) {
+        this.destinationFactory = destinationFactory;
+    }
+
+    public QName getEndpointName() {
+        return endpointName;
+    }
+
+    public void setEndpointName(QName endpointName) {
+        this.endpointName = endpointName;
+    }
+
+    public void setEndpointReference(EndpointReferenceType epr) {
+        endpointReference = epr;
+    }
+
+    public Map<String, Object> getProperties() {
+        return properties;
+    }
+
+    public void setProperties(Map<String, Object> properties) {
+        this.properties = properties;
+    }
+
+    public List<AbstractFeature> getFeatures() {
+        if (features == null) {
+            features = new ArrayList<AbstractFeature>();
+        }
+        return features;
+    }
+
+    public void setFeatures(List<AbstractFeature> features) {
+        this.features = features;
+    }
+
+    public BindingFactory getBindingFactory() {
+        return bindingFactory;
+    }
+    
+    public void setBindingFactory(BindingFactory bf) {
+        this.bindingFactory  = bf;
+    }
+
+    public ConduitSelector getConduitSelector() {
+        return conduitSelector;
+    }
+
+    public void setConduitSelector(ConduitSelector selector) {
+        conduitSelector = selector;
+    }
+
+    public DataBinding getDataBinding() {
+        return dataBinding;
+    }
+
+    public void setDataBinding(DataBinding dataBinding) {
+        this.dataBinding = dataBinding;
+    }
+
+}

Propchange: incubator/cxf/branches/jliu/rt/core/src/main/java/org/apache/cxf/endpoint/AbstractEndpointFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/branches/jliu/rt/core/src/main/java/org/apache/cxf/endpoint/AbstractEndpointFactory.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/cxf/branches/jliu/rt/core/src/main/java/org/apache/cxf/endpoint/ManagedEndpoint.java
URL: http://svn.apache.org/viewvc/incubator/cxf/branches/jliu/rt/core/src/main/java/org/apache/cxf/endpoint/ManagedEndpoint.java?rev=573429&r1=573428&r2=573429&view=diff
==============================================================================
--- incubator/cxf/branches/jliu/rt/core/src/main/java/org/apache/cxf/endpoint/ManagedEndpoint.java (original)
+++ incubator/cxf/branches/jliu/rt/core/src/main/java/org/apache/cxf/endpoint/ManagedEndpoint.java Thu Sep  6 19:44:44 2007
@@ -86,7 +86,7 @@
         buffer.append(ManagementConstants.TYPE_PROP + "=" + "Bus.Service.Endpoint,");
        
 
-        String serviceName = ObjectName.quote(endpoint.getEndpointInfo().getService().getName().toString());
+        String serviceName = ObjectName.quote(endpoint.getService().getName().toString());
         buffer.append(ManagementConstants.SERVICE_NAME_PROP + "=" + serviceName + ",");
         String endpointName = ObjectName.quote(endpoint.getEndpointInfo().getName().toString());
         buffer.append(ManagementConstants.PORT_NAME_PROP + "=" + endpointName);

Modified: incubator/cxf/branches/jliu/rt/core/src/main/java/org/apache/cxf/transport/ChainInitiationObserver.java
URL: http://svn.apache.org/viewvc/incubator/cxf/branches/jliu/rt/core/src/main/java/org/apache/cxf/transport/ChainInitiationObserver.java?rev=573429&r1=573428&r2=573429&view=diff
==============================================================================
--- incubator/cxf/branches/jliu/rt/core/src/main/java/org/apache/cxf/transport/ChainInitiationObserver.java (original)
+++ incubator/cxf/branches/jliu/rt/core/src/main/java/org/apache/cxf/transport/ChainInitiationObserver.java Thu Sep  6 19:44:44 2007
@@ -35,6 +35,7 @@
 import org.apache.cxf.phase.PhaseInterceptorChain;
 import org.apache.cxf.phase.PhaseManager;
 import org.apache.cxf.service.Service;
+import org.apache.cxf.service.ServiceImpl;
 import org.apache.cxf.service.model.EndpointInfo;
 
 public class ChainInitiationObserver implements MessageObserver {
@@ -86,7 +87,7 @@
         if (exchange.getDestination() == null) {
             exchange.setDestination(m.getDestination());
         }
-        if (endpoint != null) {
+        if (endpoint != null && (endpoint.getService() instanceof ServiceImpl)) {
 
             EndpointInfo endpointInfo = endpoint.getEndpointInfo();
 

Modified: incubator/cxf/branches/jliu/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/AbstractAegisTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/branches/jliu/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/AbstractAegisTest.java?rev=573429&r1=573428&r2=573429&view=diff
==============================================================================
--- incubator/cxf/branches/jliu/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/AbstractAegisTest.java (original)
+++ incubator/cxf/branches/jliu/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/AbstractAegisTest.java Thu Sep  6 19:44:44 2007
@@ -42,7 +42,7 @@
 import org.apache.cxf.bus.extension.ExtensionManagerBus;
 import org.apache.cxf.endpoint.Server;
 import org.apache.cxf.endpoint.ServerRegistry;
-import org.apache.cxf.frontend.AbstractEndpointFactory;
+import org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory;
 import org.apache.cxf.frontend.ServerFactoryBean;
 import org.apache.cxf.service.Service;
 import org.apache.cxf.test.AbstractCXFTest;
@@ -128,7 +128,7 @@
         return sf;
     }
 
-    protected void setupAegis(AbstractEndpointFactory sf) {
+    protected void setupAegis(AbstractWSDLBasedEndpointFactory sf) {
         sf.getServiceFactory().getServiceConfigurations().add(0, new AegisServiceConfiguration());
         sf.getServiceFactory().setDataBinding(new AegisDatabinding());
     }

Added: incubator/cxf/branches/jliu/rt/frontend/jaxrs/pom.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/branches/jliu/rt/frontend/jaxrs/pom.xml?rev=573429&view=auto
==============================================================================
--- incubator/cxf/branches/jliu/rt/frontend/jaxrs/pom.xml (added)
+++ incubator/cxf/branches/jliu/rt/frontend/jaxrs/pom.xml Thu Sep  6 19:44:44 2007
@@ -0,0 +1,94 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements. See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership. The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License. You may obtain a copy of the License at
+ 
+  http://www.apache.org/licenses/LICENSE-2.0
+ 
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied. See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<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.apache.cxf</groupId>
+    <artifactId>cxf-rt-frontend-jaxrs</artifactId>
+    <packaging>jar</packaging>
+    <version>2.1-incubator-SNAPSHOT</version>
+    <name>Apache CXF Runtime JAX-RS Frontend</name>
+    <url>http://cwiki.apache.org/CXF</url>
+
+    <parent>
+        <groupId>org.apache.cxf</groupId>
+        <artifactId>cxf-parent</artifactId>
+        <version>2.1-incubator-SNAPSHOT</version>
+        <relativePath>../../../parent/pom.xml</relativePath>
+    </parent>
+
+    <dependencies>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cxf</groupId>
+            <artifactId>cxf-common-utilities</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cxf</groupId>
+            <artifactId>cxf-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cxf</groupId>
+            <artifactId>cxf-rt-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>javax.rs</groupId>
+            <artifactId>jsr311-api</artifactId>
+            <version>0.9</version>
+        </dependency>
+        <dependency>
+	            <groupId>org.apache.cxf</groupId>
+	            <artifactId>cxf-rt-frontend-jaxws</artifactId>
+	            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>javax.rs</groupId>
+            <artifactId>jsr311-api</artifactId>
+            <version>0.9</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.cxf</groupId>
+            <artifactId>cxf-testutils</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>        
+        <dependency>
+            <groupId>org.easymock</groupId>
+            <artifactId>easymockclassextension</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+
+    <scm>
+        <connection>scm:svn:http://svn.apache.org/repos/asf/incubator/cxf/trunk/rt/rs</connection>
+        <developerConnection>scm:svn:https://svn.apache.org/repos/asf/incubator/cxf/trunk/rt/rs</developerConnection>
+      <url>http://svn.apache.org/viewvc/incubator/cxf/trunk/cxf-parent/cxf-rt-rs</url>
+  </scm>
+
+</project>

Propchange: incubator/cxf/branches/jliu/rt/frontend/jaxrs/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/branches/jliu/rt/frontend/jaxrs/pom.xml
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: incubator/cxf/branches/jliu/rt/frontend/jaxrs/pom.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Added: incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSBindingFactory.java
URL: http://svn.apache.org/viewvc/incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSBindingFactory.java?rev=573429&view=auto
==============================================================================
--- incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSBindingFactory.java (added)
+++ incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSBindingFactory.java Thu Sep  6 19:44:44 2007
@@ -0,0 +1,96 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.cxf.jaxrs;
+
+
+import org.apache.cxf.binding.AbstractBindingFactory;
+import org.apache.cxf.binding.Binding;
+
+import org.apache.cxf.binding.xml.XMLBinding;
+import org.apache.cxf.jaxrs.interceptor.JAXRSDispatchInterceptor;
+import org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor;
+import org.apache.cxf.service.Service;
+import org.apache.cxf.service.model.BindingInfo;
+
+public class JAXRSBindingFactory extends AbstractBindingFactory {
+
+    public static final String JAXRS_BINDING_ID = "http://apache.org/cxf/binding/jaxrs";
+
+    public JAXRSBindingFactory() {
+    }
+
+    public Binding createBinding(BindingInfo bi) {
+        XMLBinding binding = new XMLBinding(bi);
+
+        binding.getInInterceptors().add(new JAXRSDispatchInterceptor());
+        binding.getOutInterceptors().add(new JAXRSOutInterceptor());
+ 
+/*     
+        binding.getInFaultInterceptors().add(new XMLFaultInInterceptor());
+
+        binding.getOutFaultInterceptors().add(new ContentTypeOutInterceptor());
+        binding.getOutFaultInterceptors().add(new StaxOutInterceptor());
+        binding.getOutFaultInterceptors().add(new XMLFaultOutInterceptor());*/
+
+        return binding;
+    }
+
+
+    public BindingInfo createBindingInfo(Service service, String namespace, Object obj) {
+        BindingInfo info = new BindingInfo(null,
+                                           JAXRSBindingFactory.JAXRS_BINDING_ID);
+
+        return info;
+
+/*        ServiceInfo si = service.getServiceInfos().get(0);
+        BindingInfo info = new BindingInfo(si,
+                                           RESTBindingFactory.REST_BINDING_ID);
+        info.setName(new QName(si.getName().getNamespaceURI(),
+                               si.getName().getLocalPart() + "HttpBinding"));
+
+        //service.put(URIMapper.class.getName(), mapper);
+        MethodDispatcher md = (MethodDispatcher) service.get(MethodDispatcher.class.getName());
+
+        for (OperationInfo o : si.getInterface().getOperations()) {
+            BindingOperationInfo bop = info.buildOperation(o.getName(), o.getInputName(), o.getOutputName());
+
+            info.addOperation(bop);
+
+            Method m = md.getMethod(bop);
+
+            try {
+                Class c = (Class) service.get(ReflectionServiceFactoryBean.ENDPOINT_CLASS);
+                if (c != null) {
+                    m = c.getMethod(m.getName(), m.getParameterTypes());
+                }
+            } catch (SecurityException e) {
+                throw new ServiceConstructionException(e);
+            } catch (NoSuchMethodException e) {
+                throw new ServiceConstructionException(e);
+            }
+
+        }
+
+        return info;*/
+
+        //return null;
+    }
+
+
+}

Propchange: incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSBindingFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSBindingFactory.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java
URL: http://svn.apache.org/viewvc/incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java?rev=573429&view=auto
==============================================================================
--- incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java (added)
+++ incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java Thu Sep  6 19:44:44 2007
@@ -0,0 +1,70 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.jaxrs;
+
+
+import java.lang.reflect.Method;
+import java.util.List;
+
+import org.apache.cxf.helpers.CastUtils;
+import org.apache.cxf.jaxrs.model.ClassResourceInfo;
+import org.apache.cxf.jaxrs.model.OperationResourceInfo;
+import org.apache.cxf.message.Exchange;
+import org.apache.cxf.message.MessageContentsList;
+import org.apache.cxf.service.invoker.AbstractInvoker;
+
+public class JAXRSInvoker extends AbstractInvoker {
+    public JAXRSInvoker() {
+    }
+
+    public Object invoke(Exchange exchange, Object o) {
+        OperationResourceInfo ori = exchange.get(OperationResourceInfo.class);
+
+        ClassResourceInfo classResourceInfo = ori.getClassResourceInfo();
+        Method m = classResourceInfo.getMethodDispatcher().getMethod(ori);
+        Object serviceObject = null;
+        try {
+            serviceObject = classResourceInfo.getResourceClass().newInstance();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+
+/*        MethodDispatcher md = (MethodDispatcher)
+            exchange.get(Service.class).get(MethodDispatcher.class.getName());
+        Method m = md.getMethod(bop);*/
+        //Method m = (Method)bop.getOperationInfo().getProperty(Method.class.getName());
+        //m = matchMethod(m, serviceObject);
+
+        List<Object> params = null;
+        if (o instanceof List) {
+            params = CastUtils.cast((List<?>)o);
+        } else if (o != null) {
+            params = new MessageContentsList(o);
+        }
+
+        return invoke(exchange, serviceObject, m, params);
+    }
+
+    public Object getServiceObject(Exchange ex) {
+        return null;
+    }
+
+}

Propchange: incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServerFactoryBean.java
URL: http://svn.apache.org/viewvc/incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServerFactoryBean.java?rev=573429&view=auto
==============================================================================
--- incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServerFactoryBean.java (added)
+++ incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServerFactoryBean.java Thu Sep  6 19:44:44 2007
@@ -0,0 +1,220 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.cxf.jaxrs;
+
+import java.io.IOException;
+import java.util.List;
+
+import org.apache.cxf.BusException;
+import org.apache.cxf.binding.BindingConfiguration;
+import org.apache.cxf.binding.BindingFactory;
+import org.apache.cxf.binding.BindingFactoryManager;
+import org.apache.cxf.endpoint.AbstractEndpointFactory;
+import org.apache.cxf.endpoint.Endpoint;
+import org.apache.cxf.endpoint.EndpointException;
+import org.apache.cxf.endpoint.EndpointImpl;
+import org.apache.cxf.endpoint.Server;
+import org.apache.cxf.endpoint.ServerImpl;
+import org.apache.cxf.feature.AbstractFeature;
+import org.apache.cxf.service.Service;
+import org.apache.cxf.service.factory.ServiceConstructionException;
+import org.apache.cxf.service.invoker.Invoker;
+import org.apache.cxf.service.model.BindingInfo;
+import org.apache.cxf.service.model.EndpointInfo;
+import org.apache.cxf.transport.DestinationFactory;
+import org.apache.cxf.transport.DestinationFactoryManager;
+
+
+/**
+ * Bean to help easily create Server endpoints for JAX-RS. Example:
+ * <pre>
+ * JAXRSServerFactoryBean sf = JAXRSServerFactoryBean();
+ * sf.setServiceClass(Book.class);
+ * sf.setAddress("http://acme.com/myService");
+ * sf.create();
+ * </pre>
+ * This will start a server for you and register it with the ServerManager.
+ */
+public class JAXRSServerFactoryBean extends AbstractEndpointFactory {
+    protected boolean doInit;
+    private Server server;
+    private Invoker invoker;
+    private boolean start = true;
+    private JAXRSServiceFactoryBean serviceFactory;
+
+    public JAXRSServerFactoryBean() {
+        this(new JAXRSServiceFactoryBean());
+        doInit = true;
+    }
+    public JAXRSServerFactoryBean(JAXRSServiceFactoryBean sf) {
+        this.serviceFactory = sf;
+        doInit = true;
+    }
+    
+    public Server create() {
+        try {
+            Endpoint ep = createEndpoint();
+            server = new ServerImpl(getBus(), 
+                                    ep, 
+                                    getDestinationFactory(), 
+                                    getBindingFactory());
+            
+            if (invoker == null) {
+                ep.getService().setInvoker(createInvoker());
+            } else {
+                ep.getService().setInvoker(invoker);
+            }
+            
+            if (start) {
+                server.start();
+            }
+        } catch (EndpointException e) {
+            throw new ServiceConstructionException(e);
+        } catch (BusException e) {
+            throw new ServiceConstructionException(e);
+        } catch (IOException e) {
+            throw new ServiceConstructionException(e);
+        }
+        
+        applyFeatures();
+        return server;
+    }
+
+    protected void applyFeatures() {
+        if (getFeatures() != null) {
+            for (AbstractFeature feature : getFeatures()) {
+                feature.initialize(server, getBus());
+            }
+        }
+    }
+
+    protected Invoker createInvoker() {
+        return new JAXRSInvoker();
+    }
+
+    protected Endpoint createEndpoint() throws BusException, EndpointException {
+        Service service = serviceFactory.getService();
+
+        if (service == null) {
+            service = serviceFactory.create();
+        }
+
+        EndpointInfo ei = createEndpointInfo();
+        Endpoint ep = new EndpointImpl(getBus(), getServiceFactory().getService(), ei);
+        
+        if (properties != null) {
+            ep.putAll(properties);
+        }
+        
+        if (getInInterceptors() != null) {
+            ep.getInInterceptors().addAll(getInInterceptors());
+        }
+        if (getOutInterceptors() != null) {
+            ep.getOutInterceptors().addAll(getOutInterceptors());
+        }
+        if (getInFaultInterceptors() != null) {
+            ep.getInFaultInterceptors().addAll(getInFaultInterceptors());
+        }
+        if (getOutFaultInterceptors() != null) {
+            ep.getOutFaultInterceptors().addAll(getOutFaultInterceptors());
+        }
+        return ep;
+    }
+
+    /*
+     * WSDL based EndpointInfo contains WSDL's physical part info, for JAX-RS
+     * based EndpointInfo, we set everything manually.
+     */    
+    protected EndpointInfo createEndpointInfo() throws BusException {
+        String transportId = getTransportId();
+        if (transportId == null && getAddress() != null) {
+            DestinationFactory df = getDestinationFactory();
+            if (df == null) {
+                DestinationFactoryManager dfm = getBus().getExtension(DestinationFactoryManager.class);
+                df = dfm.getDestinationFactoryForUri(getAddress());
+            }
+
+            if (df != null) {
+                transportId = df.getTransportIds().get(0);
+            }
+        }
+
+        BindingInfo bindingInfo = createBindingInfo();
+
+        //default to http transport
+        if (transportId == null) {
+            transportId = "http://schemas.xmlsoap.org/wsdl/soap/http";
+        }
+
+        setTransportId(transportId);
+
+        EndpointInfo ei = new EndpointInfo();
+        ei.setTransportId(transportId);
+        ei.setName(serviceFactory.getService().getName());
+        ei.setAddress(getAddress());
+        ei.setBinding(bindingInfo);
+
+        return ei;
+    }
+
+    protected BindingInfo createBindingInfo() {
+        BindingFactoryManager mgr = getBus().getExtension(BindingFactoryManager.class);
+        String binding = getBindingId();
+        BindingConfiguration bindingConfig = getBindingConfig();
+
+        if (binding == null && bindingConfig != null) {
+            binding = bindingConfig.getBindingId();
+        }
+
+        if (binding == null) {
+            binding = JAXRSBindingFactory.JAXRS_BINDING_ID;
+        }
+
+        try {
+            BindingFactory bindingFactory = mgr.getBindingFactory(binding);
+            setBindingFactory(bindingFactory);
+            return bindingFactory.createBindingInfo(serviceFactory.getService(),
+                                                    binding, bindingConfig);
+        } catch (BusException ex) {
+            ex.printStackTrace();
+            //do nothing
+        }
+        return null;
+    }
+
+    public JAXRSServiceFactoryBean getServiceFactory() {
+        return serviceFactory;
+    }
+
+    public void setServiceFactory(JAXRSServiceFactoryBean serviceFactory) {
+        this.serviceFactory = serviceFactory;
+    }
+    
+    public List<Class> getResourceClasses() {
+        return serviceFactory.getResourceClasses();
+    }
+
+    public void setResourceClasses(List<Class> classes) {
+        serviceFactory.setResourceClasses(classes);
+    }
+
+    public void setResourceClasses(Class... classes) {
+        serviceFactory.setResourceClasses(classes);
+    }
+}

Propchange: incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServerFactoryBean.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServerFactoryBean.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServiceFactoryBean.java
URL: http://svn.apache.org/viewvc/incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServiceFactoryBean.java?rev=573429&view=auto
==============================================================================
--- incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServiceFactoryBean.java (added)
+++ incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServiceFactoryBean.java Thu Sep  6 19:44:44 2007
@@ -0,0 +1,199 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.jaxrs;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.Executor;
+
+import javax.ws.rs.HttpMethod;
+import javax.ws.rs.UriTemplate;
+
+import org.apache.cxf.jaxrs.model.ClassResourceInfo;
+import org.apache.cxf.jaxrs.model.MethodDispatcher;
+import org.apache.cxf.jaxrs.model.OperationResourceInfo;
+import org.apache.cxf.jaxrs.model.URITemplate;
+import org.apache.cxf.service.Service;
+import org.apache.cxf.service.factory.AbstractServiceFactoryBean;
+import org.apache.cxf.service.invoker.Invoker;
+
+
+/**
+ * Build a JAX-RS service model from resource classes.
+ */
+public class JAXRSServiceFactoryBean extends AbstractServiceFactoryBean {
+    
+    //private static final Logger LOG = Logger.getLogger(JAXRSServiceFactoryBean.class.getName());
+    //private static final ResourceBundle BUNDLE = BundleUtils.getBundle(JAXRSServiceFactoryBean.class);
+
+    protected List<ClassResourceInfo> classResourceInfos;
+    protected List<Class> resourceClasses;
+
+    private Invoker invoker;
+    private Executor executor;
+    private Map<String, Object> properties;
+
+    public JAXRSServiceFactoryBean() {
+    }
+
+    @Override
+    public Service create() {
+        initializeServiceModel();
+
+        initializeDefaultInterceptors();
+
+        if (invoker != null) {
+            getService().setInvoker(getInvoker());
+        } else {
+            getService().setInvoker(createInvoker());
+        }
+
+        if (getExecutor() != null) {
+            getService().setExecutor(getExecutor());
+        }
+        if (getDataBinding() != null) {
+            getService().setDataBinding(getDataBinding());
+        }
+
+        return getService();
+    }
+
+    public Executor getExecutor() {
+        return executor;
+    }
+
+    public void setExecutor(Executor executor) {
+        this.executor = executor;
+    }
+
+    public Invoker getInvoker() {
+        return invoker;
+    }
+
+    public void setInvoker(Invoker invoker) {
+        this.invoker = invoker;
+    }
+
+    public List<Class> getResourceClasses() {
+        return resourceClasses;
+    }
+
+    public void setResourceClasses(List<Class> classes) {
+        this.resourceClasses = classes;
+    }
+
+    public void setResourceClasses(Class... classes) {
+        this.resourceClasses = new ArrayList<Class>(Arrays.asList(classes));
+    }
+
+    protected void initializeServiceModel() {
+        classResourceInfos = new ArrayList<ClassResourceInfo>();
+
+        for (Class resourceClass : resourceClasses) {
+            ClassResourceInfo classResourceInfo = createClassResourceInfo(resourceClass);
+            classResourceInfos.add(classResourceInfo);
+        }
+
+        JAXRSServiceImpl service = new JAXRSServiceImpl(classResourceInfos);
+
+        setService(service);
+
+        if (properties != null) {
+            service.putAll(properties);
+        }
+    }
+
+    protected ClassResourceInfo createClassResourceInfo(final Class<?> c) {
+        final UriTemplate annotation = c.getAnnotation(UriTemplate.class);
+        if (annotation == null) {
+            return null;
+        }
+
+        ClassResourceInfo resourceClass = getClassResourceInfo(c);
+
+        MethodDispatcher md = createOperation(c, resourceClass);
+        resourceClass.setMethodDispatcher(md);
+        
+        String annotationValue = annotation.value();
+        if (!annotationValue.startsWith("/")) {
+            annotationValue = "/" + annotationValue;
+        }
+        String rightHandPattern = (resourceClass.hasSubResources())
+            ? URITemplate.SUB_RESOURCE_REGEX_SUFFIX : URITemplate.NONE_SUB_RESOURCE_REGEX_SUFFIX;
+        URITemplate t = new URITemplate(annotationValue, rightHandPattern);
+        resourceClass.setURITemplate(t);
+        
+        return resourceClass;
+    }
+
+    protected ClassResourceInfo getClassResourceInfo(final Class<?> c) {
+        return new ClassResourceInfo(c);
+    }
+
+    protected MethodDispatcher createOperation(Class c, ClassResourceInfo cri) {
+        MethodDispatcher md = new MethodDispatcher();
+        for (Method m : c.getMethods()) {
+            if (m.getAnnotation(UriTemplate.class) != null) {
+                OperationResourceInfo ori = new OperationResourceInfo(m, cri);
+                String uriTemplate = m.getAnnotation(UriTemplate.class).value();
+                if (!uriTemplate.startsWith("/")) {
+                    uriTemplate = "/" + uriTemplate;
+                }
+                if (m.getAnnotation(HttpMethod.class) != null) {
+                    /*
+                     * Sub-resource method, URI template created by concatenating
+                     * the URI template of the resource class with the URI template
+                     * of the method
+                     */ 
+                    ori.setURITemplate(new URITemplate(uriTemplate,
+                                                       URITemplate.NONE_SUB_RESOURCE_REGEX_SUFFIX));
+                    
+                    String httpMethod = m.getAnnotation(HttpMethod.class).value();
+                    ori.setHttpMethod(httpMethod);
+                } else {
+                    //sub-resource locator
+                    cri.setHasSubResources(true);
+                    ori.setURITemplate(new URITemplate(uriTemplate,
+                                                       URITemplate.SUB_RESOURCE_REGEX_SUFFIX));
+                }
+                md.bind(ori, m);
+            } else if (m.getAnnotation(HttpMethod.class) != null) {
+                //Sub-resource method
+                OperationResourceInfo ori = new OperationResourceInfo(m, cri);
+                ori.setURITemplate(new URITemplate("/",
+                                                   URITemplate.NONE_SUB_RESOURCE_REGEX_SUFFIX));
+                
+                String httpMethod = m.getAnnotation(HttpMethod.class).value();
+                ori.setHttpMethod(httpMethod);
+                md.bind(ori, m);               
+            }
+        }
+
+        return md;
+    }
+
+    protected Invoker createInvoker() {
+        return new JAXRSInvoker();
+    }
+
+}

Propchange: incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServiceFactoryBean.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServiceFactoryBean.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServiceImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServiceImpl.java?rev=573429&view=auto
==============================================================================
--- incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServiceImpl.java (added)
+++ incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServiceImpl.java Thu Sep  6 19:44:44 2007
@@ -0,0 +1,120 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.jaxrs;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.Executor;
+
+import javax.xml.namespace.QName;
+
+import org.apache.cxf.configuration.Configurable;
+import org.apache.cxf.databinding.DataBinding;
+import org.apache.cxf.endpoint.Endpoint;
+import org.apache.cxf.interceptor.AbstractAttributedInterceptorProvider;
+import org.apache.cxf.jaxrs.model.ClassResourceInfo;
+import org.apache.cxf.service.Service;
+import org.apache.cxf.service.invoker.Invoker;
+import org.apache.cxf.service.model.EndpointInfo;
+import org.apache.cxf.service.model.ServiceInfo;
+import org.apache.cxf.workqueue.SynchronousExecutor;
+
+public class JAXRSServiceImpl extends AbstractAttributedInterceptorProvider implements Service, Configurable {
+    private List<ClassResourceInfo> classResourceInfos;
+    private DataBinding dataBinding;
+    private Executor executor;
+    private Invoker invoker;
+    private Map<QName, Endpoint> endpoints = new HashMap<QName, Endpoint>();
+    
+    public JAXRSServiceImpl() {
+    }
+
+    public JAXRSServiceImpl(List<ClassResourceInfo> cri) {
+        this.classResourceInfos = cri;
+        executor = SynchronousExecutor.getInstance();    
+    }
+    
+    public String getBeanName() {
+        return getName().toString();
+    }
+
+    public QName getName() {    
+        Class primaryClass = classResourceInfos.get(0).getResourceClass();
+        return new QName("jaxrs", primaryClass.getSimpleName());
+    }
+
+    public List<ClassResourceInfo> getClassResourceInfos() {
+        return classResourceInfos;
+    }
+    
+    public List<ServiceInfo> getServiceInfos() {
+        //NOT IMPLEMENTED
+        return null;
+    }
+    
+    public EndpointInfo getEndpointInfo(QName endpoint) {
+/*        for (ServiceInfo inf : serviceInfos) {
+            EndpointInfo ef = inf.getEndpoint(endpoint);
+            if (ef != null) {
+                return ef;
+            }
+        }
+        return null;*/
+        return null;
+    }
+    
+
+    public Executor getExecutor() {
+        return executor;
+    }
+
+    public void setExecutor(Executor executor) {
+        this.executor = executor;
+    }
+
+    public Invoker getInvoker() {
+        return invoker;
+    }
+
+    public void setInvoker(Invoker invoker) {
+        this.invoker = invoker;
+    }
+
+    public DataBinding getDataBinding() {
+        return dataBinding;
+    }
+
+    public void setDataBinding(DataBinding dataBinding) {
+        this.dataBinding = dataBinding;
+    }
+
+    public Map<QName, Endpoint> getEndpoints() {
+        return endpoints;
+    }
+
+    public void setEndpoints(Map<QName, Endpoint> endpoints) {
+        this.endpoints = endpoints;
+    }
+
+    public void setProperties(Map<String, Object> properties) {
+        this.putAll(properties);
+    }
+}

Propchange: incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServiceImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServiceImpl.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSDispatchInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSDispatchInterceptor.java?rev=573429&view=auto
==============================================================================
--- incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSDispatchInterceptor.java (added)
+++ incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSDispatchInterceptor.java Thu Sep  6 19:44:44 2007
@@ -0,0 +1,217 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.jaxrs.interceptor;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Method;
+import java.lang.reflect.Type;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.ws.rs.HeaderParam;
+import javax.ws.rs.MatrixParam;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.UriParam;
+import javax.ws.rs.core.HttpContext;
+import javax.ws.rs.ext.EntityProvider;
+import javax.ws.rs.ext.ProviderFactory;
+
+import org.apache.cxf.jaxrs.JAXRSServiceImpl;
+import org.apache.cxf.jaxrs.model.ClassResourceInfo;
+import org.apache.cxf.jaxrs.model.OperationResourceInfo;
+import org.apache.cxf.jaxrs.model.URITemplate;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.phase.AbstractPhaseInterceptor;
+import org.apache.cxf.phase.Phase;
+import org.apache.cxf.service.Service;
+
+
+public class JAXRSDispatchInterceptor extends AbstractPhaseInterceptor<Message> {
+
+    public static final String RELATIVE_PATH = "relative.path";
+    //private static final Logger LOG = Logger.getLogger(RESTDispatchInterceptor.class.getName());
+    //private static final ResourceBundle BUNDLE = BundleUtils.getBundle(RESTDispatchInterceptor.class);
+
+    public JAXRSDispatchInterceptor() {
+        super(Phase.PRE_STREAM);
+    }
+
+    public void handleMessage(Message message) {
+        String path = (String)message.get(Message.PATH_INFO);
+        String address = (String)message.get(Message.BASE_PATH);
+        String httpMethod = (String)message.get(Message.HTTP_REQUEST_METHOD);
+
+        if (address.startsWith("http")) {
+            int idx = address.indexOf('/', 7);
+            if (idx != -1) {
+                address = address.substring(idx);
+            }
+        }
+
+        if (path.startsWith(address)) {
+            path = path.substring(address.length());
+            if (!path.startsWith("/")) {
+                path = "/" + path;
+            }
+        }
+
+        if (!path.endsWith("/")) {
+            //path = path.substring(0, path.length() - 1);
+            path = path + "/";
+        }
+        message.put(RELATIVE_PATH, path);
+
+
+        //1. Matching target resource classes and method
+        Service service = message.getExchange().get(Service.class);
+        List<ClassResourceInfo> resources = ((JAXRSServiceImpl)service).getClassResourceInfos();
+
+        Map<String, String> values = new HashMap<String, String>();
+        OperationResourceInfo ori = findTargetResource(resources, path, httpMethod, values);
+
+        if (ori == null) {
+            //throw new Fault(new org.apache.cxf.common.i18n.Message("NO_OP", BUNDLE, method, path));
+        }
+        message.getExchange().put(OperationResourceInfo.class, ori);
+
+
+        //2. Process parameters
+        InputStream is = message.getContent(InputStream.class);
+        List<Object> params = processParameters(ori.getMethod(), path, httpMethod, values, is);
+
+        message.setContent(List.class, params);
+
+    }    
+
+    protected OperationResourceInfo findTargetResource(List<ClassResourceInfo> resources, String path,
+                                                       String httpMethod, Map<String, String> values) {
+        for (ClassResourceInfo resource : resources) {
+            URITemplate uriTemplate = resource.getURITemplate();
+            if (uriTemplate.match(path, values)) {
+                String subResourcePath = values.values().iterator().next();
+                OperationResourceInfo ori = findTargetMethod(resource, subResourcePath, httpMethod, values);
+                if (ori != null) {
+                    return ori;
+                }
+            }
+        }
+        return null;
+    }
+
+    protected OperationResourceInfo findTargetMethod(ClassResourceInfo resource, String path,
+                                                     String httpMethod, Map<String, String> values) {
+        for (OperationResourceInfo ori : resource.getMethodDispatcher().getOperationResourceInfos()) {
+            URITemplate uriTemplate = ori.getURITemplate();
+            if (uriTemplate != null && uriTemplate.match(path, values)) {
+                return ori;
+            } /*
+                 * else { //URITemplate == null means match by default if
+                 * (httpMethod.equalsIgnoreCase(ori.getHttpMethod())) { return
+                 * ori; } }
+                 */
+        }
+        return null;
+    }
+
+    private List<Object> processParameters(Method method, String path, String httpMethod,
+                                           Map<String, String> values, InputStream is) {
+        Class[] parameterTypes = method.getParameterTypes();
+        Type[] genericParameterTypes = method.getGenericParameterTypes();
+        Annotation[][] parameterAnnotations = method.getParameterAnnotations();
+
+        boolean readFromEntityBody = false;
+        if ("PUT".equals(httpMethod) || "POST".equals(httpMethod)) {
+            readFromEntityBody = true;
+        }
+
+        List<Object> params = new ArrayList<Object>(parameterTypes.length);
+
+        for (int i = 0; i < parameterTypes.length; i++) {
+            Object param = processParameter(parameterTypes[i], genericParameterTypes[i],
+                                            parameterAnnotations[i], readFromEntityBody, path, values, is);
+
+            params.add(param);
+        }
+
+        return params;
+    }
+
+    private Object processParameter(Class<?> parameterClass, Type parameterType,
+                                    Annotation[] parameterAnnotations, boolean readFromEntityBody,
+                                    String path, Map<String, String> values, InputStream is) {
+        Object result = null;
+        if (parameterAnnotations == null || parameterAnnotations.length == 0) {
+            if (readFromEntityBody) {
+                result = readFromEntityBody(parameterClass, is);
+            }
+            return result;
+        } 
+
+        Annotation annotation = parameterAnnotations[0];
+        if (annotation.annotationType() == UriParam.class) {
+            result = readFromUriParam((UriParam)annotation, parameterClass, parameterType,
+                                      parameterAnnotations, path, values);
+        } else if (annotation.annotationType() == QueryParam.class) {
+            //TODO
+        } else if (annotation.annotationType() == MatrixParam.class) {
+            //TODO
+        } else if (annotation.annotationType() == HeaderParam.class) {
+            //TODO
+        } else if (annotation.annotationType() == HttpContext.class) {
+            //TODO
+        }
+
+        return result;
+    }
+
+    private Object readFromEntityBody(Class<?> targetTypeClass, InputStream is) {
+        Object result = null;
+        EntityProvider provider = ProviderFactory.getInstance().createEntityProvider(targetTypeClass);
+
+        try {
+            result = provider.readFrom(targetTypeClass, null, null, is);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        
+        return result;
+    }
+
+    private String readFromUriParam(UriParam uriParamAnnotation,
+                                    Class<?> parameter,
+                                    Type parameterType,
+                                    Annotation[] parameterAnnotations,
+                                    String path,
+                                    Map<String, String> values) {
+        String parameterName = uriParamAnnotation.value();
+        if (parameterName == null || parameterName.length() == 0) {
+            // Invalid URI parameter name
+            return null;
+        }
+
+        String result = values.get(parameterName);
+
+        return result;
+    }
+}

Propchange: incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSDispatchInterceptor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSDispatchInterceptor.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java?rev=573429&view=auto
==============================================================================
--- incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java (added)
+++ incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java Thu Sep  6 19:44:44 2007
@@ -0,0 +1,77 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.jaxrs.interceptor;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.List;
+
+import javax.ws.rs.ext.EntityProvider;
+import javax.ws.rs.ext.ProviderFactory;
+
+import org.apache.cxf.interceptor.AbstractOutDatabindingInterceptor;
+import org.apache.cxf.jaxrs.model.OperationResourceInfo;
+import org.apache.cxf.message.Exchange;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.message.MessageContentsList;
+import org.apache.cxf.phase.Phase;
+
+public class JAXRSOutInterceptor extends AbstractOutDatabindingInterceptor {
+
+    public JAXRSOutInterceptor() {
+        super(Phase.MARSHAL);
+    }
+
+    public void handleMessage(Message message) {
+        Exchange exchange = message.getExchange();
+        OperationResourceInfo operation = (OperationResourceInfo)exchange.get(OperationResourceInfo.class
+            .getName());
+
+        if (operation == null) {
+            return;
+        }
+
+        MessageContentsList objs = MessageContentsList.getContentsList(message);
+        if (objs == null || objs.size() == 0) {
+            return;
+        }
+
+        OutputStream out = message.getContent(OutputStream.class);
+        
+        if (objs.get(0) != null) {            
+            Class targetType = objs.get(0).getClass();
+            if (objs.get(0).getClass().isArray()) {
+                targetType = objs.get(0).getClass().getComponentType();
+            } else if (objs.get(0) instanceof List && ((List)objs.get(0)).get(0) != null) {
+                targetType = ((List)objs.get(0)).get(0).getClass();
+                
+            }
+            EntityProvider provider = ProviderFactory.getInstance().createEntityProvider(targetType);
+
+            try {
+                provider.writeTo(objs.get(0), null, out);
+            } catch (IOException e) {
+                e.printStackTrace();
+            }         
+        }
+
+    }
+
+}

Propchange: incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/interceptor/JAXRSOutInterceptor.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/ClassResourceInfo.java
URL: http://svn.apache.org/viewvc/incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/ClassResourceInfo.java?rev=573429&view=auto
==============================================================================
--- incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/ClassResourceInfo.java (added)
+++ incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/ClassResourceInfo.java Thu Sep  6 19:44:44 2007
@@ -0,0 +1,60 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.jaxrs.model;
+
+
+public class ClassResourceInfo {
+    private Class resourceClass;
+    private URITemplate uriTemplate;
+    private MethodDispatcher methodDispatcher;
+    private boolean hasSubResources;
+
+    public ClassResourceInfo(Class theResourceClass) {
+        resourceClass = theResourceClass;
+    }
+
+    public Class getResourceClass() {
+        return resourceClass;
+    }
+
+    public URITemplate getURITemplate() {
+        return uriTemplate;
+    }
+
+    public void setURITemplate(URITemplate u) {
+        uriTemplate = u;
+    }
+
+    public MethodDispatcher getMethodDispatcher() {
+        return methodDispatcher;
+    }
+
+    public void setMethodDispatcher(MethodDispatcher md) {
+        methodDispatcher = md;
+    }
+
+    public boolean hasSubResources() {
+        return hasSubResources;
+    }
+    
+    public void setHasSubResources(boolean flag) {
+        hasSubResources = flag;
+    }
+}

Propchange: incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/ClassResourceInfo.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/ClassResourceInfo.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/MethodDispatcher.java
URL: http://svn.apache.org/viewvc/incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/MethodDispatcher.java?rev=573429&view=auto
==============================================================================
--- incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/MethodDispatcher.java (added)
+++ incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/MethodDispatcher.java Thu Sep  6 19:44:44 2007
@@ -0,0 +1,55 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.cxf.jaxrs.model;
+
+import java.lang.reflect.Method;
+
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+
+
+public class MethodDispatcher {
+    private Map<OperationResourceInfo, Method> opToMethod = 
+        new ConcurrentHashMap<OperationResourceInfo, Method>();
+    private Map<Method, OperationResourceInfo> methodToOp = 
+        new ConcurrentHashMap<Method, OperationResourceInfo>();
+
+    public void bind(OperationResourceInfo o, Method... methods) {
+        Method primary = methods[0];
+
+        for (Method m : methods) {
+            methodToOp.put(m, o);
+        }
+
+        opToMethod.put(o, primary);
+    }
+
+    public OperationResourceInfo getOperationResourceInfo(Method method) {
+        return methodToOp.get(method);
+    }
+
+    public Set<OperationResourceInfo> getOperationResourceInfos() {
+        return opToMethod.keySet();
+    }
+
+    public Method getMethod(OperationResourceInfo op) {
+        return opToMethod.get(op);
+    }
+}

Propchange: incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/MethodDispatcher.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/MethodDispatcher.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/OperationResourceInfo.java
URL: http://svn.apache.org/viewvc/incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/OperationResourceInfo.java?rev=573429&view=auto
==============================================================================
--- incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/OperationResourceInfo.java (added)
+++ incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/OperationResourceInfo.java Thu Sep  6 19:44:44 2007
@@ -0,0 +1,91 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.jaxrs.model;
+
+import java.lang.reflect.Method;
+import java.util.List;
+
+import javax.ws.rs.ext.EntityProvider;
+
+import org.apache.cxf.jaxrs.provider.JAXBElementProvider;
+
+public class OperationResourceInfo {
+    private URITemplate uriTemplate;
+    private ClassResourceInfo classResourceInfo;
+    private Method method;
+    private List<Class> parameterTypeList;
+    private List<Class> annotatedParameterTypeList;
+    private List<EntityProvider> entityProviderList;
+    private String httpMethod;
+
+    public OperationResourceInfo(Method m, ClassResourceInfo cri) {
+        method = m;
+        classResourceInfo = cri;
+    }
+
+    public URITemplate getURITemplate() {
+        return uriTemplate;
+    }
+
+    public void setURITemplate(URITemplate u) {
+        uriTemplate = u;
+    }
+
+    public ClassResourceInfo getClassResourceInfo() {
+        return classResourceInfo;
+    }
+
+    public void setClassResourceInfo(ClassResourceInfo c) {
+        classResourceInfo = c;
+    }
+
+    public Method getMethod() {
+        return method;
+    }
+
+    public void setMethod(Method m) {
+        method = m;
+    }
+
+    public String getHttpMethod() {
+        return httpMethod;
+    }
+
+    public void setHttpMethod(String m) {
+        httpMethod = m;
+    }
+
+    public List<Class> getParameterTypeList() {
+        return parameterTypeList;
+    }
+
+    public List<Class> getAnnotatedParameterTypeList() {
+        return annotatedParameterTypeList;
+    }
+
+    public List<EntityProvider> getEntityProviderList() {
+        return entityProviderList;
+    }
+
+    protected EntityProvider findEntityProvider() {
+        return new JAXBElementProvider();
+
+    }
+}

Propchange: incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/OperationResourceInfo.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/OperationResourceInfo.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/URITemplate.java
URL: http://svn.apache.org/viewvc/incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/URITemplate.java?rev=573429&view=auto
==============================================================================
--- incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/URITemplate.java (added)
+++ incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/URITemplate.java Thu Sep  6 19:44:44 2007
@@ -0,0 +1,157 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.jaxrs.model;
+
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public final class URITemplate {
+    /**
+     * Regex for sub-resource: For each resource class compute a regular
+     * expression from its URI template, If the resource class has sub-resources
+     * then append ¡®(/.*)?¡¯ to the resulting regular expression.
+     */
+    public static final String SUB_RESOURCE_REGEX_SUFFIX = "(/.*)?";
+
+    /**
+     * Regex for none sub-resource: For each resource class compute a regular
+     * expression from its URI template, If the resource class has no
+     * sub-resources then append ¡®(/)?¡¯ to the resulting regular expression.
+     */
+    public static final String NONE_SUB_RESOURCE_REGEX_SUFFIX = "(/)?";
+    
+    /**
+     * The regular expression for matching URI templates and names.
+     */
+    private static final Pattern TEMPLATE_NAMES_PATTERN = Pattern.compile("\\{([\\w-\\._~]+?)\\}");
+
+    /**
+     * A URI template is converted into a regular expression by substituting
+     * ¡®(.*?)¡¯ for each occurrence of {\([w- 14 \. ]+?\)} within the URL
+     * template
+     */
+    private static final String URITEMPLATE_REGEX = "(.*?)";
+
+    private final String template;
+    private final String regexSuffix;
+    private final boolean endsWithSlash;
+    private final List<String> templateVariables;
+    private final String templateRegex;
+    private final Pattern templateRegexPattern;
+
+    private URITemplate() {
+        this.template = "";
+        this.regexSuffix = null;
+        this.endsWithSlash = false;
+        this.templateVariables = Collections.emptyList();
+        this.templateRegex = "";
+        this.templateRegexPattern = null;
+    }
+
+    public URITemplate(String theTemplate) {
+        this(theTemplate, null);
+    }
+    
+    public URITemplate(String theTemplate, String theRegexSuffix) {
+        this.template = theTemplate;
+        this.regexSuffix = theRegexSuffix;
+
+        StringBuilder stringBuilder = new StringBuilder();
+        List<String> names = new ArrayList<String>();
+
+        // compute a regular expression from URI template
+        Matcher matcher = TEMPLATE_NAMES_PATTERN.matcher(template);
+        int i = 0;
+        while (matcher.find()) {
+            copyURITemplateCharacters(template, i, matcher.start(), stringBuilder);
+            stringBuilder.append(URITEMPLATE_REGEX);
+            names.add(matcher.group(1));
+            i = matcher.end();
+        }
+        copyURITemplateCharacters(template, i, template.length(), stringBuilder);
+
+        templateVariables = Collections.unmodifiableList(names);
+
+        int endPos = stringBuilder.length() - 1;
+        this.endsWithSlash = (endPos >= 0) ? stringBuilder.charAt(endPos) == '/' : false;
+        if (regexSuffix != null) {
+            if (endsWithSlash) {
+                stringBuilder.deleteCharAt(endPos);
+            }
+            stringBuilder.append(regexSuffix);
+        }
+
+        templateRegex = stringBuilder.toString();
+        templateRegexPattern = Pattern.compile(templateRegex);
+    }
+
+    private void copyURITemplateCharacters(String templateValue, int start, int end, StringBuilder b) {
+        for (int i = start; i < end; i++) {
+            char c = templateValue.charAt(i);
+            if (c == '?') {
+                b.append("\\?");
+            } else {
+                b.append(c);
+            }
+        }
+    }
+
+    public boolean match(String uri, Map<String, String> templateVariableToValue) {
+        templateVariableToValue.clear();
+
+        if (uri == null) {
+            return (templateRegexPattern == null) ? true : false;
+        }
+
+        if (templateRegexPattern == null) {
+            return false;
+        }
+
+        Matcher m = templateRegexPattern.matcher(uri);
+        if (!m.matches()) {
+            return false;
+        }
+
+        // Assign the matched template values to template variables
+        int i = 1;
+        for (String name : templateVariables) {
+            String previousValue = templateVariableToValue.get(name);
+            String currentValue = m.group(i++);
+
+            if (previousValue != null && !previousValue.equals(currentValue)) {
+                return false;
+            }
+
+            templateVariableToValue.put(name, currentValue);
+        }
+
+        // Assign the right hand side value to the null key
+        if (regexSuffix != null) {
+            templateVariableToValue.put(null, m.group(i));
+        }
+
+        return true;
+    }
+}

Propchange: incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/URITemplate.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/URITemplate.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java
URL: http://svn.apache.org/viewvc/incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java?rev=573429&view=auto
==============================================================================
--- incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java (added)
+++ incubator/cxf/branches/jliu/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java Thu Sep  6 19:44:44 2007
@@ -0,0 +1,103 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.cxf.jaxrs.provider;
+
+
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.lang.reflect.Array;
+import java.util.List;
+import java.util.Map;
+import java.util.WeakHashMap;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.ext.EntityProvider;
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Marshaller;
+import javax.xml.bind.Unmarshaller;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.namespace.QName;
+
+public final class JAXBElementProvider implements EntityProvider<Object>  {
+
+    static Map<Class, JAXBContext> jaxbContexts = new WeakHashMap<Class, JAXBContext>();
+
+    public boolean supports(Class<?> type) {
+        return type.getAnnotation(XmlRootElement.class) != null;
+    }
+
+    public Object readFrom(Class<Object> type, String mediaType, MultivaluedMap<String, String> headers,
+                           InputStream is) {
+        try {
+            JAXBContext context = getJAXBContext(type);
+            Unmarshaller unmarshaller = context.createUnmarshaller();
+            return unmarshaller.unmarshal(is);
+        } catch (JAXBException e) {
+            e.printStackTrace();         
+        }
+
+        return null;
+    }
+
+    public void writeTo(Object obj, MultivaluedMap<String, Object> headers, OutputStream os) {
+        try {
+            if (obj.getClass().isArray() || obj instanceof List) {
+                Class<?> cls = null;
+                Object objArray;
+                if (obj instanceof List) {
+                    List l = (List)obj;
+                    objArray = l.toArray(new Object[l.size()]);
+                    cls = null;
+                } else {
+                    objArray = obj;
+                    cls = objArray.getClass().getComponentType();
+                }
+                int len = Array.getLength(objArray);
+                for (int x = 0; x < len; x++) {
+                    Object o = Array.get(objArray, x);
+                    JAXBContext context = getJAXBContext(o.getClass());
+                    Marshaller marshaller = context.createMarshaller();
+                    marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
+                    marshaller.marshal(new JAXBElement(new QName(null, o.getClass().getSimpleName()),
+                                                       cls == null ? o.getClass() : cls, o), os);
+                }
+            } else {
+                JAXBContext context = getJAXBContext(obj.getClass());
+                Marshaller marshaller = context.createMarshaller();
+                marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
+                marshaller.marshal(obj, os);
+            }
+        } catch (JAXBException e) {
+            e.printStackTrace();
+        }
+    }
+
+    private JAXBContext getJAXBContext(Class type) throws JAXBException {
+        synchronized (jaxbContexts) {
+            JAXBContext context = jaxbContexts.get(type);
+            if (context == null) {
+                context = JAXBContext.newInstance(type);
+                jaxbContexts.put(type, context);
+            }
+            return context;
+        }
+    }
+}



Mime
View raw message