cxf-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From serg...@apache.org
Subject svn commit: r1232225 - in /cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw: ./ handlers/
Date Mon, 16 Jan 2012 23:18:22 GMT
Author: sergeyb
Date: Mon Jan 16 23:18:22 2012
New Revision: 1232225

URL: http://svn.apache.org/viewvc?rev=1232225&view=rev
Log:
Adding support for custom CXF interceptors and features for WS & RS handlers

Modified:
    cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/ClassUtils.java
    cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/Constants.java
    cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/AbstractPojoConfigurationTypeHandler.java
    cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/HttpServiceConfigurationTypeHandler.java
    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/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/JaxRSUtils.java
    cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/PojoConfigurationTypeHandler.java
    cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/WsdlConfigurationTypeHandler.java

Modified: cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/ClassUtils.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/ClassUtils.java?rev=1232225&r1=1232224&r2=1232225&view=diff
==============================================================================
--- cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/ClassUtils.java (original)
+++ cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/ClassUtils.java Mon
Jan 16 23:18:22 2012
@@ -18,8 +18,20 @@
   */
 package org.apache.cxf.dosgi.dsw;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Logger;
+
+import org.apache.cxf.common.logging.LogUtils;
+import org.osgi.framework.BundleContext;
+
 public final class ClassUtils {
-    private ClassUtils() {}
+	private static final Logger LOG = LogUtils.getL7dLogger(ClassUtils.class);
+	
+	private ClassUtils() {}
     
     public static Class<?> getInterfaceClass(Object service, String interfaceName)
{
         return getInterfaceClass(service.getClass(), interfaceName);
@@ -80,4 +92,41 @@ public final class ClassUtils {
 		}
     	return null;
     }
+    
+public static List<Object> loadProviderClasses(BundleContext callingContext, Map sd,
String propName) {
+    	
+    	Object serviceProviders = sd.get(propName);
+        if (serviceProviders != null) {
+            if (serviceProviders.getClass().isArray()) {
+                if (serviceProviders.getClass().getComponentType() == String.class) {
+                	return loadProviders(callingContext, (String[])serviceProviders);
+                } else {
+                    return Arrays.asList((Object[])serviceProviders);
+                }
+            } else {
+                String[] classNames = serviceProviders.toString().split(",");
+                return loadProviders(callingContext, classNames);
+            }
+        } else {
+        	return Collections.emptyList();
+        }
+    }
+    
+    private static List<Object> loadProviders(BundleContext callingContext,
+                                      String[] classNames) {
+    	List<Object> providers = new ArrayList<Object>();
+        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("Provider " + className.trim() + " can not be loaded or created");
+            }
+        }
+        return providers;
+    }
 }

