Author: cschneider
Date: Fri Aug 23 07:42:28 2013
New Revision: 1516723

URL: http://svn.apache.org/r1516723
Log:
Split Activator

Added:
    
cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/osgi/ConfigAdminHttpConduitConfigurer.java
   (with props)
    
cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/osgi/HttpConduitConfigApplier.java
   (with props)
Modified:
    
cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/osgi/HTTPTransportActivator.java

Added: 
cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/osgi/ConfigAdminHttpConduitConfigurer.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/osgi/ConfigAdminHttpConduitConfigurer.java?rev=1516723&view=auto
==============================================================================
--- 
cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/osgi/ConfigAdminHttpConduitConfigurer.java
 (added)
+++ 
cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/osgi/ConfigAdminHttpConduitConfigurer.java
 Fri Aug 23 07:42:28 2013
@@ -0,0 +1,206 @@
+/**
+ * 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.transport.http.osgi;
+
+import java.util.Dictionary;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.cxf.transport.http.HTTPConduit;
+import org.apache.cxf.transport.http.HTTPConduitConfigurer;
+import org.osgi.service.cm.ConfigurationException;
+import org.osgi.service.cm.ManagedServiceFactory;
+
+/**
+ * Collects configuration information using a ManagedServiceFactory.
+ * 
+ * Registers a HTTPConduitConfigurer that can configure conduits based on the 
above
+ * configuration data.
+ * 
+ * When used with felix config admin and fileinstall the configuration
+ * is expected in files named org.apache.cxf.http.conduits-XYZ.cfg
+ * that has a list of properties like:
+ * 
+ * url: Regex url to match the configuration
+ * order: Integer order in which to apply the regex's when multiple regex's 
match.
+ * client.*
+ * tlsClientParameters.*
+ * proxyAuthorization.*
+ * authorization.*
+ * 
+ * Where each of those is a prefix for the attributes that would be on the 
elements 
+ * of the http:conduit configuration defined at:
+ * 
+ * http://cxf.apache.org/schemas/configuration/http-conf.xsd
+ * 
+ * For example:
+ * client.ReceiveTimeout: 1000
+ * authorization.Username: Foo
+ * tlsClientParameters.keyManagers.keyStore.file: mykeys.jks
+ * etc....
+ * 
+ */
+class ConfigAdminHttpConduitConfigurer implements ManagedServiceFactory, 
HTTPConduitConfigurer {
+    public static final String FACTORY_PID = "org.apache.cxf.http.conduits"; 
+
+    /**
+     * Stores the configuration data index by matcher and sorted by order 
+     */
+    private static class PidInfo implements Comparable<PidInfo> {
+        final Dictionary<String, String> props;
+        final Matcher matcher;
+        final int order;
+        
+        public PidInfo(Dictionary<String, String> p, Matcher m, int o) {
+            matcher = m;
+            props = p;
+            order = o;
+        }
+        public Dictionary<String, String> getProps() {
+            return props;
+        }
+        public Matcher getMatcher() {
+            return matcher;
+        }
+
+        public int compareTo(PidInfo o) {
+            if (order < o.order) {
+                return -1;
+            } else if (order > o.order) { 
+                return 1;
+            }
+            // priorities are equal
+            if (matcher != null) {
+                if (o.matcher == null) {
+                    return -1;
+                }
+                return 
matcher.pattern().toString().compareTo(o.matcher.pattern().toString());
+            }
+            return 0;
+        }
+    }
+
+    Map<String, PidInfo> props 
+        = new ConcurrentHashMap<String, PidInfo>(4, 0.75f, 2);
+    CopyOnWriteArrayList<PidInfo> sorted = new CopyOnWriteArrayList<PidInfo>();
+
+    public String getName() {
+        return FACTORY_PID;
+    }
+    
+    @SuppressWarnings("unchecked")
+    public void updated(String pid, @SuppressWarnings("rawtypes") Dictionary 
properties)
+        throws ConfigurationException {
+        if (pid == null) {
+            return;
+        }
+        String url = (String)properties.get("url");
+        String name = (String)properties.get("name");
+        Matcher matcher = url == null ? null : 
Pattern.compile(url).matcher("");
+        String p = (String)properties.get("order");
+        int order = 50; 
+        if (p != null) {
+            order = Integer.valueOf(p);
+        }
+        
+        PidInfo info = new PidInfo(properties, matcher, order);
+        
+        props.put(pid, info);
+        if (url != null) {
+            props.put(url, info);
+        }
+        if (name != null) {
+            props.put(name, info);
+        }
+        addToSortedInfos(info);
+    }
+
+    private synchronized void addToSortedInfos(PidInfo pi) {
+        int size = sorted.size();
+        for (int x = 0; x < size; x++) {
+            PidInfo p = sorted.get(x);
+            if (pi.compareTo(p) < 0) {
+                sorted.add(x, pi);
+                return;
+            }
+        }
+        sorted.add(pi);
+    }
+    private synchronized void removeFromSortedInfos(PidInfo pi) {
+        sorted.remove(pi);
+    }
+
+    public void deleted(String pid) {
+        PidInfo info = props.remove(pid);
+        if (info == null) {
+            return;
+        }
+        removeFromSortedInfos(info);
+        Dictionary<String, String> d = info.getProps();
+        if (d != null) {
+            String url = d.get("url");
+            String name = d.get("name");
+            if (url != null) {
+                props.remove(url);
+            }
+            if (name != null) {
+                props.remove(name);
+            }
+        }
+    }
+
+    public void configure(String name, String address, HTTPConduit c) {
+        PidInfo byName = null;
+        PidInfo byAddress = null;
+        if (name != null) {
+            byName = props.get(name);
+        }
+        if (address != null) {
+            byAddress = props.get(address);
+            if (byAddress == byName) {
+                byAddress = null;
+            }
+        }
+        
+        HttpConduitConfigApplier applier = new HttpConduitConfigApplier();
+        for (PidInfo info : sorted) {
+            if (info.getMatcher() != null
+                && info != byName
+                && info != byAddress) {
+                Matcher m = info.getMatcher();
+                synchronized (m) {
+                    m.reset(address);
+                    if (m.matches()) {
+                        applier.apply(info.getProps(), c, address);
+                    }
+                }
+            }
+        }
+        
+        if (byAddress != null) {
+            applier.apply(byAddress.getProps(), c, address);
+        }
+        if (byName != null) {
+            applier.apply(byName.getProps(), c, address);
+        }
+    }
+}

