You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by se...@apache.org on 2009/06/20 18:45:26 UTC

svn commit: r786854 - in /cxf/dosgi/trunk: dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/ samples/greeter_rest/impl/src/main/java/org/apache/cxf/dosgi/samples/greeter/impl/rest/ samples/greeter_rest/interface/src/main/java/org/apache/cxf/...

Author: sergeyb
Date: Sat Jun 20 16:45:26 2009
New Revision: 786854

URL: http://svn.apache.org/viewvc?rev=786854&view=rev
Log:
Support for annotation-free jaxrs services (will remove demo comments and add system test asap)

Added:
    cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/JaxRSUtils.java   (with props)
    cxf/dosgi/trunk/samples/greeter_rest/impl/src/main/java/org/apache/cxf/dosgi/samples/greeter/impl/rest/GreeterServiceImpl2.java   (with props)
    cxf/dosgi/trunk/samples/greeter_rest/interface/src/main/java/org/apache/cxf/dosgi/samples/greeter/rest/GreeterService2.java   (with props)
    cxf/dosgi/trunk/samples/greeter_rest/interface/src/main/resources/
    cxf/dosgi/trunk/samples/greeter_rest/interface/src/main/resources/OSGI-INF/
    cxf/dosgi/trunk/samples/greeter_rest/interface/src/main/resources/OSGI-INF/cxf/
    cxf/dosgi/trunk/samples/greeter_rest/interface/src/main/resources/OSGI-INF/cxf/jaxrs/
    cxf/dosgi/trunk/samples/greeter_rest/interface/src/main/resources/OSGI-INF/cxf/jaxrs/GreeterService2-model.xml   (with props)
Modified:
    cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/JaxRSHttpServiceConfigurationTypeHandler.java
    cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/JaxRSPojoConfigurationTypeHandler.java
    cxf/dosgi/trunk/samples/greeter_rest/impl/src/main/java/org/apache/cxf/dosgi/samples/greeter/impl/rest/Activator.java

Modified: cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/JaxRSHttpServiceConfigurationTypeHandler.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/JaxRSHttpServiceConfigurationTypeHandler.java?rev=786854&r1=786853&r2=786854&view=diff
==============================================================================
--- cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/JaxRSHttpServiceConfigurationTypeHandler.java (original)
+++ cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/JaxRSHttpServiceConfigurationTypeHandler.java Sat Jun 20 16:45:26 2009
@@ -19,6 +19,7 @@
 package org.apache.cxf.dosgi.dsw.handlers;
 
 import java.util.Hashtable;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.CopyOnWriteArraySet;
@@ -31,6 +32,7 @@
 import org.apache.cxf.endpoint.Server;
 import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;
 import org.apache.cxf.jaxrs.lifecycle.SingletonResourceProvider;
+import org.apache.cxf.jaxrs.model.UserResource;
 import org.apache.cxf.transport.servlet.CXFNonSpringServlet;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceException;
@@ -71,11 +73,19 @@
         }        
         Bus bus = cxf.getBus();
         JAXRSServerFactoryBean factory = new JAXRSServerFactoryBean();
-        factory.setServiceClass(iClass);
-        factory.setAddress("/");
-        factory.setResourceProvider(iClass, new SingletonResourceProvider(serviceBean));
         factory.setBus(bus);
         
+        List<UserResource> resources = JaxRSUtils.getModel(callingContext, iClass);
+        if (resources != null) {
+        	factory.setModelBeansWithServiceClass(resources, iClass);
+        	factory.setServiceBeans(serviceBean);
+        } else {
+            factory.setServiceClass(iClass);
+            factory.setResourceProvider(iClass, new SingletonResourceProvider(serviceBean));
+        }
+        
+        factory.setAddress("/");
+        
         String address = constructAddress(dswContext, contextRoot);
         
         ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader();