Modified: cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/Constants.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/Constants.java?rev=1232225&r1=1232224&r2=1232225&view=diff
==============================================================================
--- cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/Constants.java (original)
+++ cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/Constants.java Mon
Jan 16 23:18:22 2012
@@ -38,9 +38,9 @@ public class Constants {
     // WSDL
     public static final String WSDL_CONFIG_TYPE = "wsdl";
     public static final String WSDL_CONFIG_PREFIX = "osgi.remote.configuration" + "." + WSDL_CONFIG_TYPE;
-    public static final String SERVICE_NAMESPACE = WSDL_CONFIG_PREFIX + ".service.ns";
-    public static final String SERVICE_NAME = WSDL_CONFIG_PREFIX + ".service.name";
-    public static final String PORT_NAME = WSDL_CONFIG_PREFIX + ".port.name";
+    public static final String WSDL_SERVICE_NAMESPACE = WSDL_CONFIG_PREFIX + ".service.ns";
+    public static final String WSDL_SERVICE_NAME = WSDL_CONFIG_PREFIX + ".service.name";
+    public static final String WSDL_PORT_NAME = WSDL_CONFIG_PREFIX + ".port.name";
     public static final String WSDL_LOCATION = WSDL_CONFIG_PREFIX + ".location";
     public static final String WSDL_HTTP_SERVICE_CONTEXT = WSDL_CONFIG_PREFIX + ".httpservice.context";
     // Provider prefix
@@ -52,17 +52,28 @@ public class Constants {
     public static final String WS_PORT_PROPERTY = WS_CONFIG_TYPE + ".port";
     public static final String WS_HTTP_SERVICE_CONTEXT = WS_CONFIG_TYPE + ".httpservice.context";
     public static final String WS_FRONTEND_PROP_KEY = WS_CONFIG_TYPE + ".frontend";
+    public static final String WS_IN_INTERCEPTORS_PROP_KEY = WS_CONFIG_TYPE + ".in.interceptors";
+    public static final String WS_OUT_INTERCEPTORS_PROP_KEY = WS_CONFIG_TYPE + ".out.interceptors";
+    public static final String WS_CONTEXT_PROPS_PROP_KEY = WS_CONFIG_TYPE + ".context.properties";
+    public static final String WS_FEATURES_PROP_KEY = WS_CONFIG_TYPE + ".features";
     public static final String WS_DATABINDING_PROP_KEY = WS_CONFIG_TYPE + ".databinding";
-    
+    public static final String WS_WSDL_SERVICE_NAMESPACE =  WS_CONFIG_TYPE + ".service.ns";
+    public static final String WS_WSDL_SERVICE_NAME =  WS_CONFIG_TYPE + ".service.name";
+    public static final String WS_WSDL_PORT_NAME =  WS_CONFIG_TYPE + ".port.name";
+    public static final String WS_WSDL_LOCATION =  WS_CONFIG_TYPE + ".location";
     // Rest
     public static final String RS_CONFIG_TYPE = PROVIDER_PREFIX + ".rs";
     public static final String RS_ADDRESS_PROPERTY = RS_CONFIG_TYPE + ".address";
     public static final String RS_HTTP_SERVICE_CONTEXT = RS_CONFIG_TYPE + ".httpservice.context";
     public static final String RS_DATABINDING_PROP_KEY = RS_CONFIG_TYPE + ".databinding";
+    public static final String RS_IN_INTERCEPTORS_PROP_KEY = RS_CONFIG_TYPE + ".in.interceptors";
+    public static final String RS_OUT_INTERCEPTORS_PROP_KEY = RS_CONFIG_TYPE + ".out.interceptors";
+    public static final String RS_CONTEXT_PROPS_PROP_KEY = RS_CONFIG_TYPE + ".context.properties";
+    public static final String RS_FEATURES_PROP_KEY = RS_CONFIG_TYPE + ".features";
     public static final String RS_PROVIDER_PROP_KEY = RS_CONFIG_TYPE + ".provider";
     public static final String RS_PROVIDER_EXPECTED_PROP_KEY = RS_PROVIDER_PROP_KEY + ".expected";
     public static final String RS_PROVIDER_GLOBAL_PROP_KEY = RS_PROVIDER_PROP_KEY + ".globalquery";
-    
+    public static final String RS_WADL_LOCATION = RS_CONFIG_TYPE + ".wadl.location";
     // POJO (old value for WS)
     public static final String WS_CONFIG_TYPE_OLD = "pojo";
     public static final String WS_CONFIG_OLD_PREFIX = "osgi.remote.configuration." + WS_CONFIG_TYPE_OLD;

Modified: cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/AbstractPojoConfigurationTypeHandler.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/AbstractPojoConfigurationTypeHandler.java?rev=1232225&r1=1232224&r2=1232225&view=diff
==============================================================================
--- cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/AbstractPojoConfigurationTypeHandler.java
(original)
+++ cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/AbstractPojoConfigurationTypeHandler.java
Mon Jan 16 23:18:22 2012
@@ -18,6 +18,7 @@
   */
 package org.apache.cxf.dosgi.dsw.handlers;
 
+import java.net.URL;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -29,8 +30,12 @@ import java.util.Map;
 import java.util.Set;
 import java.util.logging.Logger;
 
+import javax.xml.namespace.QName;
+
 import org.apache.cxf.binding.BindingConfiguration;
 import org.apache.cxf.common.logging.LogUtils;
+import org.apache.cxf.common.util.PackageUtils;
+import org.apache.cxf.dosgi.dsw.ClassUtils;
 import org.apache.cxf.dosgi.dsw.Constants;
 import org.apache.cxf.dosgi.dsw.OsgiUtils;
 import org.apache.cxf.dosgi.dsw.qos.IntentMap;
@@ -38,6 +43,8 @@ import org.apache.cxf.endpoint.AbstractE
 import org.apache.cxf.feature.AbstractFeature;
 import org.apache.cxf.frontend.ClientProxyFactoryBean;
 import org.apache.cxf.frontend.ServerFactoryBean;
+import org.apache.cxf.helpers.CastUtils;
+import org.apache.cxf.interceptor.Interceptor;
 import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
 import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
 import org.osgi.framework.BundleContext;
@@ -102,6 +109,82 @@ public abstract class AbstractPojoConfig
         return appliedIntents.toArray(new String[0]);
     }
 
+    protected void setWsdlProperties(ServerFactoryBean factory, BundleContext dswContext,

+    		Map sd) {
+    	String location = OsgiUtils.getProperty(sd, Constants.WS_WSDL_LOCATION);
+    	if (location != null) {
+    		URL wsdlURL = dswContext.getBundle().getResource(location);
+	        if (wsdlURL != null) {
+	            factory.setWsdlURL(wsdlURL.toString());
+	        }
+	        QName serviceName = getServiceQName(null, sd, 
+	        		Constants.WS_WSDL_SERVICE_NAMESPACE, Constants.WS_WSDL_SERVICE_NAME);
+	        if (serviceName != null) {
+	        	factory.setServiceName(serviceName);
+	            QName portName = getPortQName(serviceName.getNamespaceURI(), sd, Constants.WS_WSDL_PORT_NAME);
+	            if (portName != null) {
+	            	factory.setEndpointName(portName);
+	            }
+	        }
+    	}
+    }
+    
+    protected QName getServiceQName(Class<?> iClass, Map sd, String nsPropName, String
namePropName) {
+    	String serviceNs = OsgiUtils.getProperty(sd, nsPropName);
+    	String serviceName = OsgiUtils.getProperty(sd, namePropName);
+    	if (iClass == null && (serviceNs == null || serviceName == null)) {
+    		return null;
+    	}
+    	if (serviceNs == null) {
+            serviceNs = PackageUtils.getNamespace(
+                            PackageUtils.getPackageName(iClass));
+        }
+        if (serviceName == null) {
+        	serviceName = iClass.getSimpleName();	
+        }
+        return new QName(serviceNs, serviceName);
+    }
+    
+    protected QName getPortQName(String ns, Map sd, String propName) {
+    	String portName = OsgiUtils.getProperty(sd, propName);
+        if (portName == null) {
+        	return null;	
+        }
+        return new QName(ns, portName);
+    }
+    
+    protected void addInterceptors(AbstractEndpointFactory factory, BundleContext callingContext,

+    		Map sd, String propName) {
+
+        List<Object> providers = ClassUtils.loadProviderClasses(callingContext, sd,
propName); 
+        boolean in = propName.contains("in.interceptors");
+        for (int i = 0; i < providers.size(); i++) {
+        	Interceptor<?> interceptor = (Interceptor<?>)providers.get(i);  
+	        if (in) {
+	        	factory.getInInterceptors().add(interceptor);
+	        } else {
+	        	factory.getOutInterceptors().add(interceptor);
+	        }
+        }
+    }
+    
+    protected void addFeatures(AbstractEndpointFactory factory, BundleContext callingContext,

+    		Map sd, String propName) {
+
+        List<Object> providers = ClassUtils.loadProviderClasses(callingContext, sd,
propName); 
+        if (providers.size() > 0) {
+        	factory.getFeatures().addAll(CastUtils.cast(providers, AbstractFeature.class));
+        }
+    }
+    
+    protected void addContextProperties(AbstractEndpointFactory factory, BundleContext callingContext,

+    		Map sd, String propName) {
+    	Map<String, Object> props = (Map<String, Object>)sd.get(propName);
+        if (props != null) {
+        	factory.getProperties(true).putAll(props);
+        }
+    }
+    
     private boolean processIntent(Set<String> appliedIntents,
                                   List<AbstractFeature> features,
                                   AbstractEndpointFactory factory, String intentName,

Modified: cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/HttpServiceConfigurationTypeHandler.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/HttpServiceConfigurationTypeHandler.java?rev=1232225&r1=1232224&r2=1232225&view=diff
==============================================================================
--- cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/HttpServiceConfigurationTypeHandler.java
(original)
+++ cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/HttpServiceConfigurationTypeHandler.java
Mon Jan 16 23:18:22 2012
@@ -102,6 +102,10 @@ public class HttpServiceConfigurationTyp
             }
             String frontEndImpl = (String)serviceReference.getProperty(Constants.WS_FRONTEND_PROP_KEY);
             ClientProxyFactoryBean factory = createClientProxyFactoryBean(frontEndImpl);
+            addInterceptors(factory.getClientFactoryBean(), callingContext, sd.getProperties(),
Constants.WS_IN_INTERCEPTORS_PROP_KEY);
+            addInterceptors(factory.getClientFactoryBean(), callingContext, sd.getProperties(),
Constants.WS_OUT_INTERCEPTORS_PROP_KEY);
+            addFeatures(factory.getClientFactoryBean(), callingContext, sd.getProperties(),
Constants.WS_FEATURES_PROP_KEY);
+            addContextProperties(factory.getClientFactoryBean(), callingContext, sd.getProperties(),
Constants.WS_CONTEXT_PROPS_PROP_KEY);
             factory.setServiceClass(iClass);
             factory.setAddress(address);
             factory.getServiceFactory().setDataBinding(databinding);
@@ -152,8 +156,11 @@ public class HttpServiceConfigurationTyp
         factory.getServiceFactory().setDataBinding(databinding);
         factory.setServiceBean(serviceBean);
 
-        
-
+        addInterceptors(factory, callingContext, sd, Constants.WS_IN_INTERCEPTORS_PROP_KEY);
+        addInterceptors(factory, callingContext, sd, Constants.WS_OUT_INTERCEPTORS_PROP_KEY);
+        addFeatures(factory, callingContext, sd, Constants.WS_FEATURES_PROP_KEY);
+        addContextProperties(factory, callingContext, sd, Constants.WS_CONTEXT_PROPS_PROP_KEY);
+        setWsdlProperties(factory, dswContext, sd);
         
         ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader();
         try {

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=1232225&r1=1232224&r2=1232225&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
Mon Jan 16 23:18:22 2012
@@ -65,13 +65,17 @@ public class JaxRSHttpServiceConfigurati
             factory.setServiceClass(iClass);
             factory.setResourceProvider(iClass, new SingletonResourceProvider(serviceBean));
         }
-
+        
         factory.setAddress("/");
         List<Object> providers = JaxRSUtils.getProviders(callingContext, dswContext,
sd);
         if (providers != null && providers.size() > 0) {
             factory.setProviders(providers);
         }
-
+        addInterceptors(factory, callingContext, sd, Constants.RS_IN_INTERCEPTORS_PROP_KEY);
+        addInterceptors(factory, callingContext, sd, Constants.RS_OUT_INTERCEPTORS_PROP_KEY);
+        addFeatures(factory, callingContext, sd, Constants.RS_FEATURES_PROP_KEY);
+        addContextProperties(factory, callingContext, sd, Constants.RS_CONTEXT_PROPS_PROP_KEY);
+        
         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=1232225&r1=1232224&r2=1232225&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
Mon Jan 16 23:18:22 2012
@@ -65,6 +65,11 @@ public class JaxRSPojoConfigurationTypeH
             JAXRSClientFactoryBean bean = new JAXRSClientFactoryBean();
             bean.setAddress(address);
 
+            addInterceptors(bean, callingContext, sd.getProperties(), Constants.RS_IN_INTERCEPTORS_PROP_KEY);
+            addInterceptors(bean, callingContext, sd.getProperties(), Constants.RS_OUT_INTERCEPTORS_PROP_KEY);
+            addFeatures(bean, callingContext, sd.getProperties(), Constants.RS_FEATURES_PROP_KEY);
+            addContextProperties(bean, callingContext, sd.getProperties(), Constants.RS_CONTEXT_PROPS_PROP_KEY);
+            
             List<UserResource> resources = JaxRSUtils.getModel(callingContext, iClass);
             if (resources != null) {
                 bean.setModelBeansWithServiceClass(resources, iClass);
@@ -119,7 +124,16 @@ public class JaxRSPojoConfigurationTypeH
             factory.setProviders(providers);
         }
 
-
+        addInterceptors(factory, callingContext, sd, Constants.RS_IN_INTERCEPTORS_PROP_KEY);
+        addInterceptors(factory, callingContext, sd, Constants.RS_OUT_INTERCEPTORS_PROP_KEY);
+        addFeatures(factory, callingContext, sd, Constants.RS_FEATURES_PROP_KEY);
+        addContextProperties(factory, callingContext, sd, Constants.RS_CONTEXT_PROPS_PROP_KEY);
+
+        String location = OsgiUtils.getProperty(sd, Constants.RS_WADL_LOCATION);
+    	if (location != null) {
+    		factory.setDocLocation(location);
+    	}
+        
         ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader();
         try {
             String[] intents = new String[] {

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=1232225&r1=1232224&r2=1232225&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 Jan 16 23:18:22 2012
@@ -22,12 +22,12 @@ package org.apache.cxf.dosgi.dsw.handler
 import java.io.InputStream;
 import java.net.URL;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 import java.util.logging.Logger;
 
 import org.apache.cxf.common.logging.LogUtils;
+import org.apache.cxf.dosgi.dsw.ClassUtils;
 import org.apache.cxf.dosgi.dsw.OsgiUtils;
 import org.apache.cxf.jaxrs.model.UserResource;
 import org.apache.cxf.jaxrs.provider.AegisElementProvider;
@@ -63,19 +63,11 @@ public class JaxRSUtils {
         if ("aegis".equals(sd.get(org.apache.cxf.dosgi.dsw.Constants.RS_DATABINDING_PROP_KEY)))
{
             providers.add(new AegisElementProvider());
         }
-        Object serviceProviders = sd.get(org.apache.cxf.dosgi.dsw.Constants.RS_PROVIDER_PROP_KEY);
-        if (serviceProviders != null) {
-            if (serviceProviders.getClass().isArray()) {
-                if (serviceProviders.getClass().getComponentType() == String.class) {
-                    loadProviders(callingContext, providers, (String[])serviceProviders);
-                } else {
-                    providers.addAll(Arrays.asList((Object[])serviceProviders));
-                }
-            } else {
-                String[] classNames = serviceProviders.toString().split(",");
-                loadProviders(callingContext, providers, classNames);
-            }
-        }
+        
+        providers.addAll(
+        		ClassUtils.loadProviderClasses(callingContext, 
+                                               sd, 
+                                               org.apache.cxf.dosgi.dsw.Constants.RS_PROVIDER_PROP_KEY));
 
         Object globalQueryProp = sd.get(org.apache.cxf.dosgi.dsw.Constants.RS_PROVIDER_GLOBAL_PROP_KEY);
         boolean globalQueryRequired = globalQueryProp == null || OsgiUtils.toBoolean(globalQueryProp);
@@ -105,21 +97,7 @@ public class JaxRSUtils {
         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";

Modified: cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/PojoConfigurationTypeHandler.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/PojoConfigurationTypeHandler.java?rev=1232225&r1=1232224&r2=1232225&view=diff
==============================================================================
--- cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/PojoConfigurationTypeHandler.java
(original)
+++ cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/PojoConfigurationTypeHandler.java
Mon Jan 16 23:18:22 2012
@@ -72,6 +72,11 @@ public class PojoConfigurationTypeHandle
             factory.setAddress(address);
             factory.getServiceFactory().setDataBinding(databinding);
 
+            addInterceptors(factory.getClientFactoryBean(), callingContext, sd.getProperties(),
Constants.WS_IN_INTERCEPTORS_PROP_KEY);
+            addInterceptors(factory.getClientFactoryBean(), callingContext, sd.getProperties(),
Constants.WS_OUT_INTERCEPTORS_PROP_KEY);
+            addFeatures(factory.getClientFactoryBean(), callingContext, sd.getProperties(),
Constants.WS_OUT_INTERCEPTORS_PROP_KEY);
+            addContextProperties(factory.getClientFactoryBean(), callingContext, sd.getProperties(),
Constants.WS_FEATURES_PROP_KEY);
+            
             applyIntents(dswContext, callingContext, factory.getFeatures(), factory.getClientFactoryBean(),
                          sd.getProperties());
 
@@ -115,6 +120,11 @@ public class PojoConfigurationTypeHandle
         factory.getServiceFactory().setDataBinding(databinding);
         factory.setServiceBean(serviceBean);
 
+        addInterceptors(factory, callingContext, sd, Constants.WS_IN_INTERCEPTORS_PROP_KEY);
+        addInterceptors(factory, callingContext, sd, Constants.WS_OUT_INTERCEPTORS_PROP_KEY);
+        addFeatures(factory, callingContext, sd, Constants.WS_FEATURES_PROP_KEY);
+        addContextProperties(factory, callingContext, sd, Constants.WS_CONTEXT_PROPS_PROP_KEY);
+        setWsdlProperties(factory, dswContext, sd);
         ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader();
         try {
             String[] intents = applyIntents(dswContext, callingContext, factory.getFeatures(),
factory, sd);
@@ -140,7 +150,8 @@ public class PojoConfigurationTypeHandle
         
     }
 
-
+    
+    
 
     protected String getPojoAddress(Map sd, Class<?> iClass) {
         String address = OsgiUtils.getProperty(sd, RemoteConstants.ENDPOINT_ID);

Modified: cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/WsdlConfigurationTypeHandler.java
URL: http://svn.apache.org/viewvc/cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/WsdlConfigurationTypeHandler.java?rev=1232225&r1=1232224&r2=1232225&view=diff
==============================================================================
--- cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/WsdlConfigurationTypeHandler.java
(original)
+++ cxf/dosgi/trunk/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/WsdlConfigurationTypeHandler.java
Mon Jan 16 23:18:22 2012
@@ -78,17 +78,18 @@ public class WsdlConfigurationTypeHandle
         LOG.info("Creating a " + sd.getInterfaces().toArray()[0] + " client, wsdl address
is "
                  + OsgiUtils.getProperty(sd, Constants.WSDL_CONFIG_PREFIX));
         
-        String serviceNs = OsgiUtils.getProperty(sd, Constants.SERVICE_NAMESPACE);
+        String serviceNs = OsgiUtils.getProperty(sd, Constants.WSDL_SERVICE_NAMESPACE);
         if (serviceNs == null) {
             serviceNs = PackageUtils.getNamespace(
                             PackageUtils.getPackageName(iClass));
         }
-        String serviceName = OsgiUtils.getProperty(sd, Constants.SERVICE_NAME);
+        String serviceName = OsgiUtils.getProperty(sd, Constants.WSDL_SERVICE_NAME);
         if (serviceName == null) {
         	serviceName = iClass.getSimpleName();	
         }
-        QName serviceQname = getServiceQName(iClass, sd.getProperties());
-        QName portQname = getPortQName(serviceQname.getNamespaceURI(), sd.getProperties());
+        QName serviceQname = getServiceQName(iClass, sd.getProperties(),
+        		Constants.WSDL_SERVICE_NAMESPACE, Constants.WSDL_SERVICE_NAME);
+        QName portQname = getPortQName(serviceQname.getNamespaceURI(), sd.getProperties(),
Constants.WSDL_PORT_NAME);
         Service service = createWebService(wsdlAddress, serviceQname);
         Object proxy = getProxy(
             portQname == null ? service.getPort(iClass) : service.getPort(portQname, iClass),

@@ -103,27 +104,6 @@ public class WsdlConfigurationTypeHandle
         return Service.create(wsdlAddress, serviceQname);
     }
 
-    private QName getServiceQName(Class<?> iClass, Map sd) {
-    	String serviceNs = OsgiUtils.getProperty(sd, Constants.SERVICE_NAMESPACE);
-        if (serviceNs == null) {
-            serviceNs = PackageUtils.getNamespace(
-                            PackageUtils.getPackageName(iClass));
-        }
-        String serviceName = OsgiUtils.getProperty(sd, Constants.SERVICE_NAME);
-        if (serviceName == null) {
-        	serviceName = iClass.getSimpleName();	
-        }
-        return new QName(serviceNs, serviceName);
-    }
-    
-    private QName getPortQName(String ns, Map sd) {
-    	String portName = OsgiUtils.getProperty(sd, Constants.PORT_NAME);
-        if (portName == null) {
-        	return null;	
-        }
-        return new QName(ns, portName);
-    }
-    
     public void createServer(ExportRegistrationImpl exportRegistration,
                                BundleContext dswContext,
                                BundleContext callingContext,
@@ -170,10 +150,11 @@ public class WsdlConfigurationTypeHandle
         factory.getServiceFactory().setDataBinding(databinding);
         factory.setServiceBean(serviceBean);
 
-        QName serviceQname = getServiceQName(iClass, sd);
+        QName serviceQname = getServiceQName(iClass, sd,
+        		Constants.WSDL_SERVICE_NAMESPACE, Constants.WSDL_SERVICE_NAME);
         factory.setServiceName(serviceQname);
         
-        QName portQname = getPortQName(serviceQname.getNamespaceURI(), sd);
+        QName portQname = getPortQName(serviceQname.getNamespaceURI(), sd, Constants.WSDL_PORT_NAME);
         if (portQname != null) {
         	factory.setEndpointName(portQname);
         }



Mime
View raw message