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/08/31 19:10:41 UTC

svn commit: r809664 - in /cxf/dosgi/trunk/dsw/cxf-dsw/src: main/java/org/apache/cxf/dosgi/dsw/handlers/JaxRSUtils.java test/java/org/apache/cxf/dosgi/dsw/handlers/JaxRSUtilsTest.java

Author: sergeyb
Date: Mon Aug 31 17:10:41 2009
New Revision: 809664

URL: http://svn.apache.org/viewvc?rev=809664&view=rev
Log:
Support for registering providers from DS

Modified:
    cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/JaxRSUtils.java
    cxf/dosgi/trunk/dsw/cxf-dsw/src/test/java/org/apache/cxf/dosgi/dsw/handlers/JaxRSUtilsTest.java

Modified: 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=809664&r1=809663&r2=809664&view=diff
==============================================================================
--- cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/JaxRSUtils.java (original)
+++ cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/JaxRSUtils.java Mon Aug 31 17:10:41 2009
@@ -63,18 +63,14 @@
         	sd.getProperty(org.apache.cxf.dosgi.dsw.Constants.RS_PROVIDER_PROP_KEY);
         if (serviceProviders != null) {
         	if (serviceProviders.getClass().isArray()) {
-        	    providers.addAll(Arrays.asList((Object[])serviceProviders));
+        		if (serviceProviders.getClass().getComponentType() == String.class) {
+        			loadProviders(callingContext, providers, (String[])serviceProviders);	
+        		} else {
+        	        providers.addAll(Arrays.asList((Object[])serviceProviders));
+        		}
         	} else {
         		String[] classNames = serviceProviders.toString().split(",");
-        		for (String className : classNames) {
-        			try {
-        			    Class<?> pClass = callingContext.getBundle().loadClass(className.trim());
-        			    providers.add(pClass.newInstance());
-        			} catch (Exception ex) {
-        				ex.printStackTrace();
-        				LOG.warning("JAXRS Provider " + className.trim() + " can not be loaded or created");
-        			}
-        		}
+        		loadProviders(callingContext, providers, classNames);
         	}
         }
 		
@@ -106,6 +102,23 @@
 		return providers;
     }
 	
+	private static void loadProviders(BundleContext callingContext, 
+			                          List<Object> providers,
+			                          String[] classNames) {
+		for (String className : classNames) {
+			try {
+				String realName = className.trim();
+				if (realName.length() > 0) {
+				    Class<?> pClass = callingContext.getBundle().loadClass(realName);
+				    providers.add(pClass.newInstance());
+				}
+			} catch (Exception ex) {
+				ex.printStackTrace();
+				LOG.warning("JAXRS Provider " + className.trim() + " can not be loaded or created");
+			}
+		}
+	}
+	
 	public static List<UserResource> getModel(BundleContext callingContext, Class<?> iClass) {
 		String classModel = MODEL_FOLDER + iClass.getSimpleName() + "-model.xml";
 		List<UserResource> list = getModel(callingContext, iClass, classModel);

Modified: cxf/dosgi/trunk/dsw/cxf-dsw/src/test/java/org/apache/cxf/dosgi/dsw/handlers/JaxRSUtilsTest.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/dsw/cxf-dsw/src/test/java/org/apache/cxf/dosgi/dsw/handlers/JaxRSUtilsTest.java?rev=809664&r1=809663&r2=809664&view=diff
==============================================================================
--- cxf/dosgi/trunk/dsw/cxf-dsw/src/test/java/org/apache/cxf/dosgi/dsw/handlers/JaxRSUtilsTest.java (original)
+++ cxf/dosgi/trunk/dsw/cxf-dsw/src/test/java/org/apache/cxf/dosgi/dsw/handlers/JaxRSUtilsTest.java Mon Aug 31 17:10:41 2009
@@ -66,6 +66,7 @@
         assertEquals(AegisElementProvider.class.getName(), providers.get(0).getClass().getName());
 	}
 	
+	
 	public void testServiceProviderProperty() throws Exception {
 		
 		BundleContext bc = EasyMock.createNiceMock(BundleContext.class);
@@ -92,6 +93,34 @@
         assertEquals(JAXBElementProvider.class.getName(), providers.get(1).getClass().getName());
 	}
 	
+    public void testServiceProviderStrings() throws Exception {
+		
+		BundleContext bc = EasyMock.createNiceMock(BundleContext.class);
+		Bundle bundle = EasyMock.createNiceMock(Bundle.class);
+		bc.getBundle();
+		EasyMock.expectLastCall().andReturn(bundle).times(2);
+		bundle.loadClass(AegisElementProvider.class.getName());
+		EasyMock.expectLastCall().andReturn(AegisElementProvider.class);
+		bundle.loadClass(JAXBElementProvider.class.getName());
+		EasyMock.expectLastCall().andReturn(JAXBElementProvider.class);
+		EasyMock.replay(bc, bundle);
+		
+		Map<String, Object> props = new HashMap<String, Object>();
+        props.put(Constants.RS_PROVIDER_PROP_KEY,
+        		  new String[] {
+        		    "\r\n org.apache.cxf.jaxrs.provider.AegisElementProvider", 
+        		    "org.apache.cxf.jaxrs.provider.JAXBElementProvider\r\n"
+                  });
+        
+        props.put(Constants.RS_PROVIDER_GLOBAL_PROP_KEY, "false");
+        ServiceEndpointDescription sd = new ServiceEndpointDescriptionImpl("MyInterface", props);
+        
+        List<Object> providers = JaxRSUtils.getProviders(bc, null, sd);
+        assertEquals(2, providers.size());
+        assertEquals(AegisElementProvider.class.getName(), providers.get(0).getClass().getName());
+        assertEquals(JAXBElementProvider.class.getName(), providers.get(1).getClass().getName());
+	}
+	
 	public void testCustomGlobalProvider() throws Exception {
 		ServiceReference sref = EasyMock.createNiceMock(ServiceReference.class);
 		BundleContext bc = EasyMock.createNiceMock(BundleContext.class);