Committed by
Gerrit Code Review
Restructuring the form of REST API deployment to provide
for security of app's REST APIs and for consistency of exception mappers and JSON writer. Change-Id: Id318372bf62f82ed974355c05e7fe64e0fbfc0c5
Showing
25 changed files
with
400 additions
and
152 deletions
1 | /* | 1 | /* |
2 | - * Copyright 2015 Open Networking Laboratory | 2 | + * Copyright 2014-2015 Open Networking Laboratory |
3 | * | 3 | * |
4 | * Licensed under the Apache License, Version 2.0 (the "License"); | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
5 | * you may not use this file except in compliance with the License. | 5 | * you may not use this file except in compliance with the License. |
... | @@ -13,23 +13,20 @@ | ... | @@ -13,23 +13,20 @@ |
13 | * See the License for the specific language governing permissions and | 13 | * See the License for the specific language governing permissions and |
14 | * limitations under the License. | 14 | * limitations under the License. |
15 | */ | 15 | */ |
16 | -package org.onosproject.rest.exceptions; | ||
17 | 16 | ||
18 | -import org.junit.Test; | 17 | +package org.onosproject.acl; |
19 | 18 | ||
20 | -import static org.junit.Assert.*; | 19 | +import org.onlab.rest.AbstractWebApplication; |
20 | + | ||
21 | +import java.util.Set; | ||
21 | 22 | ||
22 | /** | 23 | /** |
23 | - * Set of tests for the various exception mappers. | 24 | + * ACL REST API web application. |
24 | */ | 25 | */ |
25 | -public class ExceptionMapperTest { | 26 | +public class AclWebApplication extends AbstractWebApplication { |
26 | - | 27 | + @Override |
27 | - @Test | 28 | + public Set<Class<?>> getClasses() { |
28 | - public void emptyMessage() { | 29 | + return getClasses(AclWebResource.class); |
29 | - RuntimeException exception = new NullPointerException(); | ||
30 | - ServerErrorMapper mapper = new ServerErrorMapper(); | ||
31 | - Object response = mapper.toResponse(exception).getEntity(); | ||
32 | - assertTrue("incorrect response", | ||
33 | - response.toString().contains("ExceptionMapperTest.emptyMessage(")); | ||
34 | } | 30 | } |
35 | -} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
31 | +} | ||
32 | + | ... | ... |
... | @@ -22,20 +22,35 @@ | ... | @@ -22,20 +22,35 @@ |
22 | xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" | 22 | xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" |
23 | xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" | 23 | xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" |
24 | id="ONOS" version="2.5"> | 24 | id="ONOS" version="2.5"> |
25 | - <display-name>ACL application</display-name> | 25 | + <display-name>ACL application REST API</display-name> |
26 | + | ||
27 | + <security-constraint> | ||
28 | + <web-resource-collection> | ||
29 | + <web-resource-name>Secured</web-resource-name> | ||
30 | + <url-pattern>/*</url-pattern> | ||
31 | + </web-resource-collection> | ||
32 | + <auth-constraint> | ||
33 | + <role-name>admin</role-name> | ||
34 | + </auth-constraint> | ||
35 | + </security-constraint> | ||
36 | + | ||
37 | + <security-role> | ||
38 | + <role-name>admin</role-name> | ||
39 | + </security-role> | ||
40 | + | ||
41 | + <login-config> | ||
42 | + <auth-method>BASIC</auth-method> | ||
43 | + <realm-name>karaf</realm-name> | ||
44 | + </login-config> | ||
26 | 45 | ||
27 | <servlet> | 46 | <servlet> |
28 | <servlet-name>JAX-RS Service</servlet-name> | 47 | <servlet-name>JAX-RS Service</servlet-name> |
29 | <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> | 48 | <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> |
30 | <init-param> | 49 | <init-param> |
31 | - <param-name>com.sun.jersey.config.property.resourceConfigClass</param-name> | 50 | + <param-name>javax.ws.rs.Application</param-name> |
32 | - <param-value>com.sun.jersey.api.core.ClassNamesResourceConfig</param-value> | 51 | + <param-value>org.onosproject.acl.AclWebApplication</param-value> |
33 | - </init-param> | ||
34 | - <init-param> | ||
35 | - <param-name>com.sun.jersey.config.property.classnames</param-name> | ||
36 | - <param-value>org.onosproject.acl.AclWebResource</param-value> | ||
37 | </init-param> | 52 | </init-param> |
38 | - <load-on-startup>10</load-on-startup> | 53 | + <load-on-startup>1</load-on-startup> |
39 | </servlet> | 54 | </servlet> |
40 | 55 | ||
41 | <servlet-mapping> | 56 | <servlet-mapping> | ... | ... |
1 | +/* | ||
2 | + * Copyright 2014-2015 Open Networking Laboratory | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | + | ||
17 | +package org.onosproject.dhcp.rest; | ||
18 | + | ||
19 | +import org.onlab.rest.AbstractWebApplication; | ||
20 | + | ||
21 | +import java.util.Set; | ||
22 | + | ||
23 | +/** | ||
24 | + * DHCP Web application. | ||
25 | + */ | ||
26 | +public class DhcpWebApplication extends AbstractWebApplication { | ||
27 | + @Override | ||
28 | + public Set<Class<?>> getClasses() { | ||
29 | + return getClasses(DhcpWebResource.class); | ||
30 | + } | ||
31 | +} |
... | @@ -44,7 +44,7 @@ import java.util.Map; | ... | @@ -44,7 +44,7 @@ import java.util.Map; |
44 | @Path("dhcp") | 44 | @Path("dhcp") |
45 | public class DhcpWebResource extends AbstractWebResource { | 45 | public class DhcpWebResource extends AbstractWebResource { |
46 | 46 | ||
47 | - final DhcpService service = get(DhcpService.class); | 47 | + private final DhcpService service = get(DhcpService.class); |
48 | 48 | ||
49 | /** | 49 | /** |
50 | * Get DHCP server configuration data. | 50 | * Get DHCP server configuration data. |
... | @@ -56,12 +56,11 @@ public class DhcpWebResource extends AbstractWebResource { | ... | @@ -56,12 +56,11 @@ public class DhcpWebResource extends AbstractWebResource { |
56 | @GET | 56 | @GET |
57 | @Path("config") | 57 | @Path("config") |
58 | public Response getConfigs() { | 58 | public Response getConfigs() { |
59 | - DhcpService service = get(DhcpService.class); | ||
60 | ObjectNode node = mapper().createObjectNode() | 59 | ObjectNode node = mapper().createObjectNode() |
61 | .put("leaseTime", service.getLeaseTime()) | 60 | .put("leaseTime", service.getLeaseTime()) |
62 | .put("renewalTime", service.getRenewalTime()) | 61 | .put("renewalTime", service.getRenewalTime()) |
63 | .put("rebindingTime", service.getRebindingTime()); | 62 | .put("rebindingTime", service.getRebindingTime()); |
64 | - return ok(node.toString()).build(); | 63 | + return ok(node).build(); |
65 | } | 64 | } |
66 | 65 | ||
67 | /** | 66 | /** |
... | @@ -76,13 +75,13 @@ public class DhcpWebResource extends AbstractWebResource { | ... | @@ -76,13 +75,13 @@ public class DhcpWebResource extends AbstractWebResource { |
76 | public Response listMappings() { | 75 | public Response listMappings() { |
77 | ObjectNode root = mapper().createObjectNode(); | 76 | ObjectNode root = mapper().createObjectNode(); |
78 | 77 | ||
79 | - final Map<HostId, IpAssignment> intents = service.listMapping(); | 78 | + Map<HostId, IpAssignment> intents = service.listMapping(); |
80 | ArrayNode arrayNode = root.putArray("mappings"); | 79 | ArrayNode arrayNode = root.putArray("mappings"); |
81 | intents.entrySet().forEach(i -> arrayNode.add(mapper().createObjectNode() | 80 | intents.entrySet().forEach(i -> arrayNode.add(mapper().createObjectNode() |
82 | .put("host", i.getKey().toString()) | 81 | .put("host", i.getKey().toString()) |
83 | .put("ip", i.getValue().ipAddress().toString()))); | 82 | .put("ip", i.getValue().ipAddress().toString()))); |
84 | 83 | ||
85 | - return ok(root.toString()).build(); | 84 | + return ok(root).build(); |
86 | } | 85 | } |
87 | 86 | ||
88 | 87 | ||
... | @@ -96,12 +95,11 @@ public class DhcpWebResource extends AbstractWebResource { | ... | @@ -96,12 +95,11 @@ public class DhcpWebResource extends AbstractWebResource { |
96 | @GET | 95 | @GET |
97 | @Path("available") | 96 | @Path("available") |
98 | public Response listAvailableIPs() { | 97 | public Response listAvailableIPs() { |
99 | - final Iterable<Ip4Address> availableIPList = service.getAvailableIPs(); | 98 | + Iterable<Ip4Address> availableIPList = service.getAvailableIPs(); |
100 | - | 99 | + ObjectNode root = mapper().createObjectNode(); |
101 | - final ObjectNode root = mapper().createObjectNode(); | ||
102 | ArrayNode arrayNode = root.putArray("availableIP"); | 100 | ArrayNode arrayNode = root.putArray("availableIP"); |
103 | availableIPList.forEach(i -> arrayNode.add(i.toString())); | 101 | availableIPList.forEach(i -> arrayNode.add(i.toString())); |
104 | - return ok(root.toString()).build(); | 102 | + return ok(root).build(); |
105 | } | 103 | } |
106 | 104 | ||
107 | /** | 105 | /** |
... | @@ -139,7 +137,7 @@ public class DhcpWebResource extends AbstractWebResource { | ... | @@ -139,7 +137,7 @@ public class DhcpWebResource extends AbstractWebResource { |
139 | } catch (IOException e) { | 137 | } catch (IOException e) { |
140 | throw new IllegalArgumentException(e.getMessage()); | 138 | throw new IllegalArgumentException(e.getMessage()); |
141 | } | 139 | } |
142 | - return ok(root.toString()).build(); | 140 | + return ok(root).build(); |
143 | } | 141 | } |
144 | 142 | ||
145 | /** | 143 | /** |
... | @@ -152,7 +150,6 @@ public class DhcpWebResource extends AbstractWebResource { | ... | @@ -152,7 +150,6 @@ public class DhcpWebResource extends AbstractWebResource { |
152 | @DELETE | 150 | @DELETE |
153 | @Path("mappings/{macID}") | 151 | @Path("mappings/{macID}") |
154 | public Response deleteMapping(@PathParam("macID") String macID) { | 152 | public Response deleteMapping(@PathParam("macID") String macID) { |
155 | - | ||
156 | ObjectNode root = mapper().createObjectNode(); | 153 | ObjectNode root = mapper().createObjectNode(); |
157 | 154 | ||
158 | if (!service.removeStaticMapping(MacAddress.valueOf(macID))) { | 155 | if (!service.removeStaticMapping(MacAddress.valueOf(macID))) { |
... | @@ -164,6 +161,6 @@ public class DhcpWebResource extends AbstractWebResource { | ... | @@ -164,6 +161,6 @@ public class DhcpWebResource extends AbstractWebResource { |
164 | .put("host", i.getKey().toString()) | 161 | .put("host", i.getKey().toString()) |
165 | .put("ip", i.getValue().ipAddress().toString()))); | 162 | .put("ip", i.getValue().ipAddress().toString()))); |
166 | 163 | ||
167 | - return ok(root.toString()).build(); | 164 | + return ok(root).build(); |
168 | } | 165 | } |
169 | } | 166 | } | ... | ... |
... | @@ -14,24 +14,38 @@ | ... | @@ -14,24 +14,38 @@ |
14 | ~ See the License for the specific language governing permissions and | 14 | ~ See the License for the specific language governing permissions and |
15 | ~ limitations under the License. | 15 | ~ limitations under the License. |
16 | --> | 16 | --> |
17 | -<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" | 17 | +<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
18 | + xmlns="http://java.sun.com/xml/ns/javaee" | ||
18 | xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" | 19 | xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" |
19 | xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" | 20 | xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" |
20 | id="ONOS" version="2.5"> | 21 | id="ONOS" version="2.5"> |
21 | <display-name>DHCP Server REST API v1.0</display-name> | 22 | <display-name>DHCP Server REST API v1.0</display-name> |
22 | 23 | ||
24 | + <security-constraint> | ||
25 | + <web-resource-collection> | ||
26 | + <web-resource-name>Secured</web-resource-name> | ||
27 | + <url-pattern>/*</url-pattern> | ||
28 | + </web-resource-collection> | ||
29 | + <auth-constraint> | ||
30 | + <role-name>admin</role-name> | ||
31 | + </auth-constraint> | ||
32 | + </security-constraint> | ||
33 | + | ||
34 | + <security-role> | ||
35 | + <role-name>admin</role-name> | ||
36 | + </security-role> | ||
37 | + | ||
38 | + <login-config> | ||
39 | + <auth-method>BASIC</auth-method> | ||
40 | + <realm-name>karaf</realm-name> | ||
41 | + </login-config> | ||
42 | + | ||
23 | <servlet> | 43 | <servlet> |
24 | <servlet-name>JAX-RS Service</servlet-name> | 44 | <servlet-name>JAX-RS Service</servlet-name> |
25 | <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> | 45 | <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> |
26 | <init-param> | 46 | <init-param> |
27 | - <param-name>com.sun.jersey.config.property.resourceConfigClass</param-name> | 47 | + <param-name>javax.ws.rs.Application</param-name> |
28 | - <param-value>com.sun.jersey.api.core.ClassNamesResourceConfig</param-value> | 48 | + <param-value>org.onosproject.dhcp.rest.DhcpWebApplication</param-value> |
29 | - </init-param> | ||
30 | - <init-param> | ||
31 | - <param-name>com.sun.jersey.config.property.classnames</param-name> | ||
32 | - <param-value> | ||
33 | - org.onosproject.dhcp.rest.DhcpWebResource | ||
34 | - </param-value> | ||
35 | </init-param> | 49 | </init-param> |
36 | <load-on-startup>1</load-on-startup> | 50 | <load-on-startup>1</load-on-startup> |
37 | </servlet> | 51 | </servlet> | ... | ... |
1 | +/* | ||
2 | + * Copyright 2014-2015 Open Networking Laboratory | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | + | ||
17 | +package org.onosproject.vtnweb.resources; | ||
18 | + | ||
19 | +import org.onlab.rest.AbstractWebApplication; | ||
20 | + | ||
21 | +import java.util.Set; | ||
22 | + | ||
23 | +/** | ||
24 | + * VTN REST API web application. | ||
25 | + */ | ||
26 | +public class VtnWebApplication extends AbstractWebApplication { | ||
27 | + @Override | ||
28 | + public Set<Class<?>> getClasses() { | ||
29 | + return getClasses(TenantNetworkWebResource.class, | ||
30 | + SubnetWebResource.class, | ||
31 | + VirtualPortWebResource.class, | ||
32 | + FlowClassifierWebResource.class, | ||
33 | + PortChainWebResource.class, | ||
34 | + PortPairGroupWebResource.class, | ||
35 | + PortPairWebResource.class, | ||
36 | + FloatingIpWebResource.class, | ||
37 | + RouterWebResource.class); | ||
38 | + } | ||
39 | +} | ||
40 | + |
... | @@ -42,41 +42,17 @@ | ... | @@ -42,41 +42,17 @@ |
42 | --> | 42 | --> |
43 | 43 | ||
44 | <servlet> | 44 | <servlet> |
45 | - <servlet-name>VTNRSC JAX-RS Service</servlet-name> | 45 | + <servlet-name>JAX-RS Service</servlet-name> |
46 | <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> | 46 | <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> |
47 | <init-param> | 47 | <init-param> |
48 | - <param-name>com.sun.jersey.config.property.resourceConfigClass</param-name> | 48 | + <param-name>javax.ws.rs.Application</param-name> |
49 | - <param-value>com.sun.jersey.api.core.ClassNamesResourceConfig</param-value> | 49 | + <param-value>org.onosproject.vtnweb.resources.VtnWebApplication</param-value> |
50 | - </init-param> | ||
51 | - <init-param> | ||
52 | - <param-name>com.sun.jersey.config.property.classnames</param-name> | ||
53 | - <param-value> | ||
54 | - org.onosproject.rest.exceptions.EntityNotFoundMapper, | ||
55 | - org.onosproject.rest.exceptions.ServiceNotFoundMapper, | ||
56 | - org.onosproject.rest.exceptions.NotFoundMapper, | ||
57 | - org.onosproject.rest.exceptions.ServerErrorMapper, | ||
58 | - org.onosproject.rest.exceptions.BadRequestMapper, | ||
59 | - org.onosproject.rest.exceptions.WebApplicationExceptionMapper, | ||
60 | - org.onosproject.rest.exceptions.IllegalArgumentExceptionMapper, | ||
61 | - org.onosproject.rest.exceptions.IllegalStateExceptionMapper, | ||
62 | - org.onosproject.rest.resources.JsonBodyWriter, | ||
63 | - | ||
64 | - org.onosproject.vtnweb.resources.TenantNetworkWebResource, | ||
65 | - org.onosproject.vtnweb.resources.SubnetWebResource, | ||
66 | - org.onosproject.vtnweb.resources.VirtualPortWebResource, | ||
67 | - org.onosproject.vtnweb.resources.FlowClassifierWebResource, | ||
68 | - org.onosproject.vtnweb.resources.PortChainWebResource, | ||
69 | - org.onosproject.vtnweb.resources.PortPairGroupWebResource, | ||
70 | - org.onosproject.vtnweb.resources.PortPairWebResource, | ||
71 | - org.onosproject.vtnweb.resources.FloatingIpWebResource, | ||
72 | - org.onosproject.vtnweb.resources.RouterWebResource | ||
73 | - </param-value> | ||
74 | </init-param> | 50 | </init-param> |
75 | <load-on-startup>1</load-on-startup> | 51 | <load-on-startup>1</load-on-startup> |
76 | </servlet> | 52 | </servlet> |
77 | 53 | ||
78 | <servlet-mapping> | 54 | <servlet-mapping> |
79 | - <servlet-name>VTNRSC JAX-RS Service</servlet-name> | 55 | + <servlet-name>JAX-RS Service</servlet-name> |
80 | <url-pattern>/*</url-pattern> | 56 | <url-pattern>/*</url-pattern> |
81 | </servlet-mapping> | 57 | </servlet-mapping> |
82 | </web-app> | 58 | </web-app> | ... | ... |
... | @@ -33,6 +33,25 @@ | ... | @@ -33,6 +33,25 @@ |
33 | 33 | ||
34 | <dependencies> | 34 | <dependencies> |
35 | <dependency> | 35 | <dependency> |
36 | + <groupId>org.onosproject</groupId> | ||
37 | + <artifactId>onlab-misc</artifactId> | ||
38 | + </dependency> | ||
39 | + | ||
40 | + <dependency> | ||
41 | + <groupId>org.onosproject</groupId> | ||
42 | + <artifactId>onlab-osgi</artifactId> | ||
43 | + </dependency> | ||
44 | + | ||
45 | + <dependency> | ||
46 | + <groupId>com.fasterxml.jackson.core</groupId> | ||
47 | + <artifactId>jackson-annotations</artifactId> | ||
48 | + </dependency> | ||
49 | + <dependency> | ||
50 | + <groupId>com.fasterxml.jackson.core</groupId> | ||
51 | + <artifactId>jackson-databind</artifactId> | ||
52 | + </dependency> | ||
53 | + | ||
54 | + <dependency> | ||
36 | <groupId>com.sun.jersey.jersey-test-framework</groupId> | 55 | <groupId>com.sun.jersey.jersey-test-framework</groupId> |
37 | <artifactId>jersey-test-framework-core</artifactId> | 56 | <artifactId>jersey-test-framework-core</artifactId> |
38 | <scope>test</scope> | 57 | <scope>test</scope> |
... | @@ -42,12 +61,6 @@ | ... | @@ -42,12 +61,6 @@ |
42 | <artifactId>jersey-test-framework-grizzly2</artifactId> | 61 | <artifactId>jersey-test-framework-grizzly2</artifactId> |
43 | <scope>test</scope> | 62 | <scope>test</scope> |
44 | </dependency> | 63 | </dependency> |
45 | - | ||
46 | - <dependency> | ||
47 | - <groupId>org.onosproject</groupId> | ||
48 | - <artifactId>onlab-osgi</artifactId> | ||
49 | - <version>${project.version}</version> | ||
50 | - </dependency> | ||
51 | </dependencies> | 64 | </dependencies> |
52 | 65 | ||
53 | </project> | 66 | </project> | ... | ... |
1 | +/* | ||
2 | + * Copyright 2014-2015 Open Networking Laboratory | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | + | ||
17 | +package org.onlab.rest; | ||
18 | + | ||
19 | +import com.google.common.collect.ImmutableSet; | ||
20 | +import org.onlab.rest.exceptions.BadRequestMapper; | ||
21 | +import org.onlab.rest.exceptions.EntityNotFoundMapper; | ||
22 | +import org.onlab.rest.exceptions.IllegalArgumentExceptionMapper; | ||
23 | +import org.onlab.rest.exceptions.IllegalStateExceptionMapper; | ||
24 | +import org.onlab.rest.exceptions.NotFoundMapper; | ||
25 | +import org.onlab.rest.exceptions.ServerErrorMapper; | ||
26 | +import org.onlab.rest.exceptions.ServiceNotFoundMapper; | ||
27 | +import org.onlab.rest.exceptions.WebApplicationExceptionMapper; | ||
28 | + | ||
29 | +import javax.ws.rs.core.Application; | ||
30 | +import java.util.Set; | ||
31 | + | ||
32 | +/** | ||
33 | + * Base web application. | ||
34 | + */ | ||
35 | +public abstract class AbstractWebApplication extends Application { | ||
36 | + | ||
37 | + /** | ||
38 | + * Returns the aggregate set of resources, writers and mappers combined | ||
39 | + * with a default set of such web entities. | ||
40 | + * | ||
41 | + * @param classes set of resources, writers and mappers | ||
42 | + * @return combined set of web entities | ||
43 | + */ | ||
44 | + protected Set<Class<?>> getClasses(Class<?>... classes) { | ||
45 | + ImmutableSet.Builder<Class<?>> builder = ImmutableSet.builder(); | ||
46 | + builder.add(ServiceNotFoundMapper.class, | ||
47 | + EntityNotFoundMapper.class, | ||
48 | + NotFoundMapper.class, | ||
49 | + ServerErrorMapper.class, | ||
50 | + BadRequestMapper.class, | ||
51 | + WebApplicationExceptionMapper.class, | ||
52 | + IllegalArgumentExceptionMapper.class, | ||
53 | + IllegalStateExceptionMapper.class, | ||
54 | + JsonBodyWriter.class); | ||
55 | + builder.add(classes); | ||
56 | + return builder.build(); | ||
57 | + } | ||
58 | + | ||
59 | + @Override | ||
60 | + public abstract Set<Class<?>> getClasses(); | ||
61 | + | ||
62 | +} |
1 | +/* | ||
2 | + * Copyright 2014-2015 Open Networking Laboratory | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | + | ||
17 | +package org.onlab.rest; | ||
18 | + | ||
19 | +import com.fasterxml.jackson.databind.ObjectMapper; | ||
20 | +import com.fasterxml.jackson.databind.node.ObjectNode; | ||
21 | + | ||
22 | +import javax.ws.rs.Produces; | ||
23 | +import javax.ws.rs.core.MediaType; | ||
24 | +import javax.ws.rs.core.MultivaluedMap; | ||
25 | +import javax.ws.rs.ext.MessageBodyWriter; | ||
26 | +import javax.ws.rs.ext.Provider; | ||
27 | +import java.io.IOException; | ||
28 | +import java.io.OutputStream; | ||
29 | +import java.lang.annotation.Annotation; | ||
30 | +import java.lang.reflect.Type; | ||
31 | + | ||
32 | +/** | ||
33 | + * JAX-RS Response message body writer. | ||
34 | + */ | ||
35 | +@Provider | ||
36 | +@Produces("application/json") | ||
37 | +public class JsonBodyWriter implements MessageBodyWriter<ObjectNode> { | ||
38 | + | ||
39 | + private ObjectMapper mapper = new ObjectMapper(); | ||
40 | + | ||
41 | + @Override | ||
42 | + public boolean isWriteable(Class<?> type, Type genericType, | ||
43 | + Annotation[] annotations, MediaType mediaType) { | ||
44 | + return type == ObjectNode.class; | ||
45 | + } | ||
46 | + | ||
47 | + @Override | ||
48 | + public long getSize(ObjectNode node, Class<?> type, Type genericType, | ||
49 | + Annotation[] annotations, MediaType mediaType) { | ||
50 | + return -1; | ||
51 | + } | ||
52 | + | ||
53 | + @Override | ||
54 | + public void writeTo(ObjectNode node, Class<?> type, Type genericType, | ||
55 | + Annotation[] annotations, MediaType mediaType, | ||
56 | + MultivaluedMap<String, Object> httpHeaders, | ||
57 | + OutputStream entityStream) throws IOException { | ||
58 | + mapper.writer().writeValue(entityStream, node); | ||
59 | + entityStream.flush(); | ||
60 | + } | ||
61 | +} |
... | @@ -13,7 +13,8 @@ | ... | @@ -13,7 +13,8 @@ |
13 | * See the License for the specific language governing permissions and | 13 | * See the License for the specific language governing permissions and |
14 | * limitations under the License. | 14 | * limitations under the License. |
15 | */ | 15 | */ |
16 | -package org.onosproject.rest.exceptions; | 16 | + |
17 | +package org.onlab.rest.exceptions; | ||
17 | 18 | ||
18 | import com.fasterxml.jackson.databind.ObjectMapper; | 19 | import com.fasterxml.jackson.databind.ObjectMapper; |
19 | import com.fasterxml.jackson.databind.node.ObjectNode; | 20 | import com.fasterxml.jackson.databind.node.ObjectNode; | ... | ... |
1 | /* | 1 | /* |
2 | - * Copyright 2015 Open Networking Laboratory | 2 | + * Copyright 2014-2015 Open Networking Laboratory |
3 | * | 3 | * |
4 | * Licensed under the Apache License, Version 2.0 (the "License"); | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
5 | * you may not use this file except in compliance with the License. | 5 | * you may not use this file except in compliance with the License. |
... | @@ -13,11 +13,11 @@ | ... | @@ -13,11 +13,11 @@ |
13 | * See the License for the specific language governing permissions and | 13 | * See the License for the specific language governing permissions and |
14 | * limitations under the License. | 14 | * limitations under the License. |
15 | */ | 15 | */ |
16 | -package org.onosproject.rest.exceptions; | 16 | + |
17 | +package org.onlab.rest.exceptions; | ||
17 | 18 | ||
18 | import javax.ws.rs.core.Response; | 19 | import javax.ws.rs.core.Response; |
19 | import javax.ws.rs.ext.Provider; | 20 | import javax.ws.rs.ext.Provider; |
20 | - | ||
21 | import java.io.IOException; | 21 | import java.io.IOException; |
22 | 22 | ||
23 | /** | 23 | /** | ... | ... |
... | @@ -13,7 +13,8 @@ | ... | @@ -13,7 +13,8 @@ |
13 | * See the License for the specific language governing permissions and | 13 | * See the License for the specific language governing permissions and |
14 | * limitations under the License. | 14 | * limitations under the License. |
15 | */ | 15 | */ |
16 | -package org.onosproject.rest.exceptions; | 16 | + |
17 | +package org.onlab.rest.exceptions; | ||
17 | 18 | ||
18 | import org.onlab.util.ItemNotFoundException; | 19 | import org.onlab.util.ItemNotFoundException; |
19 | 20 | ... | ... |
... | @@ -13,7 +13,8 @@ | ... | @@ -13,7 +13,8 @@ |
13 | * See the License for the specific language governing permissions and | 13 | * See the License for the specific language governing permissions and |
14 | * limitations under the License. | 14 | * limitations under the License. |
15 | */ | 15 | */ |
16 | -package org.onosproject.rest.exceptions; | 16 | + |
17 | +package org.onlab.rest.exceptions; | ||
17 | 18 | ||
18 | import javax.ws.rs.core.Response; | 19 | import javax.ws.rs.core.Response; |
19 | import javax.ws.rs.ext.Provider; | 20 | import javax.ws.rs.ext.Provider; | ... | ... |
1 | /* | 1 | /* |
2 | - * Copyright 2015 Open Networking Laboratory | 2 | + * Copyright 2014-2015 Open Networking Laboratory |
3 | * | 3 | * |
4 | * Licensed under the Apache License, Version 2.0 (the "License"); | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
5 | * you may not use this file except in compliance with the License. | 5 | * you may not use this file except in compliance with the License. |
... | @@ -13,7 +13,8 @@ | ... | @@ -13,7 +13,8 @@ |
13 | * See the License for the specific language governing permissions and | 13 | * See the License for the specific language governing permissions and |
14 | * limitations under the License. | 14 | * limitations under the License. |
15 | */ | 15 | */ |
16 | -package org.onosproject.rest.exceptions; | 16 | + |
17 | +package org.onlab.rest.exceptions; | ||
17 | 18 | ||
18 | import javax.ws.rs.core.Response; | 19 | import javax.ws.rs.core.Response; |
19 | import javax.ws.rs.ext.Provider; | 20 | import javax.ws.rs.ext.Provider; | ... | ... |
1 | /* | 1 | /* |
2 | - * Copyright 2015 Open Networking Laboratory | 2 | + * Copyright 2014-2015 Open Networking Laboratory |
3 | * | 3 | * |
4 | * Licensed under the Apache License, Version 2.0 (the "License"); | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
5 | * you may not use this file except in compliance with the License. | 5 | * you may not use this file except in compliance with the License. |
... | @@ -13,13 +13,14 @@ | ... | @@ -13,13 +13,14 @@ |
13 | * See the License for the specific language governing permissions and | 13 | * See the License for the specific language governing permissions and |
14 | * limitations under the License. | 14 | * limitations under the License. |
15 | */ | 15 | */ |
16 | -package org.onosproject.rest.exceptions; | ||
17 | 16 | ||
18 | -import javax.ws.rs.core.Response; | 17 | +package org.onlab.rest.exceptions; |
19 | -import javax.ws.rs.ext.Provider; | ||
20 | 18 | ||
21 | import com.sun.jersey.api.NotFoundException; | 19 | import com.sun.jersey.api.NotFoundException; |
22 | 20 | ||
21 | +import javax.ws.rs.core.Response; | ||
22 | +import javax.ws.rs.ext.Provider; | ||
23 | + | ||
23 | /** | 24 | /** |
24 | * Mapper for api not found exceptions to the NOT_FOUND response code. | 25 | * Mapper for api not found exceptions to the NOT_FOUND response code. |
25 | */ | 26 | */ | ... | ... |
... | @@ -13,13 +13,14 @@ | ... | @@ -13,13 +13,14 @@ |
13 | * See the License for the specific language governing permissions and | 13 | * See the License for the specific language governing permissions and |
14 | * limitations under the License. | 14 | * limitations under the License. |
15 | */ | 15 | */ |
16 | -package org.onosproject.rest.exceptions; | ||
17 | 16 | ||
18 | -import javax.ws.rs.core.Response; | 17 | +package org.onlab.rest.exceptions; |
19 | -import javax.ws.rs.ext.Provider; | ||
20 | 18 | ||
21 | import org.slf4j.Logger; | 19 | import org.slf4j.Logger; |
22 | 20 | ||
21 | +import javax.ws.rs.core.Response; | ||
22 | +import javax.ws.rs.ext.Provider; | ||
23 | + | ||
23 | import static org.slf4j.LoggerFactory.getLogger; | 24 | import static org.slf4j.LoggerFactory.getLogger; |
24 | 25 | ||
25 | /** | 26 | /** | ... | ... |
... | @@ -13,7 +13,8 @@ | ... | @@ -13,7 +13,8 @@ |
13 | * See the License for the specific language governing permissions and | 13 | * See the License for the specific language governing permissions and |
14 | * limitations under the License. | 14 | * limitations under the License. |
15 | */ | 15 | */ |
16 | -package org.onosproject.rest.exceptions; | 16 | + |
17 | +package org.onlab.rest.exceptions; | ||
17 | 18 | ||
18 | import org.onlab.osgi.ServiceNotFoundException; | 19 | import org.onlab.osgi.ServiceNotFoundException; |
19 | 20 | ... | ... |
1 | /* | 1 | /* |
2 | - * Copyright 2015 Open Networking Laboratory | 2 | + * Copyright 2014-2015 Open Networking Laboratory |
3 | * | 3 | * |
4 | * Licensed under the Apache License, Version 2.0 (the "License"); | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
5 | * you may not use this file except in compliance with the License. | 5 | * you may not use this file except in compliance with the License. |
... | @@ -13,7 +13,8 @@ | ... | @@ -13,7 +13,8 @@ |
13 | * See the License for the specific language governing permissions and | 13 | * See the License for the specific language governing permissions and |
14 | * limitations under the License. | 14 | * limitations under the License. |
15 | */ | 15 | */ |
16 | -package org.onosproject.rest.exceptions; | 16 | + |
17 | +package org.onlab.rest.exceptions; | ||
17 | 18 | ||
18 | import javax.ws.rs.WebApplicationException; | 19 | import javax.ws.rs.WebApplicationException; |
19 | import javax.ws.rs.core.Response; | 20 | import javax.ws.rs.core.Response; | ... | ... |
1 | /* | 1 | /* |
2 | - * Copyright 2014 Open Networking Laboratory | 2 | + * Copyright 2014-2015 Open Networking Laboratory |
3 | * | 3 | * |
4 | * Licensed under the Apache License, Version 2.0 (the "License"); | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
5 | * you may not use this file except in compliance with the License. | 5 | * you may not use this file except in compliance with the License. |
... | @@ -17,4 +17,4 @@ | ... | @@ -17,4 +17,4 @@ |
17 | /** | 17 | /** |
18 | * Various exception mappers to map errors to proper response status codes. | 18 | * Various exception mappers to map errors to proper response status codes. |
19 | */ | 19 | */ |
20 | -package org.onosproject.rest.exceptions; | 20 | +package org.onlab.rest.exceptions; | ... | ... |
1 | +/* | ||
2 | + * Copyright 2014-2015 Open Networking Laboratory | ||
3 | + * | ||
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | + * you may not use this file except in compliance with the License. | ||
6 | + * You may obtain a copy of the License at | ||
7 | + * | ||
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | + * | ||
10 | + * Unless required by applicable law or agreed to in writing, software | ||
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | + * See the License for the specific language governing permissions and | ||
14 | + * limitations under the License. | ||
15 | + */ | ||
16 | + | ||
17 | +package org.onosproject.rest.resources; | ||
18 | + | ||
19 | +import org.onlab.rest.AbstractWebApplication; | ||
20 | + | ||
21 | +import java.util.Set; | ||
22 | + | ||
23 | +/** | ||
24 | + * Core REST APIs web application. | ||
25 | + */ | ||
26 | +public class CoreWebApplication extends AbstractWebApplication { | ||
27 | + | ||
28 | + @Override | ||
29 | + public Set<Class<?>> getClasses() { | ||
30 | + return getClasses(ApiDocResource.class, | ||
31 | + ApplicationsWebResource.class, | ||
32 | + ComponentConfigWebResource.class, | ||
33 | + NetworkConfigWebResource.class, | ||
34 | + ClusterWebResource.class, | ||
35 | + DevicesWebResource.class, | ||
36 | + LinksWebResource.class, | ||
37 | + HostsWebResource.class, | ||
38 | + IntentsWebResource.class, | ||
39 | + FlowsWebResource.class, | ||
40 | + TopologyWebResource.class, | ||
41 | + ConfigWebResource.class, | ||
42 | + PathsWebResource.class, | ||
43 | + StatisticsWebResource.class | ||
44 | + ); | ||
45 | + } | ||
46 | +} |
... | @@ -45,37 +45,8 @@ | ... | @@ -45,37 +45,8 @@ |
45 | <servlet-name>JAX-RS Service</servlet-name> | 45 | <servlet-name>JAX-RS Service</servlet-name> |
46 | <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> | 46 | <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> |
47 | <init-param> | 47 | <init-param> |
48 | - <param-name>com.sun.jersey.config.property.resourceConfigClass</param-name> | 48 | + <param-name>javax.ws.rs.Application</param-name> |
49 | - <param-value>com.sun.jersey.api.core.ClassNamesResourceConfig</param-value> | 49 | + <param-value>org.onosproject.rest.resources.CoreWebApplication</param-value> |
50 | - </init-param> | ||
51 | - <init-param> | ||
52 | - <param-name>com.sun.jersey.config.property.classnames</param-name> | ||
53 | - <param-value> | ||
54 | - org.onosproject.rest.exceptions.EntityNotFoundMapper, | ||
55 | - org.onosproject.rest.exceptions.ServiceNotFoundMapper, | ||
56 | - org.onosproject.rest.exceptions.NotFoundMapper, | ||
57 | - org.onosproject.rest.exceptions.ServerErrorMapper, | ||
58 | - org.onosproject.rest.exceptions.BadRequestMapper, | ||
59 | - org.onosproject.rest.exceptions.WebApplicationExceptionMapper, | ||
60 | - org.onosproject.rest.exceptions.IllegalArgumentExceptionMapper, | ||
61 | - org.onosproject.rest.exceptions.IllegalStateExceptionMapper, | ||
62 | - org.onosproject.rest.resources.JsonBodyWriter, | ||
63 | - | ||
64 | - org.onosproject.rest.resources.ApiDocResource, | ||
65 | - org.onosproject.rest.resources.ApplicationsWebResource, | ||
66 | - org.onosproject.rest.resources.ComponentConfigWebResource, | ||
67 | - org.onosproject.rest.resources.NetworkConfigWebResource, | ||
68 | - org.onosproject.rest.resources.ClusterWebResource, | ||
69 | - org.onosproject.rest.resources.DevicesWebResource, | ||
70 | - org.onosproject.rest.resources.LinksWebResource, | ||
71 | - org.onosproject.rest.resources.HostsWebResource, | ||
72 | - org.onosproject.rest.resources.IntentsWebResource, | ||
73 | - org.onosproject.rest.resources.FlowsWebResource, | ||
74 | - org.onosproject.rest.resources.TopologyWebResource, | ||
75 | - org.onosproject.rest.resources.ConfigWebResource, | ||
76 | - org.onosproject.rest.resources.PathsWebResource, | ||
77 | - org.onosproject.rest.resources.StatisticsWebResource | ||
78 | - </param-value> | ||
79 | </init-param> | 50 | </init-param> |
80 | <load-on-startup>1</load-on-startup> | 51 | <load-on-startup>1</load-on-startup> |
81 | </servlet> | 52 | </servlet> | ... | ... |
... | @@ -15,13 +15,12 @@ | ... | @@ -15,13 +15,12 @@ |
15 | */ | 15 | */ |
16 | package org.onosproject.rest; | 16 | package org.onosproject.rest; |
17 | 17 | ||
18 | -import java.io.InputStream; | 18 | +import com.eclipsesource.json.JsonArray; |
19 | -import java.net.HttpURLConnection; | 19 | +import com.eclipsesource.json.JsonObject; |
20 | -import java.util.Collections; | 20 | +import com.eclipsesource.json.JsonValue; |
21 | -import java.util.HashSet; | 21 | +import com.sun.jersey.api.client.ClientResponse; |
22 | - | 22 | +import com.sun.jersey.api.client.UniformInterfaceException; |
23 | -import javax.ws.rs.core.MediaType; | 23 | +import com.sun.jersey.api.client.WebResource; |
24 | - | ||
25 | import org.hamcrest.Description; | 24 | import org.hamcrest.Description; |
26 | import org.hamcrest.Matchers; | 25 | import org.hamcrest.Matchers; |
27 | import org.hamcrest.TypeSafeMatcher; | 26 | import org.hamcrest.TypeSafeMatcher; |
... | @@ -44,24 +43,16 @@ import org.onosproject.net.intent.IntentService; | ... | @@ -44,24 +43,16 @@ import org.onosproject.net.intent.IntentService; |
44 | import org.onosproject.net.intent.IntentState; | 43 | import org.onosproject.net.intent.IntentState; |
45 | import org.onosproject.net.intent.Key; | 44 | import org.onosproject.net.intent.Key; |
46 | import org.onosproject.net.intent.MockIdGenerator; | 45 | import org.onosproject.net.intent.MockIdGenerator; |
46 | +import org.onosproject.rest.resources.CoreWebApplication; | ||
47 | 47 | ||
48 | -import com.eclipsesource.json.JsonArray; | 48 | +import javax.ws.rs.core.MediaType; |
49 | -import com.eclipsesource.json.JsonObject; | 49 | +import java.io.InputStream; |
50 | -import com.eclipsesource.json.JsonValue; | 50 | +import java.net.HttpURLConnection; |
51 | -import com.sun.jersey.api.client.ClientResponse; | 51 | +import java.util.Collections; |
52 | -import com.sun.jersey.api.client.UniformInterfaceException; | 52 | +import java.util.HashSet; |
53 | -import com.sun.jersey.api.client.WebResource; | ||
54 | 53 | ||
55 | -import static org.easymock.EasyMock.anyObject; | 54 | +import static org.easymock.EasyMock.*; |
56 | -import static org.easymock.EasyMock.createMock; | 55 | +import static org.hamcrest.Matchers.*; |
57 | -import static org.easymock.EasyMock.expect; | ||
58 | -import static org.easymock.EasyMock.expectLastCall; | ||
59 | -import static org.easymock.EasyMock.replay; | ||
60 | -import static org.easymock.EasyMock.verify; | ||
61 | -import static org.hamcrest.Matchers.containsString; | ||
62 | -import static org.hamcrest.Matchers.hasSize; | ||
63 | -import static org.hamcrest.Matchers.is; | ||
64 | -import static org.hamcrest.Matchers.notNullValue; | ||
65 | import static org.junit.Assert.assertThat; | 56 | import static org.junit.Assert.assertThat; |
66 | import static org.junit.Assert.fail; | 57 | import static org.junit.Assert.fail; |
67 | import static org.onosproject.net.intent.IntentTestsMocks.MockIntent; | 58 | import static org.onosproject.net.intent.IntentTestsMocks.MockIntent; |
... | @@ -76,6 +67,10 @@ public class IntentsResourceTest extends ResourceTest { | ... | @@ -76,6 +67,10 @@ public class IntentsResourceTest extends ResourceTest { |
76 | private static final ApplicationId APP_ID = new DefaultApplicationId(1, "test"); | 67 | private static final ApplicationId APP_ID = new DefaultApplicationId(1, "test"); |
77 | private IdGenerator mockGenerator; | 68 | private IdGenerator mockGenerator; |
78 | 69 | ||
70 | + public IntentsResourceTest() { | ||
71 | + super(CoreWebApplication.class); | ||
72 | + } | ||
73 | + | ||
79 | private class MockResource implements NetworkResource { | 74 | private class MockResource implements NetworkResource { |
80 | int id; | 75 | int id; |
81 | 76 | ... | ... |
... | @@ -18,6 +18,7 @@ package org.onosproject.rest; | ... | @@ -18,6 +18,7 @@ package org.onosproject.rest; |
18 | import java.io.IOException; | 18 | import java.io.IOException; |
19 | import java.net.ServerSocket; | 19 | import java.net.ServerSocket; |
20 | 20 | ||
21 | +import com.sun.jersey.spi.container.servlet.ServletContainer; | ||
21 | import com.sun.jersey.test.framework.AppDescriptor; | 22 | import com.sun.jersey.test.framework.AppDescriptor; |
22 | import com.sun.jersey.test.framework.JerseyTest; | 23 | import com.sun.jersey.test.framework.JerseyTest; |
23 | import com.sun.jersey.test.framework.WebAppDescriptor; | 24 | import com.sun.jersey.test.framework.WebAppDescriptor; |
... | @@ -28,6 +29,23 @@ import com.sun.jersey.test.framework.WebAppDescriptor; | ... | @@ -28,6 +29,23 @@ import com.sun.jersey.test.framework.WebAppDescriptor; |
28 | public class ResourceTest extends JerseyTest { | 29 | public class ResourceTest extends JerseyTest { |
29 | 30 | ||
30 | /** | 31 | /** |
32 | + * Creates a new web-resource test. | ||
33 | + */ | ||
34 | + public ResourceTest() { | ||
35 | + super(); | ||
36 | + } | ||
37 | + | ||
38 | + /** | ||
39 | + * Creates a new web-resource test initialized according to the specified | ||
40 | + * web application class. | ||
41 | + */ | ||
42 | + protected ResourceTest(Class<?> webAppClass) { | ||
43 | + super(new WebAppDescriptor.Builder("javax.ws.rs.Application", | ||
44 | + webAppClass.getCanonicalName()) | ||
45 | + .servletClass(ServletContainer.class).build()); | ||
46 | + } | ||
47 | + | ||
48 | + /** | ||
31 | * Assigns an available port for the test. | 49 | * Assigns an available port for the test. |
32 | * | 50 | * |
33 | * @param defaultPort If a port cannot be determined, this one is used. | 51 | * @param defaultPort If a port cannot be determined, this one is used. | ... | ... |
... | @@ -189,6 +189,10 @@ public class NetworkConfigWebResourceTest extends ResourceTest { | ... | @@ -189,6 +189,10 @@ public class NetworkConfigWebResourceTest extends ResourceTest { |
189 | } | 189 | } |
190 | } | 190 | } |
191 | 191 | ||
192 | + public NetworkConfigWebResourceTest() { | ||
193 | + super(CoreWebApplication.class); | ||
194 | + } | ||
195 | + | ||
192 | /** | 196 | /** |
193 | * Sets up mocked config service. | 197 | * Sets up mocked config service. |
194 | */ | 198 | */ | ... | ... |
-
Please register or login to post a comment