22ba5e4a4e2437fad72fb32fe31f2fbd8b0c0342
[so/libs.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *      http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  * ============LICENSE_END=========================================================
15  */
16
17 package com.woorea.openstack.connector;
18
19 import java.io.IOException;
20
21 import javax.net.ssl.SSLContext;
22 import javax.ws.rs.client.Client;
23 import javax.ws.rs.client.ClientBuilder;
24 import javax.ws.rs.client.ClientRequestContext;
25 import javax.ws.rs.client.ClientRequestFilter;
26 import javax.ws.rs.ext.ContextResolver;
27
28 import org.codehaus.jackson.map.DeserializationConfig;
29 import org.codehaus.jackson.map.ObjectMapper;
30 import org.codehaus.jackson.map.SerializationConfig;
31 import org.codehaus.jackson.map.annotate.JsonRootName;
32 import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion;
33 import org.glassfish.jersey.SslConfigurator;
34 import org.glassfish.jersey.jackson.JacksonFeature;
35
36 public class OpenStack {
37
38     public static Client CLIENT;
39     
40     public static ObjectMapper DEFAULT_MAPPER;
41     
42     public static ObjectMapper WRAPPED_MAPPER;
43     
44     static {
45         initialize();
46     }
47     
48     private static void initialize() {
49         
50         /*
51         //class MyX509TrustManager implements X509TrustManager
52         TrustManager mytm[] = null;
53         KeyManager mykm[] = null;
54
55         try {
56             mytm = new TrustManager[]{new MyX509TrustManager("./truststore_client", "asdfgh".toCharArray())};
57             mykm = new KeyManager[]{new MyX509KeyManager("./keystore_client", "asdfgh".toCharArray())};
58         } catch (Exception ex) {
59
60         }
61         
62         SSLContext context = null;
63         context = SSLContext.getInstance("SSL");
64         context.init(mykm, mytm, null);
65         
66         */
67         
68         try {
69             
70             SSLContext context;
71             context = SSLContext.getInstance("SSL");
72             context.init(null, null, null);
73             
74             SslConfigurator sslConfig = SslConfigurator.newInstance();
75                     /*
76                     .trustStoreFile("./truststore_client")
77                     .trustStorePassword("asdfgh")
78
79                     .keyStoreFile("./keystore_client")
80                     .keyPassword("asdfgh");
81                     */
82                     //old: CLIENT.property(ClientProperties.SSL_CONFIG, new SslConfig(context));
83             
84             CLIENT = ClientBuilder.newBuilder().sslContext(sslConfig.createSSLContext()).build();
85             
86             DEFAULT_MAPPER = new ObjectMapper();
87             
88             DEFAULT_MAPPER.setSerializationInclusion(Inclusion.NON_NULL);
89             DEFAULT_MAPPER.enable(SerializationConfig.Feature.INDENT_OUTPUT);
90             DEFAULT_MAPPER.enable(DeserializationConfig.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
91             DEFAULT_MAPPER.disable(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES);
92             DEFAULT_MAPPER.enable(DeserializationConfig.Feature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);
93             
94             WRAPPED_MAPPER = new ObjectMapper();
95             
96             WRAPPED_MAPPER.setSerializationInclusion(Inclusion.NON_NULL);
97             WRAPPED_MAPPER.enable(SerializationConfig.Feature.INDENT_OUTPUT);
98             WRAPPED_MAPPER.enable(SerializationConfig.Feature.WRAP_ROOT_VALUE);
99             WRAPPED_MAPPER.enable(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE);
100             WRAPPED_MAPPER.enable(DeserializationConfig.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
101             WRAPPED_MAPPER.disable(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES);
102             WRAPPED_MAPPER.enable(DeserializationConfig.Feature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);
103             
104             CLIENT.register(new JacksonFeature()).register(new ContextResolver<ObjectMapper>() {
105
106                 @Override
107                 public ObjectMapper getContext(Class<?> type) {
108                     return type.getAnnotation(JsonRootName.class) == null ? DEFAULT_MAPPER : WRAPPED_MAPPER;
109                 }
110                 
111             });
112             
113             CLIENT.register(new ClientRequestFilter() {
114                 
115                 @Override
116                 public void filter(ClientRequestContext requestContext) throws IOException {
117                     requestContext.getHeaders().remove("Content-Language");
118                     requestContext.getHeaders().remove("Content-Encoding");
119                 }
120             });
121             
122         } catch(Exception e) {
123             throw new RuntimeException(e.getMessage(), e);
124         }
125         
126     }
127
128 }