2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
6 * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
7 * ================================================================================
8 * Modifications Copyright (C) 2018.
9 * ================================================================================
10 * Licensed under the Apache License, Version 2.0 (the "License");
11 * you may not use this file except in compliance with the License.
12 * You may obtain a copy of the License at
14 * http://www.apache.org/licenses/LICENSE-2.0
16 * Unless required by applicable law or agreed to in writing, software
17 * distributed under the License is distributed on an "AS IS" BASIS,
18 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19 * See the License for the specific language governing permissions and
20 * limitations under the License.
21 * ============LICENSE_END=========================================================
24 package org.onap.so.adapters.vfc.util;
26 import java.net.HttpURLConnection;
27 import java.net.SocketTimeoutException;
29 import javax.ws.rs.core.UriBuilder;
31 import org.apache.http.HttpResponse;
32 import org.apache.http.client.HttpClient;
33 import org.apache.http.client.config.RequestConfig;
34 import org.apache.http.client.methods.HttpDelete;
35 import org.apache.http.client.methods.HttpGet;
36 import org.apache.http.client.methods.HttpPost;
37 import org.apache.http.client.methods.HttpPut;
38 import org.apache.http.client.methods.HttpRequestBase;
39 import org.apache.http.conn.ConnectTimeoutException;
40 import org.apache.http.entity.ContentType;
41 import org.apache.http.entity.StringEntity;
42 import org.apache.http.impl.client.HttpClientBuilder;
43 import org.apache.http.util.EntityUtils;
44 import org.onap.so.adapters.vfc.model.RestfulResponse;
45 import org.onap.so.logger.MessageEnum;
46 import org.onap.so.logger.MsoAlarmLogger;
47 import org.onap.so.logger.MsoLogger;
48 import org.springframework.beans.factory.annotation.Autowired;
49 import org.springframework.core.env.Environment;
50 import org.springframework.stereotype.Component;
56 * utility to invoke restclient
59 * @version ONAP Amsterdam Release 2017-9-6
62 public class RestfulUtil {
67 private static final MsoLogger LOGGER = MsoLogger.getMsoLogger(MsoLogger.Catalog.RA, RestfulUtil.class);
69 private static final MsoAlarmLogger ALARMLOGGER = new MsoAlarmLogger();
71 private static final int DEFAULT_TIME_OUT = 60000;
73 private static final String ONAP_IP = "ONAP_IP";
75 private static final String DEFAULT_MSB_IP = "127.0.0.1";
77 private static final Integer DEFAULT_MSB_PORT = 80;
79 private static final String VFC_ADAPTER="VFC Adapter";
82 private Environment env;
84 public String getMsbHost() {
85 // MSB_IP will be set as ONAP_IP environment parameter in install flow.
86 String msbIp = System.getenv().get(ONAP_IP);
87 // if ONAP IP is not set. get it from config file.
88 if(null == msbIp || msbIp.isEmpty()) {
89 msbIp = env.getProperty("mso.msb-ip", DEFAULT_MSB_IP);
91 Integer msbPort = env.getProperty("mso.msb-port", Integer.class, DEFAULT_MSB_PORT);
93 return UriBuilder.fromPath("").host(msbIp).port(msbPort).scheme("http").build().toString();
96 private RestfulUtil() {
100 public RestfulResponse send(String url, String methodType, String content) {
101 String msbUrl = getMsbHost() + url;
102 LOGGER.info(MessageEnum.RA_NS_EXC, "Begin to sent message " + methodType +": " + msbUrl, "org.onap.so.adapters.vfc.util.RestfulUtil",VFC_ADAPTER);
104 HttpRequestBase method = null;
105 HttpResponse httpResponse = null;
108 int timeout = DEFAULT_TIME_OUT;
110 RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(timeout).setConnectTimeout(timeout)
111 .setConnectionRequestTimeout(timeout).build();
113 HttpClient client = HttpClientBuilder.create().build();
115 if("POST".equalsIgnoreCase(methodType)) {
116 HttpPost httpPost = new HttpPost(msbUrl);
117 httpPost.setConfig(requestConfig);
118 httpPost.setEntity(new StringEntity(content, ContentType.APPLICATION_JSON));
120 } else if("PUT".equalsIgnoreCase(methodType)) {
121 HttpPut httpPut = new HttpPut(msbUrl);
122 httpPut.setConfig(requestConfig);
123 httpPut.setEntity(new StringEntity(content, ContentType.APPLICATION_JSON));
125 } else if("GET".equalsIgnoreCase(methodType)) {
126 HttpGet httpGet = new HttpGet(msbUrl);
127 httpGet.setConfig(requestConfig);
129 } else if("DELETE".equalsIgnoreCase(methodType)) {
130 HttpDelete httpDelete = new HttpDelete(msbUrl);
131 httpDelete.setConfig(requestConfig);
135 // now VFC have no auth
136 // String userCredentials =
137 // SDNCAdapterProperties.getEncryptedProperty(Constants.SDNC_AUTH_PROP,
138 // Constants.DEFAULT_SDNC_AUTH, Constants.ENCRYPTION_KEY);
139 // String authorization = "Basic " +
140 // DatatypeConverter.printBase64Binary(userCredentials.getBytes());
141 // method.setHeader("Authorization", authorization);
143 httpResponse = client.execute(method);
145 String responseContent = null;
146 if(httpResponse.getEntity() != null) {
147 responseContent = EntityUtils.toString(httpResponse.getEntity(), "UTF-8");
150 int statusCode = httpResponse.getStatusLine().getStatusCode();
151 String statusMessage = httpResponse.getStatusLine().getReasonPhrase();
153 LOGGER.debug("VFC Response: " + statusCode + " " + statusMessage
154 + (responseContent == null ? "" : System.lineSeparator() + responseContent));
156 if(httpResponse.getStatusLine().getStatusCode() >= 300) {
157 String errMsg = "VFC returned " + statusCode + " " + statusMessage;
159 return createResponse(statusCode, errMsg);
167 LOGGER.debug("method is NULL:");
171 return createResponse(statusCode, responseContent);
173 } catch(SocketTimeoutException | ConnectTimeoutException e) {
174 String errMsg = "Request to VFC timed out";
176 return createResponse(HttpURLConnection.HTTP_CLIENT_TIMEOUT, errMsg);
178 } catch(Exception e) {
179 String errMsg = "Error processing request to VFC";
181 return createResponse(HttpURLConnection.HTTP_INTERNAL_ERROR, errMsg);
184 if(httpResponse != null) {
186 EntityUtils.consume(httpResponse.getEntity());
187 } catch(Exception e) {
188 LOGGER.debug("Exception :", e);
195 } catch(Exception e) {
196 LOGGER.debug("Exception :", e);
202 private static void logError(String errMsg, Throwable t) {
203 LOGGER.error(MessageEnum.RA_NS_EXC, VFC_ADAPTER, "", MsoLogger.ErrorCode.AvailabilityError, errMsg, t);
204 ALARMLOGGER.sendAlarm("MsoInternalError", MsoAlarmLogger.CRITICAL, errMsg);
207 private static void logError(String errMsg) {
208 LOGGER.error(MessageEnum.RA_NS_EXC, VFC_ADAPTER, "", MsoLogger.ErrorCode.AvailabilityError, errMsg);
209 ALARMLOGGER.sendAlarm("MsoInternalError", MsoAlarmLogger.CRITICAL, errMsg);
212 private static RestfulResponse createResponse(int statusCode, String content) {
213 RestfulResponse rsp = new RestfulResponse();
214 rsp.setStatus(statusCode);
215 rsp.setResponseContent(content);