summaryrefslogtreecommitdiffstats
path: root/policy-endpoints/src/main/java/org/onap/policy/common/endpoints/http/server/internal/JettyJerseyServer.java
diff options
context:
space:
mode:
authorJim Hahn <jrh3@att.com>2019-01-21 12:42:10 -0500
committerJim Hahn <jrh3@att.com>2019-01-23 18:43:43 -0500
commit18914b033f67d25cc9377b2e381648a9e3184968 (patch)
tree973bfdd2a119c19d11e3770e2a4a82d898279284 /policy-endpoints/src/main/java/org/onap/policy/common/endpoints/http/server/internal/JettyJerseyServer.java
parent9f15e1987dc9fc6bb8196c415b817b3f1cf6bd5f (diff)
Add gson support to policy-endpoints
Added "provider" property to both http client and server builders. The provider defaults to jackson, to maintain backward compatibility until other policy code has been converted to gson. Removed commented item from pom. Added some comments and re-arranged a few pieces of code. Fixed a few typos and removed spacing at the end of some lines. Reordered imports. Added comments about limitations when using jersey-media-json-jackson. Address ridiculous checkstyle complaint. Support comma-separated list of serialization providers in jersey client. Disabled metainf discovery from jersey client and server so that the media-json dependencies could be re-instated in the pom. Address another ridiculous checkstyle complaint. Change-Id: Ic5a93b475d0ee9b435352b3516de6b865b00a86a Issue-ID: POLICY-1428 Signed-off-by: Jim Hahn <jrh3@att.com>
Diffstat (limited to 'policy-endpoints/src/main/java/org/onap/policy/common/endpoints/http/server/internal/JettyJerseyServer.java')
-rw-r--r--policy-endpoints/src/main/java/org/onap/policy/common/endpoints/http/server/internal/JettyJerseyServer.java130
1 files changed, 71 insertions, 59 deletions
diff --git a/policy-endpoints/src/main/java/org/onap/policy/common/endpoints/http/server/internal/JettyJerseyServer.java b/policy-endpoints/src/main/java/org/onap/policy/common/endpoints/http/server/internal/JettyJerseyServer.java
index a97a9bf5..22fc9ac3 100644
--- a/policy-endpoints/src/main/java/org/onap/policy/common/endpoints/http/server/internal/JettyJerseyServer.java
+++ b/policy-endpoints/src/main/java/org/onap/policy/common/endpoints/http/server/internal/JettyJerseyServer.java
@@ -2,14 +2,14 @@
* ============LICENSE_START=======================================================
* policy-endpoints
* ================================================================================
- * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -23,12 +23,23 @@ package org.onap.policy.common.endpoints.http.server.internal;
import io.swagger.jersey.config.JerseyJaxrsConfig;
import java.util.HashMap;
import org.eclipse.jetty.servlet.ServletHolder;
+import org.glassfish.jersey.server.ServerProperties;
import org.onap.policy.common.utils.network.NetworkUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* REST Jetty Server that uses Jersey Servlets to support JAX-RS Web Services.
+ *
+ * <p>Note: the serialization provider will always be added to the server's class providers,
+ * as will the swagger providers (assuming swagger has been enabled). This happens whether
+ * {@link #addServletClass(String, String)} is used or
+ * {@link #addServletPackage(String, String)} is used. Thus it's possible to have both the
+ * server's class provider property and the server's package provider property populated.
+ *
+ * <p>Also note: the serialization provider will be ignored if the maven artifact,
+ * <i>jersey-media-json-jackson</i>, is included, regardless of whether it's included
+ * directly or indirectly.
*/
public class JettyJerseyServer extends JettyServletServer {
@@ -53,26 +64,6 @@ public class JettyJerseyServer extends JettyServletServer {
protected static final String SWAGGER_PRETTY_PRINT = "swagger.pretty.print";
/**
- * Swagger Packages.
- */
- protected static final String SWAGGER_INIT_PACKAGES_PARAM_VALUE = "io.swagger.jaxrs.listing";
-
- /**
- * Jersey Packages Init Param Name.
- */
- protected static final String JERSEY_INIT_PACKAGES_PARAM_NAME = "jersey.config.server.provider.packages";
-
- /**
- * Jersey Packages Init Param Value.
- */
- protected static final String JERSEY_INIT_PACKAGES_PARAM_VALUE = "com.fasterxml.jackson.jaxrs.json";
-
- /**
- * Jersey Classes Init Param Name.
- */
- protected static final String JERSEY_INIT_CLASSNAMES_PARAM_NAME = "jersey.config.server.provider.classnames";
-
- /**
* Jersey Jackson Classes Init Param Value.
*/
protected static final String JERSEY_JACKSON_INIT_CLASSNAMES_PARAM_VALUE =
@@ -99,15 +90,20 @@ public class JettyJerseyServer extends JettyServletServer {
protected String swaggerId = null;
/**
+ * The serialization provider to be used when classes are added to the service.
+ */
+ private String classProvider = JERSEY_JACKSON_INIT_CLASSNAMES_PARAM_VALUE;
+
+ /**
* Constructor.
- *
+ *
* @param name name
* @param https enable https?
* @param host host server host
* @param port port server port
* @param swagger support swagger?
* @param contextPath context path
- *
+ *
* @throws IllegalArgumentException in invalid arguments are provided
*/
public JettyJerseyServer(String name, boolean https, String host, int port, String contextPath, boolean swagger) {
@@ -145,10 +141,10 @@ public class JettyJerseyServer extends JettyServletServer {
/**
* Retrieves cached server based on servlet path.
- *
+ *
* @param servletPath servlet path
* @return the jetty servlet holder
- *
+ *
* @throws IllegalArgumentException if invalid arguments are provided
*/
protected synchronized ServletHolder getServlet(String servletPath) {
@@ -176,27 +172,17 @@ public class JettyJerseyServer extends JettyServletServer {
ServletHolder jerseyServlet = this.getServlet(servPath);
- String initClasses = jerseyServlet.getInitParameter(JERSEY_INIT_CLASSNAMES_PARAM_NAME);
- if (initClasses != null && !initClasses.isEmpty()) {
- logger.warn("Both packages and classes are used in Jetty+Jersey Configuration: {}", restPackage);
- }
+ initStandardParams(jerseyServlet);
- String initPackages = jerseyServlet.getInitParameter(JERSEY_INIT_PACKAGES_PARAM_NAME);
+ String initPackages = jerseyServlet.getInitParameter(ServerProperties.PROVIDER_PACKAGES);
if (initPackages == null) {
- if (this.swaggerId != null) {
- initPackages =
- JERSEY_INIT_PACKAGES_PARAM_VALUE + "," + SWAGGER_INIT_PACKAGES_PARAM_VALUE + "," + restPackage;
-
- jerseyServlet.setInitParameter(SWAGGER_CONTEXT_ID, swaggerId);
- jerseyServlet.setInitParameter(SWAGGER_SCANNER_ID, swaggerId);
- } else {
- initPackages = JERSEY_INIT_PACKAGES_PARAM_VALUE + "," + restPackage;
- }
+ initPackages = restPackage;
+
} else {
- initPackages = initPackages + "," + restPackage;
+ initPackages += "," + restPackage;
}
- jerseyServlet.setInitParameter(JERSEY_INIT_PACKAGES_PARAM_NAME, initPackages);
+ jerseyServlet.setInitParameter(ServerProperties.PROVIDER_PACKAGES, initPackages);
if (logger.isDebugEnabled()) {
logger.debug("{}: added REST package: {}", this, jerseyServlet.dump());
@@ -216,33 +202,59 @@ public class JettyJerseyServer extends JettyServletServer {
ServletHolder jerseyServlet = this.getServlet(servletPath);
- String initPackages = jerseyServlet.getInitParameter(JERSEY_INIT_PACKAGES_PARAM_NAME);
- if (initPackages != null && !initPackages.isEmpty()) {
- logger.warn("Both classes and packages are used in Jetty+Jersey Configuration: {}", restClass);
- }
+ initStandardParams(jerseyServlet);
- String initClasses = jerseyServlet.getInitParameter(JERSEY_INIT_CLASSNAMES_PARAM_NAME);
+ String initClasses = jerseyServlet.getInitParameter(ServerProperties.PROVIDER_CLASSNAMES);
if (initClasses == null) {
- if (this.swaggerId != null) {
- initClasses = JERSEY_JACKSON_INIT_CLASSNAMES_PARAM_VALUE + "," + SWAGGER_INIT_CLASSNAMES_PARAM_VALUE
- + "," + restClass;
-
- jerseyServlet.setInitParameter(SWAGGER_CONTEXT_ID, swaggerId);
- jerseyServlet.setInitParameter(SWAGGER_SCANNER_ID, swaggerId);
- } else {
- initClasses = JERSEY_JACKSON_INIT_CLASSNAMES_PARAM_VALUE + "," + restClass;
- }
+ initClasses = restClass;
+
} else {
- initClasses = initClasses + "," + restClass;
+ initClasses += "," + restClass;
}
- jerseyServlet.setInitParameter(JERSEY_INIT_CLASSNAMES_PARAM_NAME, initClasses);
+ jerseyServlet.setInitParameter(ServerProperties.PROVIDER_CLASSNAMES, initClasses);
if (logger.isDebugEnabled()) {
logger.debug("{}: added REST class: {}", this, jerseyServlet.dump());
}
}
+ /**
+ * Adds "standard" parameters to the initParameter set. Sets swagger parameters, if
+ * specified, and sets the class provider property. This can be invoked multiple
+ * times, but only the first actually causes any changes to the parameter set.
+ *
+ * @param jerseyServlet servlet into which parameters should be added
+ */
+ private void initStandardParams(ServletHolder jerseyServlet) {
+ String initClasses = jerseyServlet.getInitParameter(ServerProperties.PROVIDER_CLASSNAMES);
+ if (initClasses != null) {
+ return;
+ }
+
+ initClasses = classProvider;
+
+ if (this.swaggerId != null) {
+ initClasses += "," + SWAGGER_INIT_CLASSNAMES_PARAM_VALUE;
+
+ jerseyServlet.setInitParameter(SWAGGER_CONTEXT_ID, swaggerId);
+ jerseyServlet.setInitParameter(SWAGGER_SCANNER_ID, swaggerId);
+ }
+
+ jerseyServlet.setInitParameter(ServerProperties.PROVIDER_CLASSNAMES, initClasses);
+
+ jerseyServlet.setInitParameter(ServerProperties.METAINF_SERVICES_LOOKUP_DISABLE, "true");
+ }
+
+ /**
+ * Note: this must be invoked <i>before</i> {@link #addServletClass(String, String)}
+ * or {@link #addServletPackage(String, String)}.
+ */
+ @Override
+ public void setSerializationProvider(String provider) {
+ classProvider = provider;
+ }
+
@Override
public String toString() {
StringBuilder builder = new StringBuilder();