1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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
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 }