Skip to content

Commit

Permalink
Merge pull request ORCID#6735 from ORCID/jersey-update-with-javax
Browse files Browse the repository at this point in the history
Code that compiles with jersey 2.27  and loads the jersey context
  • Loading branch information
amontenegro authored Mar 14, 2023
2 parents b3a3481 + 3290a31 commit 65ac0c7
Show file tree
Hide file tree
Showing 207 changed files with 2,784 additions and 23,645 deletions.
73 changes: 51 additions & 22 deletions orcid-api-common/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@

<dependencies>
<!-- Internal dependencies -->

<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>orcid-core</artifactId>
Expand All @@ -58,15 +57,55 @@
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
</dependency>
<!-- http://mvnrepository.com/artifact/com.sun.jersey/jersey-server -->

<!-- Jersey Server -->
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
</dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
<version>${jersey.version}</version>
</dependency>
<dependency>
<groupId>com.sun.jersey.contribs</groupId>
<artifactId>jersey-spring</artifactId>
<groupId>org.glassfish.jersey.ext</groupId>
<artifactId>jersey-spring4</artifactId>
<version>${jersey.version}</version>
</dependency>
<!-- Jersey client -->
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>${jersey.version}</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.inject</groupId>
<artifactId>jersey-hk2</artifactId>
<version>${jersey.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.ws.rs/javax.ws.rs-api -->
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.inject/javax.inject -->
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/jakarta.servlet/jakarta.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>

<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
Expand All @@ -75,11 +114,7 @@
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
</dependency>

<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</dependency>

<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
Expand All @@ -99,22 +134,16 @@
<dependency>
<groupId>org.apache.jena</groupId>
<artifactId>jena-cmds</artifactId>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-jersey-jaxrs</artifactId>
<version>${swagger.version}</version>
</dependency>
</dependency>

<!-- citeproc support -->
<dependency>
<groupId>de.undercouch</groupId>
<artifactId>citeproc-java</artifactId>
<version>0.6</version>
</dependency>

<!-- Test dependencies -->

<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>orcid-test</artifactId>
Expand All @@ -138,8 +167,8 @@
<artifactId>maven-compiler-plugin</artifactId>
<inherited>false</inherited>
<configuration>
<source>1.8</source>
<target>1.8</target>
<source>11</source>
<target>11</target>
</configuration>
</plugin>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@

import java.util.List;

import javax.ws.rs.core.PathSegment;

import com.sun.jersey.spi.container.ContainerRequest;
import org.glassfish.jersey.server.ContainerRequest;

import javax.ws.rs.core.PathSegment;

public class APIEndpointParser {

Expand Down Expand Up @@ -33,7 +34,7 @@ public APIEndpointParser(ContainerRequest request) {
}

private void parse(ContainerRequest request) {
List<PathSegment> path = request.getPathSegments(true);
List<PathSegment> path = request.getUriInfo().getPathSegments(true);
int categoryIndex = 2;
if (path.get(0).toString().matches(API_VERSION_REGEX)) {
// found api version
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
import org.orcid.persistence.jpa.entities.ProfileEntity;
import org.springframework.http.HttpMethod;

import com.sun.jersey.spi.container.ContainerRequest;
import com.sun.jersey.spi.container.ContainerResponse;
import org.glassfish.jersey.server.ContainerRequest;
import org.glassfish.jersey.server.ContainerResponse;

public class AnalyticsProcess implements Runnable {

Expand Down Expand Up @@ -97,7 +97,7 @@ private AnalyticsData getAnalyticsData() {
analyticsData.setClientId(clientDetailsId != null ? clientDetailsId : ip);
analyticsData.setMethod(request.getMethod());
analyticsData.setContentType(getContentType());
analyticsData.setUserAgent(request.getHeaderValue(HttpHeaders.USER_AGENT));
analyticsData.setUserAgent(request.getHeaderString(HttpHeaders.USER_AGENT));
analyticsData.setResponseCode(response.getStatus());
analyticsData.setIpAddress(ip);
analyticsData.setCategory(parser.getCategory());
Expand All @@ -107,7 +107,7 @@ private AnalyticsData getAnalyticsData() {

private String getContentType() {
if (HttpMethod.GET.name().equals(request.getMethod())) {
String accept = request.getHeaderValue(HttpHeaders.ACCEPT);
String accept = request.getHeaderString(HttpHeaders.ACCEPT);
if (accept != null && !accept.isEmpty()) {
return accept;
}
Expand All @@ -116,7 +116,7 @@ private String getContentType() {
// If accept header not set for GETs content type will be used - see
// AcceptFilter.
// For other methods content type will be used anyway
String contentType = request.getHeaderValue(HttpHeaders.CONTENT_TYPE);
String contentType = request.getHeaderString(HttpHeaders.CONTENT_TYPE);
if (contentType != null && !contentType.isEmpty()) {
return contentType;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,48 +32,7 @@ public class JSONInputValidator {
static {
SCHEMA_LOCATIONS = new HashMap<>();

SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.v3.rc1.record.Work.class, "/record_3.0_rc1/work-3.0_rc1.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.v3.rc1.record.Funding.class, "/record_3.0_rc1/funding-3.0_rc1.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.v3.rc1.record.Education.class, "/record_3.0_rc1/education-3.0_rc1.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.v3.rc1.record.Employment.class, "/record_3.0_rc1/employment-3.0_rc1.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.v3.rc1.record.PeerReview.class, "/record_3.0_rc1/peer-review-3.0_rc1.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.v3.rc1.groupid.GroupIdRecord.class, "/group-id-3.0_rc1/group-id-3.0_rc1.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.v3.rc1.notification.permission.NotificationPermission.class,
"/notification_3.0_rc1/notification-permission-3.0_rc1.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.v3.rc1.record.ResearcherUrl.class, "/record_3.0_rc1/researcher-url-3.0_rc1.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.v3.rc1.record.OtherName.class, "/record_3.0_rc1/other-name-3.0_rc1.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.v3.rc1.record.PersonExternalIdentifier.class, "/record_3.0_rc1/person-external-identifier-3.0_rc1.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.v3.rc1.record.Keyword.class, "/record_3.0_rc1/keyword-3.0_rc1.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.v3.rc1.record.Address.class, "/record_3.0_rc1/address-3.0_rc1.xsd");

SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.v3.rc1.record.Distinction.class, "/record_3.0_rc1/distinction-3.0_rc1.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.v3.rc1.record.InvitedPosition.class, "/record_3.0_rc1/invited-position-3.0_rc1.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.v3.rc1.record.Membership.class, "/record_3.0_rc1/membership-3.0_rc1.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.v3.rc1.record.Qualification.class, "/record_3.0_rc1/qualification-3.0_rc1.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.v3.rc1.record.Service.class, "/record_3.0_rc1/service-3.0_rc1.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.v3.rc1.record.ResearchResource.class, "/record_3.0_rc1/research-resource-3.0_rc1.xsd");

SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.v3.rc2.record.Work.class, "/record_3.0_rc2/work-3.0_rc2.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.v3.rc2.record.Funding.class, "/record_3.0_rc2/funding-3.0_rc2.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.v3.rc2.record.Education.class, "/record_3.0_rc2/education-3.0_rc2.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.v3.rc2.record.Employment.class, "/record_3.0_rc2/employment-3.0_rc2.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.v3.rc2.record.PeerReview.class, "/record_3.0_rc2/peer-review-3.0_rc2.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.v3.rc2.groupid.GroupIdRecord.class, "/group-id-3.0_rc2/group-id-3.0_rc2.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.v3.rc2.notification.permission.NotificationPermission.class,
"/notification_3.0_rc2/notification-permission-3.0_rc2.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.v3.rc2.record.ResearcherUrl.class, "/record_3.0_rc2/researcher-url-3.0_rc2.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.v3.rc2.record.OtherName.class, "/record_3.0_rc2/other-name-3.0_rc2.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.v3.rc2.record.PersonExternalIdentifier.class, "/record_3.0_rc2/person-external-identifier-3.0_rc2.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.v3.rc2.record.Keyword.class, "/record_3.0_rc2/keyword-3.0_rc2.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.v3.rc2.record.Address.class, "/record_3.0_rc2/address-3.0_rc2.xsd");

SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.v3.rc2.record.Distinction.class, "/record_3.0_rc2/distinction-3.0_rc2.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.v3.rc2.record.InvitedPosition.class, "/record_3.0_rc2/invited-position-3.0_rc2.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.v3.rc2.record.Membership.class, "/record_3.0_rc2/membership-3.0_rc2.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.v3.rc2.record.Qualification.class, "/record_3.0_rc2/qualification-3.0_rc2.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.v3.rc2.record.Service.class, "/record_3.0_rc2/service-3.0_rc2.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.v3.rc2.record.ResearchResource.class, "/record_3.0_rc2/research-resource-3.0_rc2.xsd");


SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.v3.release.record.Work.class, "/record_3.0/work-3.0.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.v3.release.record.Funding.class, "/record_3.0/funding-3.0.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.v3.release.record.Education.class, "/record_3.0/education-3.0.xsd");
Expand Down Expand Up @@ -107,54 +66,7 @@ public class JSONInputValidator {
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.record_v2.PersonExternalIdentifier.class, "/record_2.0/person-external-identifier-2.0.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.record_v2.Keyword.class, "/record_2.0/keyword-2.0.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.record_v2.Address.class, "/record_2.0/address-2.0.xsd");

SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.record_rc4.Work.class, "/record_2.0_rc4/work-2.0_rc4.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.record_rc4.Funding.class, "/record_2.0_rc4/funding-2.0_rc4.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.record_rc4.Education.class, "/record_2.0_rc4/education-2.0_rc4.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.record_rc4.Employment.class, "/record_2.0_rc4/employment-2.0_rc4.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.record_rc4.PeerReview.class, "/record_2.0_rc4/peer-review-2.0_rc4.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.groupid_rc4.GroupIdRecord.class, "/group-id-2.0_rc4/group-id-2.0_rc4.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.notification.permission_rc4.NotificationPermission.class, "/notification_2.0_rc4/notification-permission-2.0_rc4.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.record_rc4.ResearcherUrl.class, "/record_2.0_rc4/researcher-url-2.0_rc4.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.record_rc4.OtherName.class, "/record_2.0_rc4/other-name-2.0_rc4.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.record_rc4.PersonExternalIdentifier.class, "/record_2.0_rc4/person-external-identifier-2.0_rc4.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.record_rc4.Keyword.class, "/record_2.0_rc4/keyword-2.0_rc4.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.record_rc4.Address.class, "/record_2.0_rc4/address-2.0_rc4.xsd");

SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.record_rc3.Work.class, "/record_2.0_rc3/work-2.0_rc3.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.record_rc3.Funding.class, "/record_2.0_rc3/funding-2.0_rc3.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.record_rc3.Education.class, "/record_2.0_rc3/education-2.0_rc3.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.record_rc3.Employment.class, "/record_2.0_rc3/employment-2.0_rc3.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.record_rc3.PeerReview.class, "/record_2.0_rc3/peer-review-2.0_rc3.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.groupid_rc3.GroupIdRecord.class, "/group-id-2.0_rc3/group-id-2.0_rc3.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.notification.permission_rc3.NotificationPermission.class, "/notification_2.0_rc3/notification-permission-2.0_rc3.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.record_rc3.ResearcherUrl.class, "/record_2.0_rc3/researcher-url-2.0_rc3.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.record_rc3.OtherName.class, "/record_2.0_rc3/other-name-2.0_rc3.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.record_rc3.PersonExternalIdentifier.class, "/record_2.0_rc3/person-external-identifier-2.0_rc3.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.record_rc3.Keyword.class, "/record_2.0_rc3/keyword-2.0_rc3.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.record_rc3.Address.class, "/record_2.0_rc3/address-2.0_rc3.xsd");

SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.record_rc2.Work.class, "/record_2.0_rc2/work-2.0_rc2.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.record_rc2.Funding.class, "/record_2.0_rc2/funding-2.0_rc2.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.record_rc2.Education.class, "/record_2.0_rc2/education-2.0_rc2.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.record_rc2.Employment.class, "/record_2.0_rc2/employment-2.0_rc2.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.record_rc2.PeerReview.class, "/record_2.0_rc2/peer-review-2.0_rc2.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.groupid_rc2.GroupIdRecord.class, "/group-id-2.0_rc2/group-id-2.0_rc2.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.notification.permission_rc2.NotificationPermission.class, "/notification_2.0_rc2/notification-permission-2.0_rc2.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.record_rc2.ResearcherUrl.class, "/record_2.0_rc2/researcher-url-2.0_rc2.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.record_rc2.OtherName.class, "/record_2.0_rc2/other-name-2.0_rc2.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.record_rc2.PersonExternalIdentifier.class, "/record_2.0_rc2/person-external-identifier-2.0_rc2.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.record_rc2.Keyword.class, "/record_2.0_rc2/keyword-2.0_rc2.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.record_rc2.Address.class, "/record_2.0_rc2/address-2.0_rc2.xsd");

SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.record_rc1.Work.class, "/record_2.0_rc1/work-2.0_rc1.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.record_rc1.Funding.class, "/record_2.0_rc1/funding-2.0_rc1.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.record_rc1.Education.class, "/record_2.0_rc1/education-2.0_rc1.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.record_rc1.Employment.class, "/record_2.0_rc1/employment-2.0_rc1.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.record_rc1.PeerReview.class, "/record_2.0_rc1/peer-review-2.0_rc1.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.groupid_rc1.GroupIdRecord.class, "/group-id-2.0_rc1/group-id-2.0_rc1.xsd");
SCHEMA_LOCATIONS.put(org.orcid.jaxb.model.notification.permission_rc1.NotificationPermission.class, "/notification_2.0_rc1/notification-permission-2.0_rc1.xsd");


VALIDATORS = new HashMap<Class<?>, Validator>();
CONTEXTS = new HashMap<Class<?>, JAXBContext>();
SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
import java.util.regex.Pattern;

import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.core.Context;
import javax.ws.rs.ext.Provider;

Expand All @@ -12,16 +14,18 @@
import org.orcid.core.manager.impl.OrcidUrlManager;
import org.orcid.pojo.ajaxForm.PojoUtil;
import org.orcid.core.utils.OrcidStringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMethod;

import com.sun.jersey.api.core.InjectParam;
import com.sun.jersey.spi.container.ContainerRequest;
import com.sun.jersey.spi.container.ContainerRequestFilter;

import javax.inject.Inject;
import javax.inject.Named;


@Provider
public class ApiVersionCheckFilter implements ContainerRequestFilter {
public class ApiVersionCheckFilter implements ContainerRequestFilter{

@InjectParam("localeManager")
@Autowired
private LocaleManager localeManager;

@Context private HttpServletRequest httpRequest;
Expand All @@ -43,15 +47,14 @@ public ApiVersionCheckFilter(LocaleManager locale, HttpServletRequest req) {
}

@Override
public ContainerRequest filter(ContainerRequest request) {
String path = request.getPath();
public void filter(ContainerRequestContext request) {
String path = request.getUriInfo().getPath();
String method = request.getMethod() == null ? null : request.getMethod().toUpperCase();
Matcher matcher = VERSION_PATTERN.matcher(path);
String version = null;
if (matcher.lookingAt()) {
version = matcher.group(1);
}

if(PojoUtil.isEmpty(version) && !PojoUtil.isEmpty(method) && !"oauth/token".equals(path) && !path.matches(WEBHOOKS_PATH_PATTERN)) {
if(!RequestMethod.GET.name().equals(method)) {
Object params[] = {method};
Expand All @@ -67,6 +70,6 @@ public ContainerRequest filter(ContainerRequest request) {
}
}

return request;
return;
}
}
Loading

0 comments on commit 65ac0c7

Please sign in to comment.