diff --git a/src/main/java/com/softlayer/api/Maskable.java b/src/main/java/com/softlayer/api/Maskable.java index 9edaf2e..81c1c7a 100644 --- a/src/main/java/com/softlayer/api/Maskable.java +++ b/src/main/java/com/softlayer/api/Maskable.java @@ -14,4 +14,7 @@ public interface Maskable { /** Set the mask to a string, formatted according to http://sldn.softlayer.com/article/Object-Masks */ public void setMask(String mask); + + /** Removes the mask from the service */ + public void clearMask(); } diff --git a/src/main/java/com/softlayer/api/RestApiClient.java b/src/main/java/com/softlayer/api/RestApiClient.java index 2ad35cd..c945442 100644 --- a/src/main/java/com/softlayer/api/RestApiClient.java +++ b/src/main/java/com/softlayer/api/RestApiClient.java @@ -445,6 +445,13 @@ public Object invoke(Object proxy, Method method, Object[] args) throws Throwabl mask = (Mask) args[0]; maskString = null; return null; + } else if ("setMask".equals(method.getName()) && args != null + && args.length == 1 && args[0] == null) { + throw new IllegalArgumentException("Cannot set null mask. Use clearMask to clear"); + } else if ("clearMask".equals(method.getName())) { + mask = null; + maskString = null; + return null; } else if ("setResultLimit".equals(method.getName()) && method.getDeclaringClass() == ResultLimitable.class) { resultLimit = (ResultLimit) args[0]; diff --git a/src/test/java/com/softlayer/api/RestApiClientTest.java b/src/test/java/com/softlayer/api/RestApiClientTest.java index 9d3f076..a141cb7 100644 --- a/src/test/java/com/softlayer/api/RestApiClientTest.java +++ b/src/test/java/com/softlayer/api/RestApiClientTest.java @@ -429,7 +429,24 @@ public void onSuccess(String value) { assertTrue(http.invokeAsyncCallbackCalled); assertTrue(successCalled.get()); } + + @Test(expected = IllegalArgumentException.class) + public void testMaskMustNotBeNull() { + RestApiClient client = new RestApiClient("http://example.com/"); + TestEntity.Service service = TestEntity.service(client); + service.setMask((Mask) null); + } + @Test + public void testMaskRemoval() { + RestApiClient client = new RestApiClient("http://example.com/"); + TestEntity.Service service = TestEntity.service(client); + service.withMask().baz(); + assertEquals("baz", service.withMask().toString()); + service.clearMask(); + assertEquals("", service.withMask().toString()); + } + @Test public void testNormalObjectMethodsOnService() { RestApiClient client = new RestApiClient("http://example.com/"); @@ -439,6 +456,5 @@ public void testNormalObjectMethodsOnService() { assertTrue(Proxy.isProxyClass(service.getClass())); assertEquals(service.hashCode(), service.hashCode()); assertTrue(service.equals(service)); - } }