Propchange: 
cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/osgi/ConfigAdminHttpConduitConfigurer.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: 
cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/osgi/HTTPTransportActivator.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/osgi/HTTPTransportActivator.java?rev=1516723&r1=1516722&r2=1516723&view=diff
==============================================================================
--- 
cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/osgi/HTTPTransportActivator.java
 (original)
+++ 
cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/osgi/HTTPTransportActivator.java
 Fri Aug 23 07:42:28 2013
@@ -19,531 +19,38 @@
 
 package org.apache.cxf.transport.http.osgi;
 
-import java.util.Dictionary;
-import java.util.Enumeration;
-import java.util.List;
-import java.util.Map;
 import java.util.Properties;
-import java.util.StringTokenizer;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.CopyOnWriteArrayList;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
 
-import org.apache.cxf.configuration.jsse.TLSClientParameters;
-import org.apache.cxf.configuration.jsse.TLSParameterJaxBUtils;
-import org.apache.cxf.configuration.security.AuthorizationPolicy;
-import org.apache.cxf.configuration.security.CertStoreType;
-import org.apache.cxf.configuration.security.CertificateConstraintsType;
-import org.apache.cxf.configuration.security.CombinatorType;
-import org.apache.cxf.configuration.security.DNConstraintsType;
-import org.apache.cxf.configuration.security.FiltersType;
-import org.apache.cxf.configuration.security.KeyManagersType;
-import org.apache.cxf.configuration.security.KeyStoreType;
-import org.apache.cxf.configuration.security.ProxyAuthorizationPolicy;
-import org.apache.cxf.configuration.security.SecureRandomParameters;
-import org.apache.cxf.configuration.security.TrustManagersType;
-import org.apache.cxf.transport.http.HTTPConduit;
 import org.apache.cxf.transport.http.HTTPConduitConfigurer;
-import org.apache.cxf.transports.http.configuration.ConnectionType;
-import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;
-import org.apache.cxf.transports.http.configuration.ProxyServerType;
 import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
 import org.osgi.framework.ServiceRegistration;
-import org.osgi.service.cm.ConfigurationAdmin;
-import org.osgi.service.cm.ConfigurationException;
 import org.osgi.service.cm.ManagedServiceFactory;
-import org.osgi.util.tracker.ServiceTracker;
 
-/**
- * This class registers a HTTPConduitConfigurer that will pull information 
from the 
- * config:admin service to configure conduits.   With the Felix file based 
impl, the
- * format for that would be in files named org.apache.cxf.http.conduits-XYZ.cfg
- * that has a list of properties like:
- * 
- * url: Regex url to match the configuration
- * order: Integer order in which to apply the regex's when multiple regex's 
match.
- * client.*
- * tlsClientParameters.*
- * proxyAuthorization.*
- * authorization.*
- * 
- * Where each of those is a prefix for the attributes that would be on the 
elements 
- * of the http:conduit configuration defined at:
- * 
- * http://cxf.apache.org/schemas/configuration/http-conf.xsd
- * 
- * For example:
- * client.ReceiveTimeout: 1000
- * authorization.Username: Foo
- * tlsClientParameters.keyManagers.keyStore.file: mykeys.jks
- * etc....
- * 
- */
 public class HTTPTransportActivator 
-    implements BundleActivator, ManagedServiceFactory, HTTPConduitConfigurer {
-    public static final String FACTORY_PID = "org.apache.cxf.http.conduits"; 
-    private static final String SECURE_HTTP_PREFIX = "https";
+    implements BundleActivator {
     
-    private static class PidInfo implements Comparable<PidInfo> {
-        final Dictionary<String, String> props;
-        final Matcher matcher;
-        final int order;
-        
-        public PidInfo(Dictionary<String, String> p, Matcher m, int o) {
-            matcher = m;
-            props = p;
-            order = o;
-        }
-        public Dictionary<String, String> getProps() {
-            return props;
-        }
-        public Matcher getMatcher() {
-            return matcher;
-        }
-
-        public int compareTo(PidInfo o) {
-            if (order < o.order) {
-                return -1;
-            } else if (order > o.order) { 
-                return 1;
-            }
-            // priorities are equal
-            if (matcher != null) {
-                if (o.matcher == null) {
-                    return -1;
-                }
-                return 
matcher.pattern().toString().compareTo(o.matcher.pattern().toString());
-            }
-            return 0;
-        }
-    }
-    
-    ServiceTracker configAdminTracker;
     ServiceRegistration reg;
     ServiceRegistration reg2;
-    Map<String, PidInfo> props 
-        = new ConcurrentHashMap<String, PidInfo>(4, 0.75f, 2);
-    CopyOnWriteArrayList<PidInfo> sorted = new CopyOnWriteArrayList<PidInfo>();
     
     public void start(BundleContext context) throws Exception {
+        ConfigAdminHttpConduitConfigurer conduitConfigurer = new 
ConfigAdminHttpConduitConfigurer();
+
         Properties servProps = new Properties();
-        servProps.put(Constants.SERVICE_PID, FACTORY_PID);  
+        servProps.put(Constants.SERVICE_PID, 
ConfigAdminHttpConduitConfigurer.FACTORY_PID);  
         reg2 = context.registerService(ManagedServiceFactory.class.getName(),
-                                       this, servProps);
+                                       conduitConfigurer, servProps);
         
         servProps = new Properties();
         servProps.put(Constants.SERVICE_PID,  
"org.apache.cxf.http.conduit-configurer");  
         reg = context.registerService(HTTPConduitConfigurer.class.getName(),
-                                this, servProps);
-        
-        configAdminTracker = new ServiceTracker(context, 
ConfigurationAdmin.class.getName(), null);
-        configAdminTracker.open();
+                                conduitConfigurer, servProps);
     }
 
     public void stop(BundleContext context) throws Exception {
         reg.unregister();
         reg2.unregister();
-        configAdminTracker.close();
-    }
-
-    public String getName() {
-        return FACTORY_PID;
-    }
-
-    @SuppressWarnings("unchecked")
-    public void updated(String pid, @SuppressWarnings("rawtypes") Dictionary 
properties)
-        throws ConfigurationException {
-        if (pid == null) {
-            return;
-        }
-        String url = (String)properties.get("url");
-        String name = (String)properties.get("name");
-        Matcher matcher = url == null ? null : 
Pattern.compile(url).matcher("");
-        String p = (String)properties.get("order");
-        int order = 50; 
-        if (p != null) {
-            order = Integer.valueOf(p);
-        }
-        
-        PidInfo info = new PidInfo(properties, matcher, order);
-        
-        props.put(pid, info);
-        if (url != null) {
-            props.put(url, info);
-        }
-        if (name != null) {
-            props.put(name, info);
-        }
-        addToSortedInfos(info);
-    }
-
-    private synchronized void addToSortedInfos(PidInfo pi) {
-        int size = sorted.size();
-        for (int x = 0; x < size; x++) {
-            PidInfo p = sorted.get(x);
-            if (pi.compareTo(p) < 0) {
-                sorted.add(x, pi);
-                return;
-            }
-        }
-        sorted.add(pi);
-    }
-    private synchronized void removeFromSortedInfos(PidInfo pi) {
-        sorted.remove(pi);
-    }
-
-    public void deleted(String pid) {
-        PidInfo info = props.remove(pid);
-        if (info == null) {
-            return;
-        }
-        removeFromSortedInfos(info);
-        Dictionary<String, String> d = info.getProps();
-        if (d != null) {
-            String url = d.get("url");
-            String name = d.get("name");
-            if (url != null) {
-                props.remove(url);
-            }
-            if (name != null) {
-                props.remove(name);
-            }
-        }
-    }
-
-    public void configure(String name, String address, HTTPConduit c) {
-        PidInfo byName = null;
-        PidInfo byAddress = null;
-        if (name != null) {
-            byName = props.get(name);
-        }
-        if (address != null) {
-            byAddress = props.get(address);
-            if (byAddress == byName) {
-                byAddress = null;
-            }
-        }
-        
-        for (PidInfo info : sorted) {
-            if (info.getMatcher() != null
-                && info != byName
-                && info != byAddress) {
-                Matcher m = info.getMatcher();
-                synchronized (m) {
-                    m.reset(address);
-                    if (m.matches()) {
-                        apply(info.getProps(), c, address);
-                    }
-                }
-            }
-        }
-        
-        if (byAddress != null) {
-            apply(byAddress.getProps(), c, address);
-        }
-        if (byName != null) {
-            apply(byName.getProps(), c, address);
-        }
-    }
-
-    private void apply(Dictionary<String, String> d, HTTPConduit c, String 
address) {
-        applyClientPolicies(d, c);
-        applyAuthorization(d, c);
-        applyProxyAuthorization(d, c);
-        if (address != null && address.startsWith(SECURE_HTTP_PREFIX)) {
-            applyTlsClientParameters(d, c);
-        }
-    }
-
-    private void applyTlsClientParameters(Dictionary<String, String> d, 
HTTPConduit c) {
-        Enumeration<String> keys = d.keys();
-        TLSClientParameters p = c.getTlsClientParameters();
-        SecureRandomParameters srp = null;
-        KeyManagersType kmt = null;
-        TrustManagersType tmt = null;
-        while (keys.hasMoreElements()) {
-            String k = keys.nextElement();
-            if (k.startsWith("tlsClientParameters.")) {
-                if (p == null) {
-                    p = new TLSClientParameters();
-                    c.setTlsClientParameters(p);
-                }
-                String v = d.get(k);
-                k = k.substring("tlsClientParameters.".length());
-
-                if ("secureSocketProtocol".equals(k)) {
-                    p.setSecureSocketProtocol(v);
-                } else if ("sslCacheTimeout".equals(k)) {
-                    p.setSslCacheTimeout(Integer.parseInt(v));
-                } else if ("jsseProvider".equals(k)) {
-                    p.setJsseProvider(v);
-                } else if ("disableCNCheck".equals(k)) {
-                    p.setDisableCNCheck(Boolean.parseBoolean(v));
-                } else if 
("useHttpsURLConnectionDefaultHostnameVerifier".equals(k)) {
-                    
p.setUseHttpsURLConnectionDefaultHostnameVerifier(Boolean.parseBoolean(v));
-                } else if 
("useHttpsURLConnectionDefaultSslSocketFactory".equals(k)) {
-                    
p.setUseHttpsURLConnectionDefaultSslSocketFactory(Boolean.parseBoolean(v));
-                } else if (k.startsWith("certConstraints.")) {
-                    k = k.substring("certConstraints.".length());
-                    CertificateConstraintsType cct = p.getCertConstraints();
-                    if (cct == null) {
-                        cct = new CertificateConstraintsType();
-                        p.setCertConstraints(cct);
-                    }
-                    DNConstraintsType dnct = null;
-                    if (k.startsWith("SubjectDNConstraints.")) {
-                        dnct = cct.getSubjectDNConstraints();
-                        if (dnct == null) {
-                            dnct = new DNConstraintsType();
-                            cct.setSubjectDNConstraints(dnct);
-                        }
-                        k = k.substring("SubjectDNConstraints.".length());
-                    } else if (k.startsWith("IssuerDNConstraints.")) {
-                        dnct = cct.getIssuerDNConstraints();
-                        if (dnct == null) {
-                            dnct = new DNConstraintsType();
-                            cct.setIssuerDNConstraints(dnct);
-                        }
-                        k = k.substring("IssuerDNConstraints.".length());
-                    }
-                    if (dnct != null) {
-                        if ("combinator".equals(k)) {
-                            dnct.setCombinator(CombinatorType.fromValue(v));
-                        } else if ("RegularExpression".equals(k)) {
-                            dnct.getRegularExpression().add(k);
-                        }
-                    }
-                } else if (k.startsWith("secureRandomParameters.")) {
-                    k = k.substring("secureRandomParameters.".length());
-                    if (srp == null) {
-                        srp = new SecureRandomParameters();
-                    }
-                    if ("algorithm".equals(k)) {
-                        srp.setAlgorithm(v);
-                    } else if ("provider".equals(k)) {
-                        srp.setProvider(v);
-                    }
-                } else if (k.startsWith("cipherSuitesFilter.")) {
-                    k = k.substring("cipherSuitesFilter.".length());
-                    StringTokenizer st = new StringTokenizer(v, ",");
-                    FiltersType ft = p.getCipherSuitesFilter();
-                    if (ft == null) {
-                        ft = new FiltersType();
-                        p.setCipherSuitesFilter(ft);
-                    }
-                    List<String> lst = "include".equals(k) ? ft.getInclude() : 
ft.getExclude();
-                    while (st.hasMoreTokens()) {
-                        lst.add(st.nextToken());
-                    }
-                } else if (k.startsWith("cipherSuites")) {
-                    StringTokenizer st = new StringTokenizer(v, ",");
-                    while (st.hasMoreTokens()) {
-                        p.getCipherSuites().add(st.nextToken());
-                    }
-                } else if (k.startsWith("trustManagers.")) {
-                    tmt = getTrustManagers(tmt,
-                                          
k.substring("trustManagers.".length()),
-                                          v);
-                } else if (k.startsWith("keyManagers.")) {
-                    kmt = getKeyManagers(kmt,
-                                         k.substring("keyManagers.".length()),
-                                         v);
-                }
-            }
-        }
-        
-        try {
-            if (srp != null) {
-                p.setSecureRandom(TLSParameterJaxBUtils.getSecureRandom(srp));
-            }
-            if (kmt != null) {
-                p.setKeyManagers(TLSParameterJaxBUtils.getKeyManagers(kmt));
-            }
-            if (tmt != null) {
-                
p.setTrustManagers(TLSParameterJaxBUtils.getTrustManagers(tmt));
-            }
-        } catch (RuntimeException e) {
-            throw e;
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    private KeyManagersType getKeyManagers(KeyManagersType keyManagers, String 
k, String v) {
-        if (keyManagers == null) {
-            keyManagers = new KeyManagersType();
-        }
-        if ("factoryAlgorithm".equals(k)) {
-            keyManagers.setFactoryAlgorithm(v);
-        } else if ("provider".equals(k)) {
-            keyManagers.setProvider(v);
-        } else if ("keyPassword".equals(k)) {
-            keyManagers.setKeyPassword(v);
-        } else if (k.startsWith("keyStore.")) {
-            keyManagers.setKeyStore(getKeyStore(keyManagers.getKeyStore(),
-                                                
k.substring("keyStore.".length()),
-                                                v));
-        }
-        return keyManagers;
-    }
-
-    private KeyStoreType getKeyStore(KeyStoreType ks, String k, String v) {
-        if (ks == null) {
-            ks = new KeyStoreType();
-        }
-        if ("type".equals(k)) {
-            ks.setType(v);
-        } else if ("password".equals(k)) {
-            ks.setPassword(v);
-        } else if ("provider".equals(k)) {
-            ks.setProvider(v);
-        } else if ("url".equals(k)) {
-            ks.setUrl(v);
-        } else if ("file".equals(k)) {
-            ks.setFile(v);
-        } else if ("resource".equals(k)) {
-            ks.setResource(v);
-        }
-        return ks;
-    }
-
-    private TrustManagersType getTrustManagers(TrustManagersType tmt, String 
k, String v) {
-        if (tmt == null) {
-            tmt = new TrustManagersType();
-        }
-        if ("provider".equals(k)) {
-            tmt.setProvider(v);
-        } else if ("factoryAlgorithm".equals(k)) {
-            tmt.setFactoryAlgorithm(v);
-        } else if (k.startsWith("keyStore.")) {
-            tmt.setKeyStore(getKeyStore(tmt.getKeyStore(),
-                                        k.substring("keyStore.".length()),
-                                        v));
-        } else if (k.startsWith("certStore")) {
-            tmt.setCertStore(getCertStore(tmt.getCertStore(),
-                                          k.substring("certStore.".length()),
-                                          v));
-        }
-        return tmt;
     }
 
-    private CertStoreType getCertStore(CertStoreType cs, String k, String v) {
-        if (cs == null) {
-            cs = new CertStoreType();
-        }
-        if ("file".equals(k)) {
-            cs.setFile(v);
-        } else if ("url".equals(k)) {
-            cs.setUrl(v);
-        } else if ("resource".equals(k)) {
-            cs.setResource(v);
-        }
-        return cs;
-    }
-
-    private void applyProxyAuthorization(Dictionary<String, String> d, 
HTTPConduit c) {
-        Enumeration<String> keys = d.keys();
-        ProxyAuthorizationPolicy p = c.getProxyAuthorization();
-        while (keys.hasMoreElements()) {
-            String k = keys.nextElement();
-            if (k.startsWith("proxyAuthorization.")) {
-                if (p == null) {
-                    p = new ProxyAuthorizationPolicy();
-                    c.setProxyAuthorization(p);
-                }
-                String v = d.get(k);
-                k = k.substring("proxyAuthorization.".length());
-                
-                if ("UserName".equals(k)) {
-                    p.setUserName(v);
-                } else if ("Password".equals(k)) {
-                    p.setPassword(v);
-                } else if ("Authorization".equals(k)) {
-                    p.setAuthorization(v);
-                } else if ("AuthorizationType".equals(k)) {
-                    p.setAuthorizationType(v);
-                }
-            }
-        }
-    }
-
-    private void applyAuthorization(Dictionary<String, String> d, HTTPConduit 
c) {
-        Enumeration<String> keys = d.keys();
-        AuthorizationPolicy p = c.getAuthorization();
-        while (keys.hasMoreElements()) {
-            String k = keys.nextElement();
-            if (k.startsWith("authorization.")) {
-                if (p == null) {
-                    p = new AuthorizationPolicy();
-                    c.setAuthorization(p);
-                }
-                String v = d.get(k);
-                k = k.substring("authorization.".length());
-                
-                if ("UserName".equals(k)) {
-                    p.setUserName(v);
-                } else if ("Password".equals(k)) {
-                    p.setPassword(v);
-                } else if ("Authorization".equals(k)) {
-                    p.setAuthorization(v);
-                } else if ("AuthorizationType".equals(k)) {
-                    p.setAuthorizationType(v);
-                }
-            }
-        }
-    }
-    
-    
-    private void applyClientPolicies(Dictionary<String, String> d, HTTPConduit 
c) {
-        Enumeration<String> keys = d.keys();
-        HTTPClientPolicy p = c.getClient();
-        while (keys.hasMoreElements()) {
-            String k = keys.nextElement();
-            if (k.startsWith("client.")) {
-                if (p == null) {
-                    p = new HTTPClientPolicy();
-                    c.setClient(p);
-                }
-                String v = d.get(k);
-                k = k.substring("client.".length());
-                if ("ConnectionTimeout".equals(k)) {
-                    p.setConnectionTimeout(Long.parseLong(v.trim()));
-                } else if ("ReceiveTimeout".equals(k)) {
-                    p.setReceiveTimeout(Long.parseLong(v.trim()));
-                } else if ("AsyncExecuteTimeout".equals(k)) {
-                    p.setAsyncExecuteTimeout(Long.parseLong(v.trim()));
-                } else if ("AsyncExecuteTimeoutRejection".equals(k)) {
-                    
p.setAsyncExecuteTimeoutRejection(Boolean.parseBoolean(v.trim()));
-                } else if ("AutoRedirect".equals(k)) {
-                    p.setAutoRedirect(Boolean.parseBoolean(v.trim()));
-                } else if ("MaxRetransmits".equals(k)) {
-                    p.setMaxRetransmits(Integer.parseInt(v.trim()));
-                } else if ("AllowChunking".equals(k)) {
-                    p.setAllowChunking(Boolean.parseBoolean(v.trim()));
-                } else if ("ChunkingThreshold".equals(k)) {
-                    p.setChunkingThreshold(Integer.parseInt(v.trim()));
-                } else if ("ChunkLength".equals(k)) {
-                    p.setChunkLength(Integer.parseInt(v.trim()));
-                } else if ("Connection".equals(k)) {
-                    p.setConnection(ConnectionType.valueOf(v));
-                } else if ("DecoupledEndpoint".equals(k)) {
-                    p.setDecoupledEndpoint(v);
-                } else if ("ProxyServer".equals(k)) {
-                    p.setProxyServer(v);
-                } else if ("ProxyServerPort".equals(k)) {
-                    p.setProxyServerPort(Integer.parseInt(v.trim()));
-                } else if ("ProxyServerType".equals(k)) {
-                    p.setProxyServerType(ProxyServerType.fromValue(v));
-                } else if ("NonProxyHosts".equals(k)) {
-                    p.setNonProxyHosts(v);
-                }
-            }
-        }
-    }
-    
-    
-    
 }

Added: 
cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/osgi/HttpConduitConfigApplier.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/osgi/HttpConduitConfigApplier.java?rev=1516723&view=auto
==============================================================================
--- 
cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/osgi/HttpConduitConfigApplier.java
 (added)
+++ 
cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/osgi/HttpConduitConfigApplier.java
 Fri Aug 23 07:42:28 2013
@@ -0,0 +1,347 @@
+/**
+ * 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.transport.http.osgi;
+
+import java.util.Dictionary;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.StringTokenizer;
+
+import org.apache.cxf.configuration.jsse.TLSClientParameters;
+import org.apache.cxf.configuration.jsse.TLSParameterJaxBUtils;
+import org.apache.cxf.configuration.security.AuthorizationPolicy;
+import org.apache.cxf.configuration.security.CertStoreType;
+import org.apache.cxf.configuration.security.CertificateConstraintsType;
+import org.apache.cxf.configuration.security.CombinatorType;
+import org.apache.cxf.configuration.security.DNConstraintsType;
+import org.apache.cxf.configuration.security.FiltersType;
+import org.apache.cxf.configuration.security.KeyManagersType;
+import org.apache.cxf.configuration.security.KeyStoreType;
+import org.apache.cxf.configuration.security.ProxyAuthorizationPolicy;
+import org.apache.cxf.configuration.security.SecureRandomParameters;
+import org.apache.cxf.configuration.security.TrustManagersType;
+import org.apache.cxf.transport.http.HTTPConduit;
+import org.apache.cxf.transports.http.configuration.ConnectionType;
+import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;
+import org.apache.cxf.transports.http.configuration.ProxyServerType;
+
+/**
+ * Applies configuration properties to a HTTPConduit
+ */
+class HttpConduitConfigApplier {
+    private static final String SECURE_HTTP_PREFIX = "https";
+
+    public HttpConduitConfigApplier() {
+    }
+    
+    void apply(Dictionary<String, String> d, HTTPConduit c, String address) {
+        applyClientPolicies(d, c);
+        applyAuthorization(d, c);
+        applyProxyAuthorization(d, c);
+        if (address != null && address.startsWith(SECURE_HTTP_PREFIX)) {
+            applyTlsClientParameters(d, c);
+        }
+    }
+
+    private void applyTlsClientParameters(Dictionary<String, String> d, 
HTTPConduit c) {
+        Enumeration<String> keys = d.keys();
+        TLSClientParameters p = c.getTlsClientParameters();
+        SecureRandomParameters srp = null;
+        KeyManagersType kmt = null;
+        TrustManagersType tmt = null;
+        while (keys.hasMoreElements()) {
+            String k = keys.nextElement();
+            if (k.startsWith("tlsClientParameters.")) {
+                if (p == null) {
+                    p = new TLSClientParameters();
+                    c.setTlsClientParameters(p);
+                }
+                String v = d.get(k);
+                k = k.substring("tlsClientParameters.".length());
+
+                if ("secureSocketProtocol".equals(k)) {
+                    p.setSecureSocketProtocol(v);
+                } else if ("sslCacheTimeout".equals(k)) {
+                    p.setSslCacheTimeout(Integer.parseInt(v));
+                } else if ("jsseProvider".equals(k)) {
+                    p.setJsseProvider(v);
+                } else if ("disableCNCheck".equals(k)) {
+                    p.setDisableCNCheck(Boolean.parseBoolean(v));
+                } else if 
("useHttpsURLConnectionDefaultHostnameVerifier".equals(k)) {
+                    
p.setUseHttpsURLConnectionDefaultHostnameVerifier(Boolean.parseBoolean(v));
+                } else if 
("useHttpsURLConnectionDefaultSslSocketFactory".equals(k)) {
+                    
p.setUseHttpsURLConnectionDefaultSslSocketFactory(Boolean.parseBoolean(v));
+                } else if (k.startsWith("certConstraints.")) {
+                    k = k.substring("certConstraints.".length());
+                    CertificateConstraintsType cct = p.getCertConstraints();
+                    if (cct == null) {
+                        cct = new CertificateConstraintsType();
+                        p.setCertConstraints(cct);
+                    }
+                    DNConstraintsType dnct = null;
+                    if (k.startsWith("SubjectDNConstraints.")) {
+                        dnct = cct.getSubjectDNConstraints();
+                        if (dnct == null) {
+                            dnct = new DNConstraintsType();
+                            cct.setSubjectDNConstraints(dnct);
+                        }
+                        k = k.substring("SubjectDNConstraints.".length());
+                    } else if (k.startsWith("IssuerDNConstraints.")) {
+                        dnct = cct.getIssuerDNConstraints();
+                        if (dnct == null) {
+                            dnct = new DNConstraintsType();
+                            cct.setIssuerDNConstraints(dnct);
+                        }
+                        k = k.substring("IssuerDNConstraints.".length());
+                    }
+                    if (dnct != null) {
+                        if ("combinator".equals(k)) {
+                            dnct.setCombinator(CombinatorType.fromValue(v));
+                        } else if ("RegularExpression".equals(k)) {
+                            dnct.getRegularExpression().add(k);
+                        }
+                    }
+                } else if (k.startsWith("secureRandomParameters.")) {
+                    k = k.substring("secureRandomParameters.".length());
+                    if (srp == null) {
+                        srp = new SecureRandomParameters();
+                    }
+                    if ("algorithm".equals(k)) {
+                        srp.setAlgorithm(v);
+                    } else if ("provider".equals(k)) {
+                        srp.setProvider(v);
+                    }
+                } else if (k.startsWith("cipherSuitesFilter.")) {
+                    k = k.substring("cipherSuitesFilter.".length());
+                    StringTokenizer st = new StringTokenizer(v, ",");
+                    FiltersType ft = p.getCipherSuitesFilter();
+                    if (ft == null) {
+                        ft = new FiltersType();
+                        p.setCipherSuitesFilter(ft);
+                    }
+                    List<String> lst = "include".equals(k) ? ft.getInclude() : 
ft.getExclude();
+                    while (st.hasMoreTokens()) {
+                        lst.add(st.nextToken());
+                    }
+                } else if (k.startsWith("cipherSuites")) {
+                    StringTokenizer st = new StringTokenizer(v, ",");
+                    while (st.hasMoreTokens()) {
+                        p.getCipherSuites().add(st.nextToken());
+                    }
+                } else if (k.startsWith("trustManagers.")) {
+                    tmt = getTrustManagers(tmt,
+                                          
k.substring("trustManagers.".length()),
+                                          v);
+                } else if (k.startsWith("keyManagers.")) {
+                    kmt = getKeyManagers(kmt,
+                                         k.substring("keyManagers.".length()),
+                                         v);
+                }
+            }
+        }
+        
+        try {
+            if (srp != null) {
+                p.setSecureRandom(TLSParameterJaxBUtils.getSecureRandom(srp));
+            }
+            if (kmt != null) {
+                p.setKeyManagers(TLSParameterJaxBUtils.getKeyManagers(kmt));
+            }
+            if (tmt != null) {
+                
p.setTrustManagers(TLSParameterJaxBUtils.getTrustManagers(tmt));
+            }
+        } catch (RuntimeException e) {
+            throw e;
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    private KeyManagersType getKeyManagers(KeyManagersType keyManagers, String 
k, String v) {
+        if (keyManagers == null) {
+            keyManagers = new KeyManagersType();
+        }
+        if ("factoryAlgorithm".equals(k)) {
+            keyManagers.setFactoryAlgorithm(v);
+        } else if ("provider".equals(k)) {
+            keyManagers.setProvider(v);
+        } else if ("keyPassword".equals(k)) {
+            keyManagers.setKeyPassword(v);
+        } else if (k.startsWith("keyStore.")) {
+            keyManagers.setKeyStore(getKeyStore(keyManagers.getKeyStore(),
+                                                
k.substring("keyStore.".length()),
+                                                v));
+        }
+        return keyManagers;
+    }
+
+    private KeyStoreType getKeyStore(KeyStoreType ks, String k, String v) {
+        if (ks == null) {
+            ks = new KeyStoreType();
+        }
+        if ("type".equals(k)) {
+            ks.setType(v);
+        } else if ("password".equals(k)) {
+            ks.setPassword(v);
+        } else if ("provider".equals(k)) {
+            ks.setProvider(v);
+        } else if ("url".equals(k)) {
+            ks.setUrl(v);
+        } else if ("file".equals(k)) {
+            ks.setFile(v);
+        } else if ("resource".equals(k)) {
+            ks.setResource(v);
+        }
+        return ks;
+    }
+
+    private TrustManagersType getTrustManagers(TrustManagersType tmt, String 
k, String v) {
+        if (tmt == null) {
+            tmt = new TrustManagersType();
+        }
+        if ("provider".equals(k)) {
+            tmt.setProvider(v);
+        } else if ("factoryAlgorithm".equals(k)) {
+            tmt.setFactoryAlgorithm(v);
+        } else if (k.startsWith("keyStore.")) {
+            tmt.setKeyStore(getKeyStore(tmt.getKeyStore(),
+                                        k.substring("keyStore.".length()),
+                                        v));
+        } else if (k.startsWith("certStore")) {
+            tmt.setCertStore(getCertStore(tmt.getCertStore(),
+                                          k.substring("certStore.".length()),
+                                          v));
+        }
+        return tmt;
+    }
+
+    private CertStoreType getCertStore(CertStoreType cs, String k, String v) {
+        if (cs == null) {
+            cs = new CertStoreType();
+        }
+        if ("file".equals(k)) {
+            cs.setFile(v);
+        } else if ("url".equals(k)) {
+            cs.setUrl(v);
+        } else if ("resource".equals(k)) {
+            cs.setResource(v);
+        }
+        return cs;
+    }
+
+    private void applyProxyAuthorization(Dictionary<String, String> d, 
HTTPConduit c) {
+        Enumeration<String> keys = d.keys();
+        ProxyAuthorizationPolicy p = c.getProxyAuthorization();
+        while (keys.hasMoreElements()) {
+            String k = keys.nextElement();
+            if (k.startsWith("proxyAuthorization.")) {
+                if (p == null) {
+                    p = new ProxyAuthorizationPolicy();
+                    c.setProxyAuthorization(p);
+                }
+                String v = d.get(k);
+                k = k.substring("proxyAuthorization.".length());
+                
+                if ("UserName".equals(k)) {
+                    p.setUserName(v);
+                } else if ("Password".equals(k)) {
+                    p.setPassword(v);
+                } else if ("Authorization".equals(k)) {
+                    p.setAuthorization(v);
+                } else if ("AuthorizationType".equals(k)) {
+                    p.setAuthorizationType(v);
+                }
+            }
+        }
+    }
+
+    private void applyAuthorization(Dictionary<String, String> d, HTTPConduit 
c) {
+        Enumeration<String> keys = d.keys();
+        AuthorizationPolicy p = c.getAuthorization();
+        while (keys.hasMoreElements()) {
+            String k = keys.nextElement();
+            if (k.startsWith("authorization.")) {
+                if (p == null) {
+                    p = new AuthorizationPolicy();
+                    c.setAuthorization(p);
+                }
+                String v = d.get(k);
+                k = k.substring("authorization.".length());
+                
+                if ("UserName".equals(k)) {
+                    p.setUserName(v);
+                } else if ("Password".equals(k)) {
+                    p.setPassword(v);
+                } else if ("Authorization".equals(k)) {
+                    p.setAuthorization(v);
+                } else if ("AuthorizationType".equals(k)) {
+                    p.setAuthorizationType(v);
+                }
+            }
+        }
+    }
+    
+    
+    private void applyClientPolicies(Dictionary<String, String> d, HTTPConduit 
c) {
+        Enumeration<String> keys = d.keys();
+        HTTPClientPolicy p = c.getClient();
+        while (keys.hasMoreElements()) {
+            String k = keys.nextElement();
+            if (k.startsWith("client.")) {
+                if (p == null) {
+                    p = new HTTPClientPolicy();
+                    c.setClient(p);
+                }
+                String v = d.get(k);
+                k = k.substring("client.".length());
+                if ("ConnectionTimeout".equals(k)) {
+                    p.setConnectionTimeout(Long.parseLong(v.trim()));
+                } else if ("ReceiveTimeout".equals(k)) {
+                    p.setReceiveTimeout(Long.parseLong(v.trim()));
+                } else if ("AsyncExecuteTimeout".equals(k)) {
+                    p.setAsyncExecuteTimeout(Long.parseLong(v.trim()));
+                } else if ("AsyncExecuteTimeoutRejection".equals(k)) {
+                    
p.setAsyncExecuteTimeoutRejection(Boolean.parseBoolean(v.trim()));
+                } else if ("AutoRedirect".equals(k)) {
+                    p.setAutoRedirect(Boolean.parseBoolean(v.trim()));
+                } else if ("MaxRetransmits".equals(k)) {
+                    p.setMaxRetransmits(Integer.parseInt(v.trim()));
+                } else if ("AllowChunking".equals(k)) {
+                    p.setAllowChunking(Boolean.parseBoolean(v.trim()));
+                } else if ("ChunkingThreshold".equals(k)) {
+                    p.setChunkingThreshold(Integer.parseInt(v.trim()));
+                } else if ("ChunkLength".equals(k)) {
+                    p.setChunkLength(Integer.parseInt(v.trim()));
+                } else if ("Connection".equals(k)) {
+                    p.setConnection(ConnectionType.valueOf(v));
+                } else if ("DecoupledEndpoint".equals(k)) {
+                    p.setDecoupledEndpoint(v);
+                } else if ("ProxyServer".equals(k)) {
+                    p.setProxyServer(v);
+                } else if ("ProxyServerPort".equals(k)) {
+                    p.setProxyServerPort(Integer.parseInt(v.trim()));
+                } else if ("ProxyServerType".equals(k)) {
+                    p.setProxyServerType(ProxyServerType.fromValue(v));
+                } else if ("NonProxyHosts".equals(k)) {
+                    p.setNonProxyHosts(v);
+                }
+            }
+        }
+    }
+}

Propchange: 
cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/osgi/HttpConduitConfigApplier.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain


Reply via email to