2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
20 package org.openecomp.policy.drools.http.server.internal;
22 import java.util.ArrayList;
23 import java.util.HashMap;
25 import org.eclipse.jetty.servlet.ServletHolder;
27 import org.openecomp.policy.common.logging.flexlogger.FlexLogger;
28 import org.openecomp.policy.common.logging.flexlogger.Logger;
31 * REST Jetty Server using Jersey
33 public class JettyJerseyServer extends JettyServletServer {
35 protected static final String JERSEY_PACKAGES_PARAM = "jersey.config.server.provider.packages";
36 protected static final String JERSEY_CLASSNAMES_PARAM = "jersey.config.server.provider.classnames";
38 protected static Logger logger = FlexLogger.getLogger(JettyJerseyServer.class);
40 protected ArrayList<String> packages = new ArrayList<String>();
41 protected HashMap<String, ServletHolder> servlets =
42 new HashMap<String, ServletHolder>();
44 public JettyJerseyServer(String name, String host, int port, String contextPath)
45 throws IllegalArgumentException {
46 super(name, host, port, contextPath);
49 protected synchronized ServletHolder getServlet(String servletPath)
50 throws IllegalArgumentException {
52 if (servletPath == null || servletPath.isEmpty())
55 ServletHolder jerseyServlet = servlets.get(servletPath);
56 if (jerseyServlet == null) {
57 jerseyServlet = context.addServlet
58 (org.glassfish.jersey.servlet.ServletContainer.class, servletPath);
59 jerseyServlet.setInitOrder(0);
61 jerseyServlet.getInitParameter(JERSEY_PACKAGES_PARAM);
62 if (initPackages == null) {
63 jerseyServlet.setInitParameter(
64 JERSEY_PACKAGES_PARAM,
65 "com.jersey.jaxb,com.fasterxml.jackson.jaxrs.json");
67 this.servlets.put(servletPath, jerseyServlet);
74 public synchronized void addServletPackage(String servletPath, String restPackage)
75 throws IllegalArgumentException, IllegalStateException {
77 if (restPackage == null || restPackage.isEmpty())
78 throw new IllegalArgumentException("No discoverable REST package provided");
80 ServletHolder jerseyServlet = this.getServlet(servletPath);
81 if (jerseyServlet == null)
82 throw new IllegalStateException("Unexpected, no Jersey Servlet class");
85 jerseyServlet.getInitParameter(JERSEY_PACKAGES_PARAM);
86 if (initPackages == null)
87 throw new IllegalStateException("Unexpected, no Init Parameters loaded");
89 jerseyServlet.setInitParameter(
90 JERSEY_PACKAGES_PARAM,
91 initPackages + "," + restPackage);
93 if (logger.isDebugEnabled())
94 logger.debug(this + "Added REST Package: " + jerseyServlet.dump());
98 public synchronized void addServletClass(String servletPath, String restClass)
99 throws IllegalArgumentException, IllegalStateException {
101 if (restClass == null || restClass.isEmpty())
102 throw new IllegalArgumentException("No discoverable REST class provided");
104 ServletHolder jerseyServlet = this.getServlet(servletPath);
105 if (jerseyServlet == null)
106 throw new IllegalStateException("Unexpected, no Jersey Servlet class");
109 jerseyServlet.getInitParameter(JERSEY_CLASSNAMES_PARAM);
110 if (initClasses == null)
111 initClasses = restClass;
113 initClasses = initClasses + "," + restClass;
115 jerseyServlet.setInitParameter(
116 JERSEY_CLASSNAMES_PARAM,
119 if (logger.isDebugEnabled())
120 logger.debug(this + "Added REST Class: " + jerseyServlet.dump());
124 public String toString() {
125 StringBuilder builder = new StringBuilder();
126 builder.append("JerseyJettyServer [packages=").append(packages).append(", servlets=").append(servlets)
127 .append(", toString()=").append(super.toString()).append("]");
128 return builder.toString();