package org.jboss.resteasy.test.resource.basic.resource; import org.junit.Assert; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.QueryParam; import javax.ws.rs.core.Context; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.UriInfo; import java.util.Collections; import java.util.List; import java.util.Map; @Path("/queryParams") public class UriInfoQueryParamsResource { @GET public String doGet(@QueryParam("a") String a, @Context UriInfo info) { Assert.assertNotNull(info); Assert.assertNotNull(info.getQueryParameters()); assertNotMutable(info.getQueryParameters()); return "content"; } private static void assertNotMutable(MultivaluedMap<String, String> params) { final String param = "param"; final String key = params.keySet().iterator().next(); try { params.put(param, Collections.singletonList(param)); Assert.fail("mutable UriInfo"); } catch (UnsupportedOperationException uoe) { //OK } try { params.add(param, param); Assert.fail("mutable UriInfo"); } catch (UnsupportedOperationException uoe) { //OK } try { params.addAll(param, Collections.singletonList(param)); Assert.fail("mutable UriInfo"); } catch (UnsupportedOperationException uoe) { //OK } try { params.addAll(param, param); Assert.fail("mutable UriInfo"); } catch (UnsupportedOperationException uoe) { //OK } try { params.addFirst(param, param); Assert.fail("mutable UriInfo"); } catch (UnsupportedOperationException uoe) { //OK } try { params.putSingle(param, param); Assert.fail("mutable UriInfo"); } catch (UnsupportedOperationException uoe) { //OK } try { params.entrySet().add(new Map.Entry<String, List<String>>() { @Override public String getKey() { return param; } @Override public List<String> getValue() { return Collections.singletonList(param); } @Override public List<String> setValue(List<String> value) { return Collections.singletonList(param); } }); Assert.fail("mutable UriInfo"); } catch (UnsupportedOperationException uoe) { //OK } try { params.keySet().add(param); Assert.fail("mutable UriInfo"); } catch (UnsupportedOperationException uoe) { //OK } try { params.clear(); Assert.fail("mutable UriInfo"); } catch (UnsupportedOperationException uoe) { //OK } try { params.putAll(params); Assert.fail("mutable UriInfo"); } catch (UnsupportedOperationException uoe) { //OK } try { params.remove(key); Assert.fail("mutable UriInfo"); } catch (UnsupportedOperationException uoe) { //OK } try { params.remove(null); Assert.fail("mutable UriInfo"); } catch (UnsupportedOperationException uoe) { //OK } try { params.values().add(Collections.singletonList(param)); Assert.fail("mutable UriInfo"); } catch (UnsupportedOperationException uoe) { //OK } } }