You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by jl...@apache.org on 2007/10/31 11:12:22 UTC

svn commit: r590613 - in /incubator/cxf/trunk: rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/lifecycle/ rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/ rt/frontend/jaxws/src/main/...

Author: jliu
Date: Wed Oct 31 03:12:17 2007
New Revision: 590613

URL: http://svn.apache.org/viewvc?rev=590613&view=rev
Log:
more lifecycle supports in JSR-311 impl. CXF-1151. now support setting lifecycle through APIs or through spring configuration, will add annotation support later.
 

Added:
    incubator/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/lifecycle/
    incubator/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/lifecycle/PerRequestResourceProvider.java   (with props)
    incubator/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/lifecycle/ResourceProvider.java   (with props)
    incubator/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/lifecycle/SingletonResourceProvider.java   (with props)
    incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/BookServerFromResourceInstance.java   (with props)
    incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerFromResourceInstanceBookTest.java   (with props)
Modified:
    incubator/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java
    incubator/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServerFactoryBean.java
    incubator/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServiceFactoryBean.java
    incubator/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/ClassResourceInfo.java
    incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WebFaultOutInterceptor.java
    incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/BookServer.java
    incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java

Modified: incubator/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java?rev=590613&r1=590612&r2=590613&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSInvoker.java Wed Oct 31 03:12:17 2007
@@ -57,10 +57,6 @@
         return invoke(exchange, resourceObject, m, params);
     }
 
-    
-    // REVISIT: Not sure how to deal with Resource class life cycle. The current
-    // spec suggests two models, per-request and singleton, and it is the
-    // reponsibility of JSR-311 runtime to create resource instances.
     public Object getServiceObject(Exchange exchange) {
         Object serviceObject = null;
         
@@ -77,11 +73,7 @@
         }
         
         if (serviceObject == null) {
-            try {
-                serviceObject = classResourceInfo.getResourceClass().newInstance();
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
+            serviceObject = classResourceInfo.getResourceProvider().getInstance();
         }
         
         return serviceObject;

Modified: incubator/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServerFactoryBean.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServerFactoryBean.java?rev=590613&r1=590612&r2=590613&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServerFactoryBean.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServerFactoryBean.java Wed Oct 31 03:12:17 2007
@@ -34,6 +34,7 @@
 import org.apache.cxf.endpoint.Server;
 import org.apache.cxf.endpoint.ServerImpl;
 import org.apache.cxf.feature.AbstractFeature;
+import org.apache.cxf.jaxrs.lifecycle.ResourceProvider;
 import org.apache.cxf.service.Service;
 import org.apache.cxf.service.factory.ServiceConstructionException;
 import org.apache.cxf.service.invoker.Invoker;
@@ -62,7 +63,6 @@
     private JAXRSServiceFactoryBean serviceFactory;
     private List<Object> serviceBeans;
 
-
     public JAXRSServerFactoryBean() {
         this(new JAXRSServiceFactoryBean());
         doInit = true;
@@ -231,17 +231,30 @@
     }
     
     /**
-     * Set the backing service bean. If this is set a BeanInvoker is created for
-     * the provided bean.
+     * Set the backing service bean. If this is set, JAX-RS runtimi will not be
+     * responsible for the lifecycle of resource classes.
      * 
      * @return
      */
     public void setServiceBeans(Object... beans) {
         this.serviceBeans = new ArrayList<Object>(Arrays.asList(beans));
+        Class[] classes = new Class[beans.length];
+        for (int i = 0; i < beans.length; i++) {
+            classes[i] = beans[i].getClass();
+        }
+        serviceFactory.setResourceClasses(classes);
     }
     
     public void setServiceBeans(List<Object> beans) {
         this.serviceBeans = beans;
+        List<Class> classes = new ArrayList<Class>();
+        for (Object bean : beans) {
+            classes.add(bean.getClass());
+        }
+        serviceFactory.setResourceClasses(classes);
+    }
+    
+    public void setResourceProvider(Class c, ResourceProvider rp) {
+        serviceFactory.setResourceProvider(c, rp);
     }
-
 }

Modified: incubator/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServiceFactoryBean.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServiceFactoryBean.java?rev=590613&r1=590612&r2=590613&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServiceFactoryBean.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/JAXRSServiceFactoryBean.java Wed Oct 31 03:12:17 2007
@@ -22,6 +22,7 @@
 import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.Executor;