Modified: cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/JaxRSPojoConfigurationTypeHandler.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/JaxRSPojoConfigurationTypeHandler.java?rev=786854&r1=786853&r2=786854&view=diff
==============================================================================
--- cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/JaxRSPojoConfigurationTypeHandler.java (original)
+++ cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/JaxRSPojoConfigurationTypeHandler.java Sat Jun 20 16:45:26 2009
@@ -33,6 +33,7 @@
 import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;
 import org.apache.cxf.jaxrs.client.JAXRSClientFactoryBean;
 import org.apache.cxf.jaxrs.lifecycle.SingletonResourceProvider;
+import org.apache.cxf.jaxrs.model.UserResource;
 import org.apache.cxf.jaxrs.provider.AegisElementProvider;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
@@ -66,7 +67,13 @@
       try {
     	  JAXRSClientFactoryBean bean = new JAXRSClientFactoryBean();
     	  bean.setAddress(address);
-    	  bean.setServiceClass(iClass);
+    	  
+    	  List<UserResource> resources = JaxRSUtils.getModel(callingContext, iClass);
+          if (resources != null) {
+          	  bean.setModelBeansWithServiceClass(resources, iClass);
+          } else {
+              bean.setServiceClass(iClass);
+          }
     	  if (!"jaxb".equals(sd.getProperty(Constants.RS_DATABINDING_PROP_KEY))) {
     	      bean.setProvider(new AegisElementProvider());
     	  }
@@ -99,9 +106,18 @@
             + " endpoint from CXF PublishHook, address is " + address);
         
         JAXRSServerFactoryBean factory = new JAXRSServerFactoryBean();
-        factory.setServiceClass(iClass);
+        
+        List<UserResource> resources = JaxRSUtils.getModel(callingContext, iClass);
+        if (resources != null) {
+        	factory.setModelBeansWithServiceClass(resources, iClass);
+        	factory.setServiceBeans(serviceBean);
+        } else {
+            factory.setServiceClass(iClass);
+            factory.setResourceProvider(iClass, new SingletonResourceProvider(serviceBean));
+        }
+        
         factory.setAddress(address);
-        factory.setResourceProvider(iClass, new SingletonResourceProvider(serviceBean));
+        
         if (!"jaxb".equals(sd.getProperty(Constants.RS_DATABINDING_PROP_KEY))) {
 	        List<Object> providers = new ArrayList<Object>(); 
 	        providers.add(new AegisElementProvider());
@@ -136,4 +152,6 @@
         }
         return address;
     }
+    
+    
 }

