import javax.ws.rs.core.MultivaluedHashMap;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.Response;
+
import org.glassfish.jersey.client.HttpUrlConnectorProvider;
+
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
* @param status
* @return the ID of the logic link
*/
- public String getLogicLink(String networkId, String pnfName, String ifName, String status) {
+ public String getLogicLink(String networkId, String pnfName, String ifName, String status) throws CorrelationException {
Map<String, String> params = new HashMap<>();
params.put("networkId", networkId);
params.put("pnfName", pnfName);
Response response = get(getHostAddr(), getPath(AaiConfig.MsbConsts.AAI_LINK_QUERY, params)
+ (status == null ? "" : String.format("&operational-status=%s", status)));
- if (response.getStatusInfo().getFamily() != Response.Status.Family.SUCCESSFUL) {
- throw new RuntimeException("Failed to connect to AAI. Cause: "
- + response.getStatusInfo().getReasonPhrase());
- }
-
- JSONObject linkInfo = getInfo(JSONObject.toJSONString(response.getEntity()), "p-interface", "logical-link");
+ JSONObject linkInfo = getInfo(response.readEntity(String.class), "p-interface", "logical-link");
return extractValueFromJsonArray(linkInfo.getJSONArray("relationship-data"), "logical-link.link-name");
}
}
Response response = get(getHostAddr(), getPath(serviceInstancePath));
- if (response.getStatusInfo().getFamily() != Response.Status.Family.SUCCESSFUL) {
- throw new RuntimeException("Failed to connect to AAI. Cause: "
- + response.getStatusInfo().getReasonPhrase());
- }
- JSONArray instances = getInstances(JSONObject.toJSONString(response.getEntity()));
+ JSONArray instances = getInstances(response.readEntity(String.class));
for (int i = 0; i < instances.size(); ++i) {
JSONObject instance = instances.getJSONObject(i);
Response res = get(getHostAddr(), serviceInstancePath + "/service-instances?service-instance-id="
+ instance.getString("service-instance-id"));
- if (res.getStatusInfo().getFamily() != Response.Status.Family.SUCCESSFUL) {
- throw new RuntimeException("Failed to connect to AAI. Cause: "
- + response.getStatusInfo().getReasonPhrase());
- }
- String inputParams = JSONObject.parseObject(response.readEntity(String.class)).getString("input-parameters");
+ String inputParams = JSONObject.parseObject(res.readEntity(String.class)).getString("input-parameters");
instance.put("input-parameters", inputParams);
instance.put("globalSubscriberId", params[0]);
instance.put("serviceType", params[1]);
params.put("networkId", networkId);
params.put("pnfName", pnfName);
params.put("ifName", ifName);
- Response response = patch(getHostAddr(), getPath(AaiConfig.MsbConsts.AAI_TP_UPDATE, params), body);
- if (response.getStatusInfo().getFamily() != Response.Status.Family.SUCCESSFUL) {
- throw new CorrelationException("Failed to connecto to AAI. Cause: "
- + response.getStatusInfo().getReasonPhrase());
- }
+ patch(getHostAddr(), getPath(AaiConfig.MsbConsts.AAI_TP_UPDATE, params), body);
}
public void updateLogicLinkStatus(String linkName, Map<String, Object> body) throws CorrelationException {
- Response response = patch(getHostAddr(),
+ patch(getHostAddr(),
getPath(AaiConfig.MsbConsts.AAI_TP_UPDATE, "linkName", linkName), body);
- if (response.getStatusInfo().getFamily() != Response.Status.Family.SUCCESSFUL) {
- throw new CorrelationException("Failed to connecto to AAI. Cause: "
- + response.getStatusInfo().getReasonPhrase());
- }
}
private JSONObject getVpnBindingInfo(String networkId, String pnfName,
params.put("ifName", ifName);
params.put("status", status);
Response response = get(getHostAddr(), getPath(AaiConfig.MsbConsts.AAI_VPN_ADDR, params));
- if (response.getStatusInfo().getFamily() != Response.Status.Family.SUCCESSFUL) {
- throw new CorrelationException("Failed to connecto to AAI. Cause: "
- + response.getStatusInfo().getReasonPhrase());
- }
- return getInfo(JSONObject.toJSONString(response.getEntity()), "p-interface", "vpn-binding");
+ return getInfo(response.readEntity(String.class), "p-interface", "vpn-binding");
}
private JSONObject getConnectivityInfo(String vpnId) throws CorrelationException {
Response response = get(getHostAddr(), getPath(AaiConfig.MsbConsts.AAI_CONN_ADDR, "vpnId", vpnId));
- if (response.getStatusInfo().getFamily() != Response.Status.Family.SUCCESSFUL) {
- throw new CorrelationException("Failed to connect to AAI. Cause: "
- + response.getStatusInfo().getReasonPhrase());
- }
- return getInfo(JSONObject.toJSONString(response.getEntity()), "vpn-binding", "connectivity");
+ return getInfo(response.readEntity(String.class), "vpn-binding", "connectivity");
}
private JSONObject getServiceInstanceByConn(String connectivityId) throws CorrelationException {
Response response = get(getHostAddr(), getPath(AaiConfig.MsbConsts.AAI_SERVICE_INSTANCE_ADDR_4_CCVPN,
"connectivityId", connectivityId));
- if (response.getStatusInfo().getFamily() != Response.Status.Family.SUCCESSFUL) {
- throw new CorrelationException("Failed to connect to AAI. Cause: "
- + response.getStatusInfo().getReasonPhrase());
- }
- return getInfo(JSONObject.toJSONString(response.getEntity()), "connectivity", "service-instance");
+ return getInfo(response.readEntity(String.class), "connectivity", "service-instance");
}
private JSONArray getServiceInstances(String globalCustomerId, String serviceType) throws CorrelationException {
params.put("global-customer-id", globalCustomerId);
params.put("service-type", serviceType);
Response response = get(getHostAddr(), getPath(AaiConfig.MsbConsts.AAI_SERVICE_INSTANCES_ADDR_4_CCVPN, params));
- if (response.getStatusInfo().getFamily() != Response.Status.Family.SUCCESSFUL) {
- throw new CorrelationException("Failed to connect to AAI. Cause: "
- + response.getStatusInfo().getReasonPhrase());
- }
- return getInstances(JSONObject.toJSONString(response.getEntity()));
+ return getInstances(response.readEntity(String.class));
}
private String getPath(String urlTemplate, Map<String, String> pathParams) {
return ret;
}
- private Response get(String host, String path) {
+ private Response get(String host, String path) throws CorrelationException {
Client client = ClientBuilder.newClient();
WebTarget target = client.target(host).path(path);
- return target.request().headers(getAaiHeaders()).get();
+ try {
+ Response response = target.request().headers(getAaiHeaders()).get();
+ if (response.getStatusInfo().getFamily() != Response.Status.Family.SUCCESSFUL) {
+ throw new CorrelationException("Failed to connect to AAI. \nCause: "
+ + response.getStatusInfo().getReasonPhrase() + "\nDetails: \n"
+ + getErrorMsg(String.format("%s%s", host, path), null, response));
+ }
+ return response;
+ } catch (CorrelationException e) {
+ throw e;
+ } catch (Exception e) {
+ throw new CorrelationException(e.getMessage() + "More info: "
+ + getErrorMsg(String.format("%s%s", host, path), null, null), e);
+ }
}
- private Response patch(String host, String path, Map<String, Object> body) {
+ private void patch(String host, String path, Map<String, Object> body) throws CorrelationException {
Client client = ClientBuilder.newClient();
WebTarget target = client.target(host).path(path);
- return target.request().headers(getAaiHeaders()).build("PATCH", Entity.json(body))
- .property(HttpUrlConnectorProvider.SET_METHOD_WORKAROUND, true).invoke();
+ try {
+ Response response = target.request().headers(getAaiHeaders()).build("PATCH", Entity.json(body))
+ .property(HttpUrlConnectorProvider.SET_METHOD_WORKAROUND, true).invoke();
+ if (response.getStatusInfo().getFamily() != Response.Status.Family.SUCCESSFUL) {
+ throw new CorrelationException("Failed to connecto to AAI. \nCause: "
+ + response.getStatusInfo().getReasonPhrase() + "\nDetails: \n"
+ + getErrorMsg(String.format("%s%s", host, path), body, response));
+ }
+ } catch (CorrelationException e) {
+ throw e;
+ } catch (Exception e) {
+ throw new CorrelationException(e.getMessage() + "More info: "
+ + getErrorMsg(String.format("%s%s", host, path), body, null), e);
+ }
}
private JSONObject getInfo(String response, String pField, String field) {
}
private String getHostAddr() {
- String[] msbInfo = MicroServiceConfig.getMsbServerAddrWithHttpPrefix().split(":");
- StringBuilder sb = new StringBuilder("http://");
- sb.append(msbInfo[0]).append(msbInfo[1]);
- return sb.toString();
+ return MicroServiceConfig.getMsbServerAddrWithHttpPrefix();
}
private String extractValueFromJsonArray(JSONArray relationshipData, String keyName) {
}
return null;
}
+
+ private String getErrorMsg(String url, Map<String, Object> body, Response response) {
+ StringBuilder sb = new StringBuilder();
+ sb.append("Rerquest URL: ").append(url).append("\n");
+ sb.append("Request Header: ").append(JSONObject.toJSONString(headers)).append("\n");
+ if (body != null) {
+ sb.append("Request Body: ").append(JSONObject.toJSONString(body)).append("\n");
+ }
+ if (response != null) {
+ sb.append("Request Body: ").append(response.readEntity(String.class));
+ }
+ return sb.toString();
+ }
}
/**\r
* Copyright 2017 ZTE Corporation.\r
- *\r
+ * <p>\r
* Licensed under the Apache License, Version 2.0 (the "License");\r
* you may not use this file except in compliance with the License.\r
* You may obtain a copy of the License at\r
- *\r
- * http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
+ * <p>\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ * <p>\r
* Unless required by applicable law or agreed to in writing, software\r
* distributed under the License is distributed on an "AS IS" BASIS,\r
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
\r
import com.alibaba.fastjson.JSON;\r
import com.alibaba.fastjson.JSONObject;\r
+\r
import javax.ws.rs.client.Client;\r
import javax.ws.rs.client.ClientBuilder;\r
import javax.ws.rs.core.Response;\r
+\r
import lombok.extern.slf4j.Slf4j;\r
import org.onap.holmes.common.constant.AlarmConst;\r
\r
public static String getMsbServerAddrWithHttpPrefix() {\r
String[] addrInfo = getMsbIpAndPort();\r
String ret = addrInfo[0] + ":" + addrInfo[1];\r
- if (!ret.startsWith(AlarmConst.HTTP) || !ret.startsWith(AlarmConst.HTTPS)){\r
+ if (!ret.startsWith(AlarmConst.HTTP) || !ret.startsWith(AlarmConst.HTTPS)) {\r
ret = AlarmConst.HTTP + ret;\r
}\r
return ret;\r
String[] serviceAddrInfo = null;\r
String info = getServiceAddrInfoFromDcaeConsulByHostName(getEnv(HOSTNAME));\r
log.info("Got the service information of \"" + getEnv(HOSTNAME) + "\" from Consul. The response is " + info + ".");\r
- if (info != null && !info.isEmpty()){\r
+ if (info != null && !info.isEmpty()) {\r
serviceAddrInfo = split(info);\r
} else {\r
serviceAddrInfo = split(getEnv(HOSTNAME));\r
private static String[] split(String addr) {\r
String ip;\r
String port = "80";\r
- if (addr.lastIndexOf(":") == -1){\r
+ if (addr.lastIndexOf(":") == -1) {\r
ip = addr;\r
} else if (addr.lastIndexOf(":") < 5 && addr.indexOf("://") != -1) {\r
ip = addr.substring(addr.indexOf("//") + 2); //remove the http(s):// prefix\r
ip = addr.substring(addr.indexOf("://") != -1 ? addr.indexOf("//") + 2 : 0, addr.lastIndexOf(":"));\r
port = addr.substring(addr.lastIndexOf(":") + 1);\r
}\r
- return new String[] {ip, port};\r
+ return new String[]{ip, port};\r
}\r
\r
}\r
}
@Test
- public void test_getLogicLink_exception() {
+ public void test_getLogicLink_exception() throws CorrelationException {
mockGetMethod();
EasyMock.expect(response.getStatusInfo()).andReturn(Response.Status.NOT_FOUND).times(2);
+ EasyMock.expect(response.readEntity(String.class)).andReturn("Error!");
- thrown.expect(RuntimeException.class);
+ thrown.expect(CorrelationException.class);
PowerMock.replayAll();
}
@Test
- public void test_getLogicLink() {
+ public void test_getLogicLink() throws CorrelationException {
mockGetMethod();
- EasyMock.expect(response.getEntity()).andReturn(data.getJSONObject("logic-link"));
+ EasyMock.expect(response.readEntity(String.class)).andReturn(data.getJSONObject("logic-link").toJSONString());
EasyMock.expect(response.getStatusInfo()).andReturn(Response.Status.OK);
PowerMock.replayAll();
@Test
public void test_getServiceInstances_exception() {
mockGetMethod();
- EasyMock.expect(response.getEntity()).andReturn(data.getJSONObject("vpn-binding"));
+ EasyMock.expect(response.readEntity(String.class)).andReturn(data.getJSONObject("vpn-binding").toJSONString());
EasyMock.expect(response.getStatusInfo()).andReturn(Response.Status.OK);
mockGetMethod();
- EasyMock.expect(response.getEntity()).andReturn(data.getJSONObject("connectivity"));
+ EasyMock.expect(response.readEntity(String.class)).andReturn(data.getJSONObject("connectivity").toJSONString());
EasyMock.expect(response.getStatusInfo()).andReturn(Response.Status.OK);
mockGetMethod();
- EasyMock.expect(response.getEntity()).andReturn(data.getJSONObject("service-instance-by-connectivity"));
+ EasyMock.expect(response.readEntity(String.class))
+ .andReturn(data.getJSONObject("service-instance-by-connectivity").toJSONString());
EasyMock.expect(response.getStatusInfo()).andReturn(Response.Status.OK);
mockGetMethod();
- EasyMock.expect(response.getEntity()).andReturn(data.getJSONObject("service-instances-by-service-type"));
+ EasyMock.expect(response.readEntity(String.class))
+ .andReturn(data.getJSONObject("service-instances-by-service-type").toJSONString());
EasyMock.expect(response.getStatusInfo()).andReturn(Response.Status.NOT_FOUND).times(2);
mockGetMethod();
@Test
public void test_getServiceInstances() {
mockGetMethod();
- EasyMock.expect(response.getEntity()).andReturn(data.getJSONObject("vpn-binding"));
+ EasyMock.expect(response.readEntity(String.class)).andReturn(data.getJSONObject("vpn-binding").toJSONString());
EasyMock.expect(response.getStatusInfo()).andReturn(Response.Status.OK);
mockGetMethod();
- EasyMock.expect(response.getEntity()).andReturn(data.getJSONObject("connectivity"));
+ EasyMock.expect(response.readEntity(String.class)).andReturn(data.getJSONObject("connectivity").toJSONString());
EasyMock.expect(response.getStatusInfo()).andReturn(Response.Status.OK);
mockGetMethod();
- EasyMock.expect(response.getEntity()).andReturn(data.getJSONObject("service-instance-by-connectivity"));
+ EasyMock.expect(response.readEntity(String.class))
+ .andReturn(data.getJSONObject("service-instance-by-connectivity").toJSONString());
EasyMock.expect(response.getStatusInfo()).andReturn(Response.Status.OK);
mockGetMethod();
- EasyMock.expect(response.getEntity()).andReturn(data.getJSONObject("service-instances-by-service-type"));
+ EasyMock.expect(response.readEntity(String.class))
+ .andReturn(data.getJSONObject("service-instances-by-service-type").toJSONString());
EasyMock.expect(response.getStatusInfo()).andReturn(Response.Status.OK);
mockGetMethod();
@Test
public void test_getServiceInstances_1() throws Exception {
mockGetMethod();
- EasyMock.expect(response.getEntity()).andReturn(data.getJSONObject("service-instances-by-service-type"));
+ EasyMock.expect(response.readEntity(String.class))
+ .andReturn(data.getJSONObject("service-instances-by-service-type").toJSONString());
EasyMock.expect(response.getStatusInfo()).andReturn(Response.Status.OK);
PowerMock.replayAll();
@Test
public void test_getServiceInstances_1_exception() throws Exception {
mockGetMethod();
- EasyMock.expect(response.getEntity()).andReturn(data.getJSONObject("service-instances-by-service-type"));
+ EasyMock.expect(response.readEntity(String.class)).andReturn("Failed to get the service instance by type.");
EasyMock.expect(response.getStatusInfo()).andReturn(Response.Status.NOT_FOUND).times(2);
thrown.expect(CorrelationException.class);
public void test_updateTerminalPointStatus_exception() throws CorrelationException {
mockPatchMethod();
EasyMock.expect(response.getStatusInfo()).andReturn(Response.Status.NOT_FOUND).times(2);
+ EasyMock.expect(response.readEntity(String.class)).andReturn("Failed to update the TP information.");
thrown.expect(CorrelationException.class);
public void test_updateLogicLinkStatus_exception() throws CorrelationException {
mockPatchMethod();
EasyMock.expect(response.getStatusInfo()).andReturn(Response.Status.NOT_FOUND).times(2);
+ EasyMock.expect(response.readEntity(String.class)).andReturn("Failed to update the logic link information.");
thrown.expect(CorrelationException.class);