@@ -29,6 +30,8 @@
 import javax.ws.rs.HttpMethod;
 import javax.ws.rs.UriTemplate;
 
+import org.apache.cxf.jaxrs.lifecycle.PerRequestResourceProvider;
+import org.apache.cxf.jaxrs.lifecycle.ResourceProvider;
 import org.apache.cxf.jaxrs.model.ClassResourceInfo;
 import org.apache.cxf.jaxrs.model.MethodDispatcher;
 import org.apache.cxf.jaxrs.model.OperationResourceInfo;
@@ -48,7 +51,8 @@
 
     protected List<ClassResourceInfo> classResourceInfos;
     protected List<Class> resourceClasses;
-
+    protected Map<Class, ResourceProvider> resourceProviders = new HashMap<Class, ResourceProvider>();
+    
     private Invoker invoker;
     private Executor executor;
     private Map<String, Object> properties;
@@ -105,7 +109,11 @@
     public void setResourceClasses(Class... classes) {
         this.resourceClasses = new ArrayList<Class>(Arrays.asList(classes));
     }
-
+    
+    public void setResourceProvider(Class c, ResourceProvider rp) {
+        resourceProviders.put(c, rp);
+    }
+    
     protected void initializeServiceModel() {
         classResourceInfos = new ArrayList<ClassResourceInfo>();
 
@@ -124,26 +132,38 @@
     }
 
     protected ClassResourceInfo createClassResourceInfo(final Class<?> c) {
-        final UriTemplate annotation = c.getAnnotation(UriTemplate.class);
-        if (annotation == null) {
+        UriTemplate uriTemplateAnnotation = c.getAnnotation(UriTemplate.class);
+        if (uriTemplateAnnotation == null) {
             return null;
         }
 
-        ClassResourceInfo resourceClass = getClassResourceInfo(c);
+        ClassResourceInfo classResourceInfo = getClassResourceInfo(c);
 
-        MethodDispatcher md = createOperation(c, resourceClass);
-        resourceClass.setMethodDispatcher(md);
+        MethodDispatcher md = createOperation(c, classResourceInfo);
+        classResourceInfo.setMethodDispatcher(md);
         
-        String annotationValue = annotation.value();
+        String annotationValue = uriTemplateAnnotation.value();
         if (!annotationValue.startsWith("/")) {
             annotationValue = "/" + annotationValue;
         }
-        String rightHandPattern = (resourceClass.hasSubResources())
+        String rightHandPattern = (classResourceInfo.hasSubResources())
             ? URITemplate.SUB_RESOURCE_REGEX_SUFFIX : URITemplate.NONE_SUB_RESOURCE_REGEX_SUFFIX;
         URITemplate t = new URITemplate(annotationValue, rightHandPattern);
-        resourceClass.setURITemplate(t);
+        classResourceInfo.setURITemplate(t);
+        
+        //TODO: Using information from annotation to determine which lifecycle provider to use
+        ResourceProvider rp = resourceProviders.get(c);
+        if (rp != null) {
+            rp.setResourceClass(c);
+            classResourceInfo.setResourceProvider(rp);
+        } else {
+            //default lifecycle is per-request
+            rp = new PerRequestResourceProvider();
+            rp.setResourceClass(c);
+            classResourceInfo.setResourceProvider(rp);  
+        }
         
-        return resourceClass;
+        return classResourceInfo;
     }
 
     protected ClassResourceInfo getClassResourceInfo(final Class<?> c) {

Added: incubator/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/lifecycle/PerRequestResourceProvider.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/lifecycle/PerRequestResourceProvider.java?rev=590613&view=auto
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/lifecycle/PerRequestResourceProvider.java (added)
+++ incubator/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/lifecycle/PerRequestResourceProvider.java Wed Oct 31 03:12:17 2007
@@ -0,0 +1,43 @@
+/**
+ * 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.lifecycle;
+
+public class PerRequestResourceProvider implements ResourceProvider {
+    private Class<?> resourceClass;
+   
+    public PerRequestResourceProvider() {
+    }
+    
+    public void setResourceClass(Class<?> clazz) {
+        this.resourceClass = clazz;        
+    }
+
+    public Object getInstance() {  
+        Object resourceInstance = null;
+        try {
+            resourceInstance = resourceClass.newInstance();
+        } catch (InstantiationException ex) {
+            //TODO
+        } catch (IllegalAccessException ex) {
+            //TODO
+        }        
+        return resourceInstance;
+    }
+}

Propchange: incubator/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/lifecycle/PerRequestResourceProvider.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/lifecycle/PerRequestResourceProvider.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/lifecycle/ResourceProvider.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/lifecycle/ResourceProvider.java?rev=590613&view=auto
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/lifecycle/ResourceProvider.java (added)
+++ incubator/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/lifecycle/ResourceProvider.java Wed Oct 31 03:12:17 2007
@@ -0,0 +1,26 @@
+/**
+ * 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.lifecycle;
+
+public interface ResourceProvider {
+
+    Object getInstance();
+    void setResourceClass(Class<?> clazz);
+}

Propchange: incubator/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/lifecycle/ResourceProvider.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/lifecycle/ResourceProvider.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/lifecycle/SingletonResourceProvider.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/lifecycle/SingletonResourceProvider.java?rev=590613&view=auto
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/lifecycle/SingletonResourceProvider.java (added)
+++ incubator/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/lifecycle/SingletonResourceProvider.java Wed Oct 31 03:12:17 2007
@@ -0,0 +1,47 @@
+/**
+ * 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.lifecycle;
+
+public class SingletonResourceProvider implements ResourceProvider {
+    private Class<?> resourceClass;
+    private Object resourceInstance;
+    
+    public SingletonResourceProvider() {
+    }
+    
+    public void setResourceClass(Class<?> clazz) {
+        this.resourceClass = clazz;        
+    }
+
+    public Object getInstance() {
+        if (resourceInstance != null) {
+            return resourceInstance;
+        }
+        
+        try {
+            resourceInstance = resourceClass.newInstance();
+        } catch (InstantiationException ex) {
+            //TODO
+        } catch (IllegalAccessException ex) {
+            //TODO
+        }        
+        return resourceInstance;
+    }
+}

Propchange: incubator/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/lifecycle/SingletonResourceProvider.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/lifecycle/SingletonResourceProvider.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/ClassResourceInfo.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/ClassResourceInfo.java?rev=590613&r1=590612&r2=590613&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/ClassResourceInfo.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/ClassResourceInfo.java Wed Oct 31 03:12:17 2007
@@ -19,12 +19,14 @@
 
 package org.apache.cxf.jaxrs.model;
 
+import org.apache.cxf.jaxrs.lifecycle.ResourceProvider;
 
 public class ClassResourceInfo {
     private Class resourceClass;
     private URITemplate uriTemplate;
     private MethodDispatcher methodDispatcher;
     private boolean hasSubResources;
+    private ResourceProvider resourceProvider;
 
     public ClassResourceInfo(Class theResourceClass) {
         resourceClass = theResourceClass;
@@ -57,4 +59,13 @@
     public void setHasSubResources(boolean flag) {
         hasSubResources = flag;
     }
+    
+
+    public ResourceProvider getResourceProvider() {
+        return resourceProvider;
+    }
+
+    public void setResourceProvider(ResourceProvider rp) {
+        resourceProvider = rp;
+    }    
 }

Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WebFaultOutInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WebFaultOutInterceptor.java?rev=590613&r1=590612&r2=590613&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WebFaultOutInterceptor.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WebFaultOutInterceptor.java Wed Oct 31 03:12:17 2007
@@ -36,7 +36,6 @@
 import org.apache.cxf.databinding.DataWriter;
 import org.apache.cxf.interceptor.Fault;
 import org.apache.cxf.interceptor.FaultOutInterceptor;
-import org.apache.cxf.jaxws.support.JaxWsServiceConfiguration;
 import org.apache.cxf.message.FaultMode;
 import org.apache.cxf.message.Message;
 import org.apache.cxf.service.Service;
@@ -48,7 +47,7 @@
 public class WebFaultOutInterceptor extends FaultOutInterceptor {
 
     private static final Logger LOG = LogUtils.getL7dLogger(WebFaultOutInterceptor.class);
-    private static final ResourceBundle BUNDLE = BundleUtils.getBundle(JaxWsServiceConfiguration.class);
+    private static final ResourceBundle BUNDLE = BundleUtils.getBundle(WebFaultOutInterceptor.class);
 
     public WebFaultOutInterceptor() {
         super();

Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/BookServer.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/BookServer.java?rev=590613&r1=590612&r2=590613&view=diff
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/BookServer.java (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/BookServer.java Wed Oct 31 03:12:17 2007
@@ -22,15 +22,16 @@
 
 import org.apache.cxf.jaxrs.JAXRSBindingFactory;
 import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;
+import org.apache.cxf.jaxrs.lifecycle.SingletonResourceProvider;
 import org.apache.cxf.testutil.common.AbstractBusTestServerBase;
     
 public class BookServer extends AbstractBusTestServerBase {
 
     protected void run() {
         JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean();
-        BookStore bs = new BookStore();
-        sf.setServiceBeans(bs);
         sf.setResourceClasses(BookStore.class);
+        //default lifecycle is per-request, change it to singleton
+        sf.setResourceProvider(BookStore.class, new SingletonResourceProvider());
         sf.setBindingId(JAXRSBindingFactory.JAXRS_BINDING_ID);
         sf.setAddress("http://localhost:9080/");
 

Added: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/BookServerFromResourceInstance.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/BookServerFromResourceInstance.java?rev=590613&view=auto
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/BookServerFromResourceInstance.java (added)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/BookServerFromResourceInstance.java Wed Oct 31 03:12:17 2007
@@ -0,0 +1,50 @@
+/**
+ * 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.systest.jaxrs;
+
+
+import org.apache.cxf.jaxrs.JAXRSBindingFactory;
+import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;
+import org.apache.cxf.testutil.common.AbstractBusTestServerBase;
+    
+public class BookServerFromResourceInstance extends AbstractBusTestServerBase {
+
+    protected void run() {
+        JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean();
+        BookStore bs = new BookStore();
+        sf.setServiceBeans(bs);
+        sf.setBindingId(JAXRSBindingFactory.JAXRS_BINDING_ID);
+        sf.setAddress("http://localhost:9080/");
+
+        sf.create();        
+    }
+
+    public static void main(String[] args) {
+        try {
+            BookServer s = new BookServer();
+            s.start();
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            System.exit(-1);
+        } finally {
+            System.out.println("done!");
+        }
+    }
+}

Propchange: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/BookServerFromResourceInstance.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/BookServerFromResourceInstance.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java?rev=590613&r1=590612&r2=590613&view=diff
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java Wed Oct 31 03:12:17 2007
@@ -23,7 +23,6 @@
 import java.io.InputStream;
 import java.net.URL;
 
-
 import org.apache.commons.httpclient.HttpClient;
 import org.apache.commons.httpclient.methods.FileRequestEntity;
 import org.apache.commons.httpclient.methods.PostMethod;
@@ -34,7 +33,6 @@
 import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase;
 import org.junit.BeforeClass;
 import org.junit.Test;
-
 
 public class JAXRSClientServerBookTest extends AbstractBusClientServerTestBase {
 

Added: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerFromResourceInstanceBookTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerFromResourceInstanceBookTest.java?rev=590613&view=auto
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerFromResourceInstanceBookTest.java (added)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerFromResourceInstanceBookTest.java Wed Oct 31 03:12:17 2007
@@ -0,0 +1,62 @@
+/**
+ * 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.systest.jaxrs;
+
+import java.io.InputStream;
+import java.net.URL;
+
+import org.apache.cxf.helpers.IOUtils;
+import org.apache.cxf.io.CachedOutputStream;
+import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class JAXRSClientServerFromResourceInstanceBookTest extends AbstractBusClientServerTestBase {
+
+    @BeforeClass
+    public static void startServers() throws Exception {
+        assertTrue("server did not launch correctly", launchServer(BookServerFromResourceInstance.class));
+    }
+    
+    @Test
+    public void testGetBook123() throws Exception {
+        
+        String endpointAddress =
+            "http://localhost:9080/bookstore/books/123"; 
+        URL url = new URL(endpointAddress);
+        InputStream in = url.openStream();
+        assertNotNull(in);           
+
+        InputStream expected = getClass()
+            .getResourceAsStream("resources/expected_get_book123.txt");
+
+        assertEquals(getStringFromInputStream(expected), getStringFromInputStream(in)); 
+    }
+
+    private String getStringFromInputStream(InputStream in) throws Exception {        
+        CachedOutputStream bos = new CachedOutputStream();
+        IOUtils.copy(in, bos);
+        in.close();
+        bos.close();
+        //System.out.println(bos.getOut().toString());        
+        return bos.getOut().toString();        
+    }
+
+}

Propchange: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerFromResourceInstanceBookTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerFromResourceInstanceBookTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date