X-Git-Url: https://gerrit.onap.org/r/gitweb?p=dmaap%2Fdatarouter.git;a=blobdiff_plain;f=datarouter-prov%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fdmaap%2Fdatarouter%2Fprovisioning%2FSubscriptionServlet.java;h=715c5e140421e2e95d5daf2527f2a8edb347dbb5;hp=ff3ed3c110668ab0c813bad672915b8b55da9085;hb=6c78b3e6a0a67c73f931337356a172cc69cee0e8;hpb=3ebd2534167e73426d2b19efb05eaf9892f6f9d6 diff --git a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/SubscriptionServlet.java b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/SubscriptionServlet.java index ff3ed3c1..715c5e14 100644 --- a/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/SubscriptionServlet.java +++ b/datarouter-prov/src/main/java/org/onap/dmaap/datarouter/provisioning/SubscriptionServlet.java @@ -24,16 +24,18 @@ package org.onap.dmaap.datarouter.provisioning; +import static org.onap.dmaap.datarouter.provisioning.utils.HttpServletUtils.sendResponseError; + +import com.att.eelf.configuration.EELFLogger; +import com.att.eelf.configuration.EELFManager; import java.io.IOException; import java.io.InvalidObjectException; import java.net.HttpURLConnection; import java.net.URL; +import java.util.ArrayList; import java.util.List; -import java.util.Vector; - import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; - import org.json.JSONException; import org.json.JSONObject; import org.onap.dmaap.datarouter.authz.AuthorizationResponse; @@ -41,11 +43,6 @@ import org.onap.dmaap.datarouter.provisioning.beans.EventLogRecord; import org.onap.dmaap.datarouter.provisioning.beans.Subscription; import org.onap.dmaap.datarouter.provisioning.eelf.EelfMsgs; -import com.att.eelf.configuration.EELFLogger; -import com.att.eelf.configuration.EELFManager; - -import static org.onap.dmaap.datarouter.provisioning.utils.HttpServletUtils.sendResponseError; - /** * This servlet handles provisioning for the <subscriptionURL> which is generated by the provisioning server to * handle the inspection, modification, and deletion of a particular subscription to a feed. It supports DELETE to @@ -63,6 +60,10 @@ public class SubscriptionServlet extends ProxyServlet { private static EELFLogger eelfLogger = EELFManager.getInstance() .getLogger(SubscriptionServlet.class); + + + + /** * DELETE on the <subscriptionUrl> -- delete a subscription. See the Deleting a Subscription section in * the Provisioning API document for details on how this method should be invoked. @@ -88,7 +89,7 @@ public class SubscriptionServlet extends ProxyServlet { } String bhdr = req.getHeader(BEHALF_HEADER); if (bhdr == null) { - message = "Missing " + BEHALF_HEADER + " header."; + message = MISSING_ON_BEHALF; elr.setMessage(message); elr.setResult(HttpServletResponse.SC_BAD_REQUEST); eventlogger.error(elr.toString()); @@ -97,7 +98,7 @@ public class SubscriptionServlet extends ProxyServlet { } int subid = getIdFromPath(req); if (subid < 0) { - message = "Missing or bad subscription number."; + message = BAD_SUB; elr.setMessage(message); elr.setResult(HttpServletResponse.SC_BAD_REQUEST); eventlogger.error(elr.toString()); @@ -106,7 +107,7 @@ public class SubscriptionServlet extends ProxyServlet { } Subscription sub = Subscription.getSubscriptionById(subid); if (sub == null) { - message = "Missing or bad subscription number."; + message = BAD_SUB; elr.setMessage(message); elr.setResult(HttpServletResponse.SC_NOT_FOUND); eventlogger.error(elr.toString()); @@ -119,10 +120,10 @@ public class SubscriptionServlet extends ProxyServlet { * CADI code - check on permissions based on Legacy/AAF users to allow to delete/remove subscription */ String aafInstance = sub.getAafInstance(); - if (aafInstance == null || aafInstance.equals("") || aafInstance.equalsIgnoreCase("legacy")) { + if (aafInstance == null || "".equals(aafInstance) || "legacy".equalsIgnoreCase(aafInstance)) { AuthorizationResponse aresp = authz.decide(req); if (!aresp.isAuthorized()) { - message = "Policy Engine disallows access."; + message = POLICY_ENGINE; elr.setMessage(message); elr.setResult(HttpServletResponse.SC_FORBIDDEN); eventlogger.error(elr.toString()); @@ -189,7 +190,7 @@ public class SubscriptionServlet extends ProxyServlet { } String bhdr = req.getHeader(BEHALF_HEADER); if (bhdr == null) { - message = "Missing " + BEHALF_HEADER + " header."; + message = MISSING_ON_BEHALF; elr.setMessage(message); elr.setResult(HttpServletResponse.SC_BAD_REQUEST); eventlogger.error(elr.toString()); @@ -198,7 +199,7 @@ public class SubscriptionServlet extends ProxyServlet { } int subid = getIdFromPath(req); if (subid < 0) { - message = "Missing or bad subscription number."; + message = BAD_SUB; elr.setMessage(message); elr.setResult(HttpServletResponse.SC_BAD_REQUEST); eventlogger.error(elr.toString()); @@ -207,7 +208,7 @@ public class SubscriptionServlet extends ProxyServlet { } Subscription sub = Subscription.getSubscriptionById(subid); if (sub == null) { - message = "Missing or bad subscription number."; + message = BAD_SUB; elr.setMessage(message); elr.setResult(HttpServletResponse.SC_NOT_FOUND); eventlogger.error(elr.toString()); @@ -217,7 +218,7 @@ public class SubscriptionServlet extends ProxyServlet { // Check with the Authorizer AuthorizationResponse aresp = authz.decide(req); if (!aresp.isAuthorized()) { - message = "Policy Engine disallows access."; + message = POLICY_ENGINE; elr.setMessage(message); elr.setResult(HttpServletResponse.SC_FORBIDDEN); eventlogger.error(elr.toString()); @@ -265,7 +266,7 @@ public class SubscriptionServlet extends ProxyServlet { } String bhdr = req.getHeader(BEHALF_HEADER); if (bhdr == null) { - message = "Missing " + BEHALF_HEADER + " header."; + message = MISSING_ON_BEHALF; elr.setMessage(message); elr.setResult(HttpServletResponse.SC_BAD_REQUEST); eventlogger.error(elr.toString()); @@ -274,7 +275,7 @@ public class SubscriptionServlet extends ProxyServlet { } int subid = getIdFromPath(req); if (subid < 0) { - message = "Missing or bad subscription number."; + message = BAD_SUB; elr.setMessage(message); elr.setResult(HttpServletResponse.SC_BAD_REQUEST); eventlogger.error(elr.toString()); @@ -283,7 +284,7 @@ public class SubscriptionServlet extends ProxyServlet { } Subscription oldsub = Subscription.getSubscriptionById(subid); if (oldsub == null) { - message = "Missing or bad subscription number."; + message = BAD_SUB; elr.setMessage(message); elr.setResult(HttpServletResponse.SC_NOT_FOUND); eventlogger.error(elr.toString()); @@ -293,7 +294,7 @@ public class SubscriptionServlet extends ProxyServlet { // check content type is SUB_CONTENT_TYPE, version 1.0 ContentHeader ch = getContentHeader(req); String ver = ch.getAttribute("version"); - if (!ch.getType().equals(SUB_BASECONTENT_TYPE) || !(ver.equals("1.0") || ver.equals("2.0"))) { + if (!ch.getType().equals(SUB_BASECONTENT_TYPE) || !("1.0".equals(ver) || "2.0".equals(ver))) { message = "Incorrect content-type"; elr.setMessage(message); elr.setResult(HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE); @@ -303,7 +304,7 @@ public class SubscriptionServlet extends ProxyServlet { } JSONObject jo = getJSONfromInput(req); if (jo == null) { - message = "Badly formed JSON"; + message = BAD_JSON; elr.setMessage(message); elr.setResult(HttpServletResponse.SC_BAD_REQUEST); eventlogger.error(elr.toString()); @@ -331,10 +332,10 @@ public class SubscriptionServlet extends ProxyServlet { * CADI code - check on permissions based on Legacy/AAF users to allow to delete/remove subscription */ String aafInstance = sub.getAafInstance(); - if (aafInstance == null || aafInstance.equals("") || aafInstance.equalsIgnoreCase("legacy")) { + if (aafInstance == null || "".equals(aafInstance) || "legacy".equalsIgnoreCase(aafInstance)) { AuthorizationResponse aresp = authz.decide(req); if (!aresp.isAuthorized()) { - message = "Policy Engine disallows access."; + message = POLICY_ENGINE; elr.setMessage(message); elr.setResult(HttpServletResponse.SC_FORBIDDEN); eventlogger.error(elr.toString()); @@ -435,7 +436,7 @@ public class SubscriptionServlet extends ProxyServlet { } String bhdr = req.getHeader(BEHALF_HEADER); if (bhdr == null) { - message = "Missing " + BEHALF_HEADER + " header."; + message = MISSING_ON_BEHALF; elr.setMessage(message); elr.setResult(HttpServletResponse.SC_BAD_REQUEST); eventlogger.error(elr.toString()); @@ -444,7 +445,7 @@ public class SubscriptionServlet extends ProxyServlet { } final int subid = getIdFromPath(req); if (subid < 0 || Subscription.getSubscriptionById(subid) == null) { - message = "Missing or bad subscription number."; + message = BAD_SUB; elr.setMessage(message); elr.setResult(HttpServletResponse.SC_BAD_REQUEST); eventlogger.error(elr.toString()); @@ -454,7 +455,7 @@ public class SubscriptionServlet extends ProxyServlet { // check content type is SUBCNTRL_CONTENT_TYPE, version 1.0 ContentHeader ch = getContentHeader(req); String ver = ch.getAttribute("version"); - if (!ch.getType().equals(SUBCNTRL_CONTENT_TYPE) || !ver.equals("1.0")) { + if (!ch.getType().equals(SUBCNTRL_CONTENT_TYPE) || !"1.0".equals(ver)) { message = "Incorrect content-type"; elr.setMessage(message); elr.setResult(HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE); @@ -465,7 +466,7 @@ public class SubscriptionServlet extends ProxyServlet { // Check with the Authorizer AuthorizationResponse aresp = authz.decide(req); if (!aresp.isAuthorized()) { - message = "Policy Engine disallows access."; + message = POLICY_ENGINE; elr.setMessage(message); elr.setResult(HttpServletResponse.SC_FORBIDDEN); eventlogger.error(elr.toString()); @@ -474,7 +475,7 @@ public class SubscriptionServlet extends ProxyServlet { } JSONObject jo = getJSONfromInput(req); if (jo == null) { - message = "Badly formed JSON"; + message = BAD_JSON; elr.setMessage(message); elr.setResult(HttpServletResponse.SC_BAD_REQUEST); eventlogger.error(elr.toString()); @@ -496,7 +497,7 @@ public class SubscriptionServlet extends ProxyServlet { eventlogger.info(elr.toString()); resp.setStatus(HttpServletResponse.SC_ACCEPTED); } catch (JSONException e) { - message = "Badly formed JSON"; + message = BAD_JSON; elr.setMessage(message); elr.setResult(HttpServletResponse.SC_BAD_REQUEST); eventlogger.error(elr.toString(), e); @@ -511,39 +512,44 @@ public class SubscriptionServlet extends ProxyServlet { * A Thread class used to serially send reset notifications to all nodes in the DR network, when a POST is received * for a subscription. */ - public class SubscriberNotifyThread extends Thread { + public static class SubscriberNotifyThread extends Thread { - public static final String URL_TEMPLATE = "http://%s/internal/resetSubscription/%d"; - private List urls = new Vector(); + static final String URL_TEMPLATE = "http://%s/internal/resetSubscription/%d"; + private List urls = new ArrayList<>(); - public SubscriberNotifyThread() { + SubscriberNotifyThread() { setName("SubscriberNotifyThread"); } - public void resetSubscription(int subid) { + void resetSubscription(int subid) { for (String nodename : BaseServlet.getNodes()) { String u = String.format(URL_TEMPLATE, nodename, subid); urls.add(u); } } + @Override public void run() { try { while (!urls.isEmpty()) { - String u = urls.remove(0); - try { - URL url = new URL(u); - HttpURLConnection conn = (HttpURLConnection) url.openConnection(); - conn.connect(); - conn.getContentLength(); // Force the GET through - conn.disconnect(); - } catch (IOException e) { - intlogger.info("PROV0194 Error accessing URL: " + u + ": " + e.getMessage(), e); - } + String url = urls.remove(0); + forceGetThrough(url); } } catch (Exception e) { intlogger.warn("PROV0195 Caught exception in SubscriberNotifyThread: " + e.getMessage(), e); } } + + private void forceGetThrough(String url) { + try { + URL urlObj = new URL(url); + HttpURLConnection conn = (HttpURLConnection) urlObj.openConnection(); + conn.connect(); + conn.getContentLength(); // Force the GET through + conn.disconnect(); + } catch (IOException e) { + intlogger.info("PROV0194 Error accessing URL: " + url + ": " + e.getMessage(), e); + } + } } }