4add8653e4a0602a3621b050917273f987a282d5
[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 = null;
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                                 public ObjectMapper getContext(Class<?> type) {
107                                         return type.getAnnotation(JsonRootName.class) == null ? DEFAULT_MAPPER : WRAPPED_MAPPER;
108                                 }
109                                 
110                         });
111                         
112                         CLIENT.register(new ClientRequestFilter() {
113                                 
114                                 public void filter(ClientRequestContext requestContext) throws IOException {
115                                         requestContext.getHeaders().remove("Content-Language");
116                                         requestContext.getHeaders().remove("Content-Encoding");
117                                 }
118                         });
119                         
120                 } catch(Exception e) {
121                         throw new RuntimeException(e.getMessage(), e);
122                 }
123                 
124         }
125
126 }