Skip to content
This repository was archived by the owner on May 28, 2018. It is now read-only.

Commit b07e2d5

Browse files
committed
DefaultResourceFinderAdapter adds default implementation of remove() method which should always throw UnsupportedOperationException as defined in ResourceFinder.
This enhancement also removes possible NPEs in some of the original remove() implementations. Change-Id: Idee4cf9287e561bc94cec06cbadcadea32cff1b0
1 parent 1519433 commit b07e2d5

File tree

11 files changed

+85
-88
lines changed

11 files changed

+85
-88
lines changed

containers/jersey-servlet-core/src/main/java/org/glassfish/jersey/servlet/WebAppResourcesScanner.java

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/*
22
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
33
*
4-
* Copyright (c) 2012 Oracle and/or its affiliates. All rights reserved.
4+
* Copyright (c) 2012-2015 Oracle and/or its affiliates. All rights reserved.
55
*
66
* The contents of this file are subject to the terms of either the GNU
77
* General Public License Version 2 only ("GPL") or the Common Development
@@ -48,7 +48,7 @@
4848

4949
import javax.servlet.ServletContext;
5050

51-
import org.glassfish.jersey.server.ResourceFinder;
51+
import org.glassfish.jersey.server.internal.AbstractResourceFinderAdapter;
5252
import org.glassfish.jersey.server.internal.scanning.JarFileScanner;
5353
import org.glassfish.jersey.server.internal.scanning.ResourceFinderException;
5454
import org.glassfish.jersey.server.internal.scanning.ResourceFinderStack;
@@ -58,7 +58,7 @@
5858
*
5959
* @author Paul Sandoz
6060
*/
61-
class WebAppResourcesScanner implements ResourceFinder {
61+
class WebAppResourcesScanner extends AbstractResourceFinderAdapter {
6262

6363
// private final String[] paths;
6464
private final ServletContext sc;
@@ -85,7 +85,7 @@ private void processPaths(String... paths) {
8585
break;
8686
}
8787

88-
resourceFinderStack.push(new ResourceFinder() {
88+
resourceFinderStack.push(new AbstractResourceFinderAdapter() {
8989

9090
private Deque<String> resourcePathsStack = new LinkedList<String>() {
9191

@@ -132,11 +132,6 @@ public String next() {
132132
throw new NoSuchElementException();
133133
}
134134

135-
@Override
136-
public void remove() {
137-
throw new UnsupportedOperationException();
138-
}
139-
140135
@Override
141136
public InputStream open() {
142137
return sc.getResourceAsStream(current);
@@ -161,11 +156,6 @@ public String next() {
161156
return resourceFinderStack.next();
162157
}
163158

164-
@Override
165-
public void remove() {
166-
resourceFinderStack.remove();
167-
}
168-
169159
@Override
170160
public InputStream open() {
171161
return resourceFinderStack.open();
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
/*
2+
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3+
*
4+
* Copyright (c) 2015 Oracle and/or its affiliates. All rights reserved.
5+
*
6+
* The contents of this file are subject to the terms of either the GNU
7+
* General Public License Version 2 only ("GPL") or the Common Development
8+
* and Distribution License("CDDL") (collectively, the "License"). You
9+
* may not use this file except in compliance with the License. You can
10+
* obtain a copy of the License at
11+
* http://glassfish.java.net/public/CDDL+GPL_1_1.html
12+
* or packager/legal/LICENSE.txt. See the License for the specific
13+
* language governing permissions and limitations under the License.
14+
*
15+
* When distributing the software, include this License Header Notice in each
16+
* file and include the License file at packager/legal/LICENSE.txt.
17+
*
18+
* GPL Classpath Exception:
19+
* Oracle designates this particular file as subject to the "Classpath"
20+
* exception as provided by Oracle in the GPL Version 2 section of the License
21+
* file that accompanied this code.
22+
*
23+
* Modifications:
24+
* If applicable, add the following below the License Header, with the fields
25+
* enclosed by brackets [] replaced by your own identifying information:
26+
* "Portions Copyright [year] [name of copyright owner]"
27+
*
28+
* Contributor(s):
29+
* If you wish your version of this file to be governed by only the CDDL or
30+
* only the GPL Version 2, indicate your decision by adding "[Contributor]
31+
* elects to include this software in this distribution under the [CDDL or GPL
32+
* Version 2] license." If you don't indicate a single choice of license, a
33+
* recipient has the option to distribute your version of this file under
34+
* either the CDDL, the GPL Version 2 or to extend the choice of license to
35+
* its licensees as provided above. However, if you add GPL Version 2 code
36+
* and therefore, elected the GPL Version 2 license, then the option applies
37+
* only if the new code is made subject to such option by the copyright
38+
* holder.
39+
*/
40+
package org.glassfish.jersey.server.internal;
41+
42+
import org.glassfish.jersey.server.ResourceFinder;
43+
44+
/**
45+
* This class provides partial default implementation of {@link org.glassfish.jersey.server.ResourceFinder}.
46+
*
47+
* @author Stepan Vavra (stepan.vavra at oracle.com)
48+
* @since 2.18
49+
*/
50+
public abstract class AbstractResourceFinderAdapter implements ResourceFinder {
51+
52+
/**
53+
* Default implementation of {@link #remove()} which complies with the defined contract.
54+
*/
55+
@Override
56+
public void remove() {
57+
throw new UnsupportedOperationException();
58+
}
59+
}

core-server/src/main/java/org/glassfish/jersey/server/internal/scanning/BundleSchemeResourceFinderFactory.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
import java.util.NoSuchElementException;
4848
import java.util.Set;
4949

50-
import org.glassfish.jersey.server.ResourceFinder;
50+
import org.glassfish.jersey.server.internal.AbstractResourceFinderAdapter;
5151

5252
/**
5353
* Preparations for OSGi support.
@@ -72,7 +72,7 @@ public BundleSchemeScanner create(URI uri, boolean recursive) {
7272
return new BundleSchemeScanner(uri);
7373
}
7474

75-
private class BundleSchemeScanner implements ResourceFinder {
75+
private class BundleSchemeScanner extends AbstractResourceFinderAdapter {
7676

7777
private BundleSchemeScanner(URI uri) {
7878
this.uri = uri;
@@ -107,11 +107,6 @@ public String next() {
107107
throw new NoSuchElementException();
108108
}
109109

110-
@Override
111-
public void remove() {
112-
throw new UnsupportedOperationException();
113-
}
114-
115110
@Override
116111
public InputStream open() {
117112
if (!accessed) {

core-server/src/main/java/org/glassfish/jersey/server/internal/scanning/FileSchemeResourceFinderFactory.java

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
import java.util.Set;
5050
import java.util.Stack;
5151

52-
import org.glassfish.jersey.server.ResourceFinder;
52+
import org.glassfish.jersey.server.internal.AbstractResourceFinderAdapter;
5353

5454
/**
5555
* A "file" scheme URI scanner that recursively scans directories.
@@ -75,7 +75,7 @@ public FileSchemeScanner create(URI uri, boolean recursive) {
7575
return new FileSchemeScanner(uri, recursive);
7676
}
7777

78-
private class FileSchemeScanner implements ResourceFinder {
78+
private class FileSchemeScanner extends AbstractResourceFinderAdapter {
7979

8080
private final ResourceFinderStack resourceFinderStack;
8181
private final boolean recursive;
@@ -97,11 +97,6 @@ public String next() {
9797
return resourceFinderStack.next();
9898
}
9999

100-
@Override
101-
public void remove() {
102-
resourceFinderStack.remove();
103-
}
104-
105100
@Override
106101
public InputStream open() {
107102
return resourceFinderStack.open();
@@ -113,7 +108,7 @@ public void reset() {
113108
}
114109

115110
private void processFile(final File f) {
116-
resourceFinderStack.push(new ResourceFinder() {
111+
resourceFinderStack.push(new AbstractResourceFinderAdapter() {
117112

118113
Stack<File> files = new Stack<File>() {{
119114
if (f.isDirectory()) {
@@ -158,11 +153,6 @@ public String next() {
158153
throw new NoSuchElementException();
159154
}
160155

161-
@Override
162-
public void remove() {
163-
throw new UnsupportedOperationException();
164-
}
165-
166156
@Override
167157
public InputStream open() {
168158
try {

core-server/src/main/java/org/glassfish/jersey/server/internal/scanning/FilesScanner.java

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -48,15 +48,15 @@
4848
import java.util.Stack;
4949

5050
import org.glassfish.jersey.internal.util.Tokenizer;
51-
import org.glassfish.jersey.server.ResourceFinder;
51+
import org.glassfish.jersey.server.internal.AbstractResourceFinderAdapter;
5252

5353
/**
5454
* A scanner that recursively scans directories and jar files.
5555
* Files or jar entries are reported to a {@link ResourceProcessor}.
5656
*
5757
* @author Paul Sandoz
5858
*/
59-
public class FilesScanner implements ResourceFinder {
59+
public class FilesScanner extends AbstractResourceFinderAdapter {
6060

6161
private ResourceFinderStack resourceFinderStack = new ResourceFinderStack();
6262

@@ -92,7 +92,7 @@ private void processFile(final File f) {
9292
}
9393

9494
} else {
95-
resourceFinderStack.push(new ResourceFinder() {
95+
resourceFinderStack.push(new AbstractResourceFinderAdapter() {
9696

9797
Stack<File> files = new Stack<File>() {{
9898
if (f.isDirectory()) {
@@ -139,11 +139,6 @@ public String next() {
139139
throw new NoSuchElementException();
140140
}
141141

142-
@Override
143-
public void remove() {
144-
throw new UnsupportedOperationException();
145-
}
146-
147142
@Override
148143
public InputStream open() {
149144
try {
@@ -170,11 +165,6 @@ public String next() {
170165
return resourceFinderStack.next();
171166
}
172167

173-
@Override
174-
public void remove() {
175-
resourceFinderStack.remove();
176-
}
177-
178168
@Override
179169
public InputStream open() {
180170
return resourceFinderStack.open();

core-server/src/main/java/org/glassfish/jersey/server/internal/scanning/JarFileScanner.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,14 @@
4747
import java.util.logging.Level;
4848
import java.util.logging.Logger;
4949

50-
import org.glassfish.jersey.server.ResourceFinder;
50+
import org.glassfish.jersey.server.internal.AbstractResourceFinderAdapter;
5151

5252
/**
5353
* A utility class that scans entries in jar files.
5454
*
5555
* @author Paul Sandoz
5656
*/
57-
public final class JarFileScanner implements ResourceFinder {
57+
public final class JarFileScanner extends AbstractResourceFinderAdapter {
5858

5959
private static final Logger LOGGER = Logger.getLogger(JarFileScanner.class.getName());
6060
// platform independent file separator within the jar file
@@ -130,11 +130,6 @@ public String next() {
130130
throw new NoSuchElementException();
131131
}
132132

133-
@Override
134-
public void remove() {
135-
throw new UnsupportedOperationException();
136-
}
137-
138133
@Override
139134
public void reset() {
140135
throw new UnsupportedOperationException();

core-server/src/main/java/org/glassfish/jersey/server/internal/scanning/JarZipSchemeResourceFinderFactory.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151
import java.util.logging.Level;
5252
import java.util.logging.Logger;
5353

54-
import org.glassfish.jersey.server.ResourceFinder;
54+
import org.glassfish.jersey.server.internal.AbstractResourceFinderAdapter;
5555
import org.glassfish.jersey.uri.UriComponent;
5656

5757
/**
@@ -87,7 +87,7 @@ public JarZipSchemeScanner create(final URI uri, boolean recursive) {
8787
}
8888
}
8989

90-
private class JarZipSchemeScanner implements ResourceFinder {
90+
private class JarZipSchemeScanner extends AbstractResourceFinderAdapter {
9191

9292
private InputStream inputStream;
9393
private JarFileScanner jarFileScanner;
@@ -117,11 +117,6 @@ public String next() {
117117
return jarFileScanner.next();
118118
}
119119

120-
@Override
121-
public void remove() {
122-
jarFileScanner.remove();
123-
}
124-
125120
@Override
126121
public InputStream open() {
127122
return jarFileScanner.open();

core-server/src/main/java/org/glassfish/jersey/server/internal/scanning/PackageNamesScanner.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353
import org.glassfish.jersey.internal.OsgiRegistry;
5454
import org.glassfish.jersey.internal.util.ReflectionHelper;
5555
import org.glassfish.jersey.internal.util.Tokenizer;
56-
import org.glassfish.jersey.server.ResourceFinder;
56+
import org.glassfish.jersey.server.internal.AbstractResourceFinderAdapter;
5757
import org.glassfish.jersey.uri.UriComponent;
5858

5959
/**
@@ -85,7 +85,7 @@
8585
* @author Paul Sandoz
8686
* @author Jakub Podlesak (jakub.podlesak at oracle.com)
8787
*/
88-
public class PackageNamesScanner implements ResourceFinder {
88+
public class PackageNamesScanner extends AbstractResourceFinderAdapter {
8989

9090
private final boolean recursive;
9191
private final String[] packages;
@@ -170,11 +170,6 @@ public String next() {
170170
return resourceFinderStack.next();
171171
}
172172

173-
@Override
174-
public void remove() {
175-
resourceFinderStack.remove();
176-
}
177-
178173
@Override
179174
public InputStream open() {
180175
return resourceFinderStack.open();

core-server/src/main/java/org/glassfish/jersey/server/internal/scanning/ResourceFinderStack.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
import java.util.NoSuchElementException;
4646
import java.util.Stack;
4747

48+
import org.glassfish.jersey.server.internal.AbstractResourceFinderAdapter;
4849
import org.glassfish.jersey.server.ResourceFinder;
4950

5051
/**
@@ -54,7 +55,7 @@
5455
*
5556
* @author Pavel Bucek (pavel.bucek at oracle.com)
5657
*/
57-
public class ResourceFinderStack implements ResourceFinder {
58+
public class ResourceFinderStack extends AbstractResourceFinderAdapter {
5859

5960
private final Deque<ResourceFinder> stack = new LinkedList<ResourceFinder>();
6061
private ResourceFinder current = null;
@@ -90,11 +91,6 @@ public String next() {
9091
throw new NoSuchElementException();
9192
}
9293

93-
@Override
94-
public void remove() {
95-
current.remove();
96-
}
97-
9894
@Override
9995
public InputStream open() {
10096
return current.open();

0 commit comments

Comments
 (0)