Added: cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/JaxRSUtils.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/JaxRSUtils.java?rev=786854&view=auto
==============================================================================
--- cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/JaxRSUtils.java (added)
+++ cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/JaxRSUtils.java Sat Jun 20 16:45:26 2009
@@ -0,0 +1,66 @@
+/** 
+  * 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.dosgi.dsw.handlers;
+
+import java.io.InputStream;
+import java.net.URL;
+import java.util.List;
+import java.util.logging.Logger;
+
+import org.apache.cxf.jaxrs.model.UserResource;
+import org.apache.cxf.jaxrs.utils.ResourceUtils;
+import org.osgi.framework.BundleContext;
+
+public class JaxRSUtils {
+
+	private static final Logger LOG = Logger.getLogger(JaxRSUtils.class.getName());
+	
+	public final static String MODEL_FOLDER = "/OSGI-INF/cxf/jaxrs/";
+	public final static String DEFAULT_MODEL = "/OSGI-INF/cxf/jaxrs/model.xml";
+	
+	public static List<UserResource> getModel(BundleContext callingContext, Class<?> iClass) {
+		String classModel = MODEL_FOLDER + iClass.getSimpleName() + "-model.xml";
+		List<UserResource> list = getModel(callingContext, iClass, classModel);
+		return list != null ? list : getModel(callingContext, iClass, DEFAULT_MODEL);
+    }
+	
+	public static List<UserResource> getModel(BundleContext callingContext, Class<?> iClass, String name) {
+		InputStream r = iClass.getClassLoader().getResourceAsStream(name);
+    	if (r == null) {
+    		URL u = callingContext.getBundle().getResource(name);
+    		if (u != null) {
+    			try {
+    			    r = u.openStream();
+    			} catch (Exception ex) {
+    				LOG.info("Problems opening a user model resource at " + u.toString());
+    			}
+    		}
+    	}
+    	if (r != null) {
+    		try {
+    		    return ResourceUtils.getUserResources(r);
+    		} catch (Exception ex) {
+    			LOG.info("Problems reading a user model, it will be ignored");
+    		}
+    	}
+    	return null;
+    }
+	
+}

Propchange: cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/JaxRSUtils.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/JaxRSUtils.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: cxf/dosgi/trunk/samples/greeter_rest/impl/src/main/java/org/apache/cxf/dosgi/samples/greeter/impl/rest/Activator.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/samples/greeter_rest/impl/src/main/java/org/apache/cxf/dosgi/samples/greeter/impl/rest/Activator.java?rev=786854&r1=786853&r2=786854&view=diff
==============================================================================
--- cxf/dosgi/trunk/samples/greeter_rest/impl/src/main/java/org/apache/cxf/dosgi/samples/greeter/impl/rest/Activator.java (original)
+++ cxf/dosgi/trunk/samples/greeter_rest/impl/src/main/java/org/apache/cxf/dosgi/samples/greeter/impl/rest/Activator.java Sat Jun 20 16:45:26 2009
@@ -22,30 +22,40 @@
 import java.util.Dictionary;
 import java.util.Hashtable;
 
-
 import org.apache.cxf.dosgi.samples.greeter.rest.GreeterService;
 import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceRegistration;
 
+//TODO: remove the comments asap once the synchronization is complete
 public class Activator implements BundleActivator {
     private ServiceRegistration registration;
+    //private ServiceRegistration registration2;
 
     public void start(BundleContext bc) throws Exception {
-        Dictionary props = new Hashtable();
+        Dictionary props = getProperties("http://localhost:9090/greeter");
+        registration = bc.registerService(GreeterService.class.getName(), 
+                                          new GreeterServiceImpl(), props);
+        
+//        props = getProperties("http://localhost:9089/greeter");
+//        registration2 = bc.registerService(GreeterService2.class.getName(), 
+//                                          new GreeterServiceImpl2(), props);
+        
+    }
+
+    private Dictionary getProperties(String address) { 
+    	Dictionary props = new Hashtable();
 
         props.put("service.exported.interfaces", "*");
         props.put("service.exported.configs", "org.apache.cxf.rs");
         props.put("service.exported.intents", "HTTP");
-        props.put("org.apache.cxf.rs.address", "http://localhost:9090/greeter");
+        props.put("org.apache.cxf.rs.address", address);
         //props.put("org.apache.cxf.rs.httpservice.context", "/greeter");
-        
-        
-        registration = bc.registerService(GreeterService.class.getName(), 
-                                          new GreeterServiceImpl(), props);
+        return props;
     }
-
+    
     public void stop(BundleContext bc) throws Exception {
         registration.unregister();
+        //registration2.unregister();
     }
 }

Added: cxf/dosgi/trunk/samples/greeter_rest/impl/src/main/java/org/apache/cxf/dosgi/samples/greeter/impl/rest/GreeterServiceImpl2.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/samples/greeter_rest/impl/src/main/java/org/apache/cxf/dosgi/samples/greeter/impl/rest/GreeterServiceImpl2.java?rev=786854&view=auto
==============================================================================
--- cxf/dosgi/trunk/samples/greeter_rest/impl/src/main/java/org/apache/cxf/dosgi/samples/greeter/impl/rest/GreeterServiceImpl2.java (added)
+++ cxf/dosgi/trunk/samples/greeter_rest/impl/src/main/java/org/apache/cxf/dosgi/samples/greeter/impl/rest/GreeterServiceImpl2.java Sat Jun 20 16:45:26 2009
@@ -0,0 +1,33 @@
+/** 
+  * 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.dosgi.samples.greeter.impl.rest;
+
+import org.apache.cxf.dosgi.samples.greeter.rest.GreeterException;
+import org.apache.cxf.dosgi.samples.greeter.rest.GreeterInfo;
+import org.apache.cxf.dosgi.samples.greeter.rest.GreeterService2;
+
+public class GreeterServiceImpl2 implements GreeterService2 {
+
+	private GreeterServiceImpl greeter = new GreeterServiceImpl();
+	
+    public GreeterInfo greetMe(String name) throws GreeterException {
+        return greeter.greetMe(name);
+    }
+
+}

Propchange: cxf/dosgi/trunk/samples/greeter_rest/impl/src/main/java/org/apache/cxf/dosgi/samples/greeter/impl/rest/GreeterServiceImpl2.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/dosgi/trunk/samples/greeter_rest/impl/src/main/java/org/apache/cxf/dosgi/samples/greeter/impl/rest/GreeterServiceImpl2.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: cxf/dosgi/trunk/samples/greeter_rest/interface/src/main/java/org/apache/cxf/dosgi/samples/greeter/rest/GreeterService2.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/samples/greeter_rest/interface/src/main/java/org/apache/cxf/dosgi/samples/greeter/rest/GreeterService2.java?rev=786854&view=auto
==============================================================================
--- cxf/dosgi/trunk/samples/greeter_rest/interface/src/main/java/org/apache/cxf/dosgi/samples/greeter/rest/GreeterService2.java (added)
+++ cxf/dosgi/trunk/samples/greeter_rest/interface/src/main/java/org/apache/cxf/dosgi/samples/greeter/rest/GreeterService2.java Sat Jun 20 16:45:26 2009
@@ -0,0 +1,25 @@
+/** 
+  * 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.dosgi.samples.greeter.rest;
+
+public interface GreeterService2 {
+
+    GreeterInfo greetMe(String name) throws GreeterException;
+
+}

Propchange: cxf/dosgi/trunk/samples/greeter_rest/interface/src/main/java/org/apache/cxf/dosgi/samples/greeter/rest/GreeterService2.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/dosgi/trunk/samples/greeter_rest/interface/src/main/java/org/apache/cxf/dosgi/samples/greeter/rest/GreeterService2.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: cxf/dosgi/trunk/samples/greeter_rest/interface/src/main/resources/OSGI-INF/cxf/jaxrs/GreeterService2-model.xml
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/samples/greeter_rest/interface/src/main/resources/OSGI-INF/cxf/jaxrs/GreeterService2-model.xml?rev=786854&view=auto
==============================================================================
--- cxf/dosgi/trunk/samples/greeter_rest/interface/src/main/resources/OSGI-INF/cxf/jaxrs/GreeterService2-model.xml (added)
+++ cxf/dosgi/trunk/samples/greeter_rest/interface/src/main/resources/OSGI-INF/cxf/jaxrs/GreeterService2-model.xml Sat Jun 20 16:45:26 2009
@@ -0,0 +1,7 @@
+<model xmlns="http://cxf.apache.org/jaxrs">
+ <resource name="org.apache.cxf.dosgi.samples.greeter.rest.GreeterService2" path="greeter">
+    <operation name="greetMe" verb="GET" path="greeting/{name}">
+       <param name="name" type="PATH"/>
+    </operation>
+ </resource>
+</model>

Propchange: cxf/dosgi/trunk/samples/greeter_rest/interface/src/main/resources/OSGI-INF/cxf/jaxrs/GreeterService2-model.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/dosgi/trunk/samples/greeter_rest/interface/src/main/resources/OSGI-INF/cxf/jaxrs/GreeterService2-model.xml
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: cxf/dosgi/trunk/samples/greeter_rest/interface/src/main/resources/OSGI-INF/cxf/jaxrs/GreeterService2-model.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml