View Javadoc
1   /*
2    * #%L
3    * wcm.io
4    * %%
5    * Copyright (C) 2016 wcm.io
6    * %%
7    * Licensed under the Apache License, Version 2.0 (the "License");
8    * you may not use this file except in compliance with the License.
9    * You may obtain a copy of the License at
10   *
11   *      http://www.apache.org/licenses/LICENSE-2.0
12   *
13   * Unless required by applicable law or agreed to in writing, software
14   * distributed under the License is distributed on an "AS IS" BASIS,
15   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16   * See the License for the specific language governing permissions and
17   * limitations under the License.
18   * #L%
19   */
20  package io.wcm.caravan.jaxws.consumer.httpclient.impl;
21  
22  import java.net.URI;
23  import java.net.URISyntaxException;
24  import java.util.Map;
25  import java.util.concurrent.ConcurrentSkipListMap;
26  
27  import org.apache.commons.lang3.StringUtils;
28  import org.apache.sling.commons.osgi.ServiceUtil;
29  import org.osgi.service.component.annotations.Component;
30  import org.osgi.service.component.annotations.Reference;
31  import org.osgi.service.component.annotations.ReferenceCardinality;
32  import org.osgi.service.component.annotations.ReferencePolicy;
33  
34  import io.wcm.caravan.commons.httpclient.HttpClientConfig;
35  import io.wcm.caravan.jaxws.consumer.JaxWsClientInitializer;
36  import io.wcm.caravan.jaxws.consumer.httpclient.JaxWsClientInitializerHttpClientConfig;
37  
38  /**
39   * Implementation of {@link JaxWsClientInitializerHttpClientConfig}-
40   */
41  @Component(immediate = true, service = JaxWsClientInitializerHttpClientConfig.class)
42  public class JaxWsClientInitializerHttpClientConfigImpl implements JaxWsClientInitializerHttpClientConfig {
43  
44    @Reference(service = HttpClientConfig.class,
45        cardinality = ReferenceCardinality.MULTIPLE, policy = ReferencePolicy.DYNAMIC,
46        bind = "bindHttpClientConfig", unbind = "unbindHttpClientConfig")
47    private final Map<Comparable<Object>, HttpClientConfig> configItems = new ConcurrentSkipListMap<>();
48  
49    protected void bindHttpClientConfig(HttpClientConfig httpClientConfig, Map<String, Object> config) {
50      configItems.put(ServiceUtil.getComparableForServiceRanking(config), httpClientConfig);
51    }
52  
53    @SuppressWarnings("unused")
54    protected void unbindHttpClientConfig(HttpClientConfig httpClientConfig, Map<String, Object> config) {
55      configItems.remove(ServiceUtil.getComparableForServiceRanking(config));
56    }
57  
58    @Override
59    public JaxWsClientInitializer get(String url) {
60      JaxWsClientInitializer jaxWsClientInitializer = new JaxWsClientInitializer();
61      apply(jaxWsClientInitializer, url);
62      return jaxWsClientInitializer;
63    }
64  
65    @Override
66    public void apply(JaxWsClientInitializer jaxWsClientInitializer, String url) {
67      if (StringUtils.isBlank(url)) {
68        throw new IllegalArgumentException("URL is missing");
69      }
70      URI uri;
71      try {
72        uri = new URI(url);
73      }
74      catch (URISyntaxException ex) {
75        throw new IllegalArgumentException("Invalid URL: " + ex.getMessage());
76      }
77  
78      for (HttpClientConfig configItem : configItems.values()) {
79        if (configItem.matchesHost(uri.getHost()) && configItem.matchesPath(uri.getPath())
80            && configItem.matchesWsAddressingToUri(jaxWsClientInitializer.getWSAddressingToUri())) {
81          apply(jaxWsClientInitializer, configItem);
82          break;
83        }
84      }
85    }
86  
87    private void apply(JaxWsClientInitializer jaxws, HttpClientConfig config) {
88      jaxws.setConnectTimeout(config.getConnectTimeout());
89      jaxws.setSocketTimeout(config.getSocketTimeout());
90      jaxws.setHttpUser(config.getHttpUser());
91      jaxws.setHttpPassword(config.getHttpPassword());
92      jaxws.setProxyHost(config.getProxyHost());
93      jaxws.setProxyPort(config.getProxyPort());
94      jaxws.setProxyUser(config.getProxyUser());
95      jaxws.setProxyPassword(config.getProxyPassword());
96      jaxws.setSslContextType(config.getSslContextType());
97      jaxws.setKeyManagerType(config.getKeyManagerType());
98      jaxws.setKeyStoreType(config.getKeyStoreType());
99      jaxws.setKeyStoreProvider(config.getKeyStoreProvider());
100     jaxws.setKeyStorePath(config.getKeyStorePath());
101     jaxws.setKeyStorePassword(config.getKeyStorePassword());
102     jaxws.setTrustManagerType(config.getTrustManagerType());
103     jaxws.setTrustStoreType(config.getTrustStoreType());
104     jaxws.setTrustStoreProvider(config.getTrustStoreProvider());
105     jaxws.setTrustStorePath(config.getTrustStorePath());
106     jaxws.setTrustStorePassword(config.getTrustStorePassword());
107   }
108 
109 }