You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@wookie.apache.org by sc...@apache.org on 2014/03/07 15:47:49 UTC

svn commit: r1575276 - in /wookie/trunk: wookie-connector/java/src/main/java/org/apache/wookie/connector/framework/ wookie-server/src/main/java/org/apache/wookie/controller/ wookie-server/src/test/java/org/apache/wookie/tests/functional/

Author: scottbw
Date: Fri Mar  7 14:47:49 2014
New Revision: 1575276

URL: http://svn.apache.org/r1575276
Log:
Added support in REST API for POSTing or PUTting multiple preferences and shared data in one request. See WOOKIE-414

Modified:
    wookie/trunk/wookie-connector/java/src/main/java/org/apache/wookie/connector/framework/AbstractWookieConnectorService.java
    wookie/trunk/wookie-server/src/main/java/org/apache/wookie/controller/PropertiesController.java
    wookie/trunk/wookie-server/src/test/java/org/apache/wookie/tests/functional/PropertiesControllerTest.java

Modified: wookie/trunk/wookie-connector/java/src/main/java/org/apache/wookie/connector/framework/AbstractWookieConnectorService.java
URL: http://svn.apache.org/viewvc/wookie/trunk/wookie-connector/java/src/main/java/org/apache/wookie/connector/framework/AbstractWookieConnectorService.java?rev=1575276&r1=1575275&r2=1575276&view=diff
==============================================================================
--- wookie/trunk/wookie-connector/java/src/main/java/org/apache/wookie/connector/framework/AbstractWookieConnectorService.java (original)
+++ wookie/trunk/wookie-connector/java/src/main/java/org/apache/wookie/connector/framework/AbstractWookieConnectorService.java Fri Mar  7 14:47:49 2014
@@ -23,7 +23,6 @@ import java.io.InputStream;
 import java.io.OutputStream;
 import java.net.MalformedURLException;
 import java.net.URL;
-import java.net.URLEncoder;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -95,16 +94,18 @@ public abstract class AbstractWookieConn
 		
 		SignedApiRequest request = SignedApiRequest.POST(conn.getURL()+"/properties", conn.getApiKey(), conn.getSecret());
 		createInstanceParams(request, instance.id);
+		
+		String json = "{";
 
 		if ( is_public ) {
-			request.addParameter("is_public", "true");
+			json += "\"shareddata\":[{\"name\":\""+fName+"\", \"value\":\""+fValue+"\"}]";
 		}
 		else {
-			request.addParameter("is_public", "false");
+			json += "\"preferences\":[{\"name\":\""+fName+"\", \"value\":\""+fValue+"\"}]";
 		}
-		request.addParameter("propertyname", fName);
-		request.addParameter("propertyvalue", fValue);
-
+		json += "}";
+		
+		request.setRequestEntity(json);
 		request.execute();
 
 		if (request.getStatusCode() > 201) {
@@ -132,20 +133,22 @@ public abstract class AbstractWookieConn
 	}
 
 
-	public void updatePropertyForInstance (WidgetInstance instance, boolean is_public, String propertyName, String data ) throws WookieConnectorException, IOException {
+	public void updatePropertyForInstance (WidgetInstance instance, boolean is_public, String name, String value ) throws WookieConnectorException, IOException {
 		
 		SignedApiRequest request = SignedApiRequest.PUT(conn.getURL()+"/properties", conn.getApiKey(), conn.getSecret());
 		createInstanceParams(request, instance.id);
 		
+		String json = "{";
+
 		if ( is_public ) {
-			request.addParameter("is_public", "true");
+			json += "\"shareddata\":[{\"name\":\""+name+"\", \"value\":\""+value+"\"}]";
 		}
 		else {
-			request.addParameter("is_public", "false");
+			json += "\"preferences\":[{\"name\":\""+name+"\", \"value\":\""+value+"\"}]";
 		}
+		json += "}";
 		
-		request.addParameter("propertyname", propertyName);
-		request.addParameter("propertyvalue", data);
+		request.setRequestEntity(json);
 
 		request.execute();
 
@@ -702,7 +705,7 @@ public abstract class AbstractWookieConn
 	 * @throws IOException
 	 */
 	public void deletePolicy ( Policy policy ) throws WookieConnectorException, IOException {
-		SignedApiRequest request = SignedApiRequest.DELETE(conn.getURL()+"/policies"+URLEncoder.encode(policy.toString(), "UTF-8"), conn.getApiKey(), conn.getSecret());
+		SignedApiRequest request = SignedApiRequest.DELETE(conn.getURL()+"/policies/"+policy.toString(), conn.getApiKey(), conn.getSecret());
 		request.execute();
 		if (request.getStatusCode() != 200){
 			throw new WookieConnectorException("Problem DELETEing from /policies", new IOException("Error:"+request.getStatusCode()));

Modified: wookie/trunk/wookie-server/src/main/java/org/apache/wookie/controller/PropertiesController.java
URL: http://svn.apache.org/viewvc/wookie/trunk/wookie-server/src/main/java/org/apache/wookie/controller/PropertiesController.java?rev=1575276&r1=1575275&r2=1575276&view=diff
==============================================================================
--- wookie/trunk/wookie-server/src/main/java/org/apache/wookie/controller/PropertiesController.java (original)
+++ wookie/trunk/wookie-server/src/main/java/org/apache/wookie/controller/PropertiesController.java Fri Mar  7 14:47:49 2014
@@ -21,6 +21,7 @@ import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.apache.commons.io.IOUtils;
 import org.apache.log4j.Logger;
 import org.apache.wookie.auth.AuthToken;
 import org.apache.wookie.beans.ISharedData;
@@ -31,6 +32,8 @@ import org.apache.wookie.exceptions.Reso
 import org.apache.wookie.exceptions.UnauthorizedAccessException;
 import org.apache.wookie.helpers.Notifier;
 import org.apache.wookie.services.PreferencesService;
+import org.json.JSONArray;
+import org.json.JSONObject;
 
 /**
  * REST implementation for widgetInstance
@@ -45,35 +48,29 @@ public class PropertiesController extend
 	private static final long serialVersionUID = 308590474406800659L;		
 	static Logger _logger = Logger.getLogger(PropertiesController.class.getName());	
 
-	/**
-	 * We only override doGet to allow tunneling requests through GET 
-	 * for legacy clients
+	
+	
+	/* (non-Javadoc)
+	 * @see org.apache.wookie.controller.Controller#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
 	 */
 	@Override
 	protected void doGet(HttpServletRequest request,
 			HttpServletResponse response) throws ServletException, IOException {
-		String requestId = request.getParameter("requestid");//$NON-NLS-1$
-		// If the request id is not null, show otherwise index
-		if (requestId != null && requestId.length() > 0) {
-			try {
-				createOrUpdate(request);
-			} catch (InvalidParametersException e) {
-				response.sendError(HttpServletResponse.SC_BAD_REQUEST);
-			} catch (UnauthorizedAccessException e){
-				response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
-			}
-		} else {
-			try {
-				show(null, request, response);
-				response.setStatus(HttpServletResponse.SC_OK);
-			} catch (ResourceNotFoundException e) {
-				response.sendError(HttpServletResponse.SC_NOT_FOUND);
-			} catch (UnauthorizedAccessException e){
-				response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
-			}
+		//
+		// For now we just execute the show() method. In future we could return a JSON array of all properties
+		//
+		String name = request.getParameter("propertyname"); //$NON-NLS-1$
+		try {
+			show(name, request, response);
+		} catch (ResourceNotFoundException e) {
+			response.sendError(HttpServletResponse.SC_NOT_FOUND);
+		} catch(UnauthorizedAccessException e1){
+			response.sendError(HttpServletResponse.SC_FORBIDDEN);
 		}
 	}
 
+
+
 	@Override
 	protected void show(String resourceId, HttpServletRequest request,
 			HttpServletResponse response) throws ResourceNotFoundException,
@@ -81,14 +78,13 @@ public class PropertiesController extend
 		
 		AuthToken authToken = getAuthTokenFromRequest(request);		
 		if (authToken == null) throw new ResourceNotFoundException();
-		String name = request.getParameter("propertyname"); //$NON-NLS-1$
-		if (name == null || name.trim().equals("")) throw new ResourceNotFoundException();
+		if (resourceId == null || resourceId.trim().equals("")) throw new ResourceNotFoundException();
 		String value = null;
 		// Note that preferences and shared data keys may be the same!
 		// We let the shared data values override.
 		
-		value = PreferencesService.Factory.getInstance().getPreference(authToken.getApiKey(), authToken.getWidgetId(), authToken.getContextId(), authToken.getViewerId(), name);
-		ISharedData data = new SharedContext(authToken).getSharedData(name);
+		value = PreferencesService.Factory.getInstance().getPreference(authToken.getApiKey(), authToken.getWidgetId(), authToken.getContextId(), authToken.getViewerId(), resourceId);
+		ISharedData data = new SharedContext(authToken).getSharedData(resourceId);
 		if (data != null) value = data.getDvalue();
 		if (value == null) throw new ResourceNotFoundException();
 		PrintWriter out = response.getWriter();
@@ -111,7 +107,7 @@ public class PropertiesController extend
 			found = new SharedContext(authToken).removeSharedData(name);
 			Notifier.notifyWidgets(request.getSession(), authToken, Notifier.STATE_UPDATED);
 		} else {
-			found = updatePreference(authToken, name, null);
+			found = updatePreference(authToken, name, null, false);
 		}
 		if (!found) throw new ResourceNotFoundException();
 		return true;
@@ -138,21 +134,68 @@ public class PropertiesController extend
 	 * @throws InvalidParametersException
 	 * @throws UnauthorizedAccessException
 	 */
-	public static void createOrUpdate(HttpServletRequest request)
+	private static void createOrUpdate(HttpServletRequest request)
 	throws InvalidParametersException,UnauthorizedAccessException {
-		String name = request.getParameter("propertyname"); //$NON-NLS-1$
-		String value = request.getParameter("propertyvalue"); //$NON-NLS-1$
-		
+
 		AuthToken authToken = getAuthTokenFromRequest(request);
 		if (authToken == null) throw new InvalidParametersException();
-		
-		if (name == null || name.trim().equals("")) throw new InvalidParametersException();
-		
-		if (isPublic(request)){ 
-		    new SharedContext(authToken).updateSharedData(name, value, false);
-			Notifier.notifyWidgets(request.getSession(), authToken, Notifier.STATE_UPDATED);
-		} else {
-			updatePreference(authToken, name, value);
+
+		//
+		// The data we need is in JSON in the request body, structured as:
+		//
+		// {
+		//   {"preferences" {[
+		//      {"name":"pref1", "value":"pass", "readOnly":0}
+		//   ]},
+		//   {"shareddata" {[
+		//      {"name":"sd1", "value":"pass"}
+		//   ]}
+		// }
+		//
+		//
+		
+		try {
+			String body = IOUtils.toString(request.getInputStream());
+			JSONObject json = new JSONObject(body);
+			if (json != null){
+				if (json.has("preferences")){
+					JSONArray array = json.getJSONArray("preferences");
+					if (array != null){
+						for (int i=0;i<array.length();i++){
+							JSONObject property = array.getJSONObject(i);
+							if (!property.has("name")) throw new InvalidParametersException();
+							String name = property.getString("name");
+							if (name != null && !name.trim().equals("")){
+								String value = property.getString("value");
+								boolean readOnly = property.getBoolean("readOnly");
+								updatePreference(authToken, name, value, readOnly);
+							} else {
+								throw new InvalidParametersException();
+							}
+						}
+					}
+				}
+				if (json.has("shareddata")){
+					JSONArray array = json.getJSONArray("shareddata");
+					if (array != null){
+						for (int i=0;i<array.length();i++){
+							JSONObject property = array.getJSONObject(i);
+							if (!property.has("name")) throw new InvalidParametersException();
+							String name = property.getString("name");
+							if (name != null && !name.trim().equals("")){
+								String value = property.getString("value");
+								new SharedContext(authToken).updateSharedData(name, value, false);
+								Notifier.notifyWidgets(request.getSession(), authToken, Notifier.STATE_UPDATED);
+							} else {
+								throw new InvalidParametersException();
+							}
+						}
+					}
+				}
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+			throw new InvalidParametersException();
 		}
 	}
 
@@ -162,11 +205,11 @@ public class PropertiesController extend
 	 * @param name
 	 * @param value
 	 */
-	public static boolean updatePreference(AuthToken authToken, String name, String value){
+	private static boolean updatePreference(AuthToken authToken, String name, String value, boolean readOnly){
         boolean found=false;
         String preference = PreferencesService.Factory.getInstance().getPreference(authToken.getApiKey(), authToken.getWidgetId(), authToken.getContextId(), authToken.getViewerId(), name);        
         if (preference != null) found=true;
-   	    PreferencesService.Factory.getInstance().setPreference(authToken.getApiKey(), authToken.getWidgetId(), authToken.getContextId(), authToken.getViewerId(), name, value);
+   	    PreferencesService.Factory.getInstance().setPreference(authToken.getApiKey(), authToken.getWidgetId(), authToken.getContextId(), authToken.getViewerId(), name, value, readOnly);
         return found;
 	}
 

Modified: wookie/trunk/wookie-server/src/test/java/org/apache/wookie/tests/functional/PropertiesControllerTest.java
URL: http://svn.apache.org/viewvc/wookie/trunk/wookie-server/src/test/java/org/apache/wookie/tests/functional/PropertiesControllerTest.java?rev=1575276&r1=1575275&r2=1575276&view=diff
==============================================================================
--- wookie/trunk/wookie-server/src/test/java/org/apache/wookie/tests/functional/PropertiesControllerTest.java (original)
+++ wookie/trunk/wookie-server/src/test/java/org/apache/wookie/tests/functional/PropertiesControllerTest.java Fri Mar  7 14:47:49 2014
@@ -18,7 +18,11 @@ import static org.junit.Assert.assertEqu
 import java.io.IOException;
 
 import org.apache.commons.httpclient.HttpException;
+import org.apache.commons.httpclient.methods.StringRequestEntity;
 import org.apache.wookie.tests.helpers.Request;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -51,12 +55,12 @@ public class PropertiesControllerTest ex
 	}
 
 	/**
-	 * Test that we can set preferences using post parameters
+	 * Test that we can set preferences using POST
 	 * 
 	 * @throws Exception
 	 */
 	@Test
-	public void setPreferenceUsingPostParameters() throws Exception {
+	public void setPreferenceUsingPost() throws Exception {
 		//
 		// Set a property ("testpost=pass") using POST
 		//
@@ -64,10 +68,18 @@ public class PropertiesControllerTest ex
 		post.addParameter("api_key", API_KEY_VALID);
 		post.addParameter("widgetid", WIDGET_ID_VALID);
 		post.addParameter("userid", "test");
-		post.addParameter("is_public", "false");
 		post.addParameter("shareddatakey", "propstest");
-		post.addParameter("propertyname", "testpost");
-		post.addParameter("propertyvalue", "pass");
+
+		JSONObject pref = new JSONObject();
+		pref.put("name", "testpost");
+		pref.put("value", "pass");
+		pref.put("readOnly", false);
+		JSONObject json = new JSONObject();
+		JSONArray prefs = new JSONArray();
+		prefs.put(pref);
+		json.put("preferences", prefs);		
+		StringRequestEntity entity = new StringRequestEntity(json.toString(), "application/json", "UTF-8");
+		post.setRequestEntity(entity);
 		post.execute(true, false);
 		int code = post.getStatusCode();
 		assertEquals(201, code);
@@ -88,14 +100,82 @@ public class PropertiesControllerTest ex
 		assertEquals("pass", resp);
 	}
 
+
+	/**
+	 * Test that we can set multiple preferences at the same time by POSTing JSON
+	 * 
+	 * @throws Exception
+	 */
+	@Test
+	public void setMultiplePreferencesUsingPost() throws Exception {
+		//
+		// Set a property ("testpost=pass") using POST
+		//
+		Request post = new Request("POST", TEST_PROPERTIES_SERVICE_URL_VALID);
+		post.addParameter("api_key", API_KEY_VALID);
+		post.addParameter("widgetid", WIDGET_ID_VALID);
+		post.addParameter("userid", "test");
+		post.addParameter("shareddatakey", "propstest");
+
+		JSONObject pref1 = new JSONObject();
+		pref1.put("name", "testpost1");
+		pref1.put("value", "pass1");
+		pref1.put("readOnly", false);
+		
+		JSONObject pref2 = new JSONObject();
+		pref2.put("name", "testpost2");
+		pref2.put("value", "pass2");
+		pref2.put("readOnly", false);
+		
+		JSONObject json = new JSONObject();
+		JSONArray prefs = new JSONArray();
+		prefs.put(pref1);
+		prefs.put(pref2);
+		json.put("preferences", prefs);		
+		StringRequestEntity entity = new StringRequestEntity(json.toString(), "application/json", "UTF-8");
+		post.setRequestEntity(entity);
+		post.execute(true, false);
+		int code = post.getStatusCode();
+		assertEquals(201, code);
+
+		//
+		// Read back each property using GET
+		//
+		Request get = new Request("GET", TEST_PROPERTIES_SERVICE_URL_VALID);
+		get.addParameter("api_key", API_KEY_VALID);
+		get.addParameter("widgetid", WIDGET_ID_VALID);
+		get.addParameter("userid", "test");
+		get.addParameter("shareddatakey", "propstest");
+		get.addParameter("propertyname", "testpost1");
+		get.execute(true, false);
+		code = get.getStatusCode();
+		assertEquals(200, code);
+		String resp = get.getResponseBodyAsString();
+		assertEquals("pass1", resp);
+		
+		get = new Request("GET", TEST_PROPERTIES_SERVICE_URL_VALID);
+		get.addParameter("api_key", API_KEY_VALID);
+		get.addParameter("widgetid", WIDGET_ID_VALID);
+		get.addParameter("userid", "test");
+		get.addParameter("shareddatakey", "propstest");
+		get.addParameter("propertyname", "testpost2");
+		get.execute(true, false);
+		code = get.getStatusCode();
+		assertEquals(200, code);
+		resp = get.getResponseBodyAsString();
+		assertEquals("pass2", resp);
+	}
+
+	
 	/**
 	 * Test we can set shared data values using querystring parameters
 	 * 
 	 * @throws IOException
 	 * @throws HttpException
+	 * @throws JSONException 
 	 */
 	@Test
-	public void setSharedData() throws HttpException, IOException {
+	public void setSharedData() throws HttpException, IOException, JSONException {
 
 		//
 		// Set some shared data with POST
@@ -104,10 +184,17 @@ public class PropertiesControllerTest ex
 		post.addParameter("api_key", API_KEY_VALID);
 		post.addParameter("widgetid", WIDGET_ID_VALID);
 		post.addParameter("userid", "test");
-		post.addParameter("is_public", "false");
 		post.addParameter("shareddatakey", "propstest");
-		post.addParameter("propertyname", "cat");
-		post.addParameter("propertyvalue", "garfield");
+
+		JSONObject data = new JSONObject();
+		data.put("name", "cat");
+		data.put("value", "garfield");
+		JSONObject json = new JSONObject();
+		JSONArray set = new JSONArray();
+		set.put(data);
+		json.put("shareddata", set);		
+		StringRequestEntity entity = new StringRequestEntity(json.toString(), "application/json", "UTF-8");
+		post.setRequestEntity(entity);
 		post.execute(true, false);
 		int code = post.getStatusCode();
 		assertEquals(201, code);
@@ -134,9 +221,10 @@ public class PropertiesControllerTest ex
 	 * 
 	 * @throws IOException
 	 * @throws HttpException
+	 * @throws JSONException 
 	 */
 	@Test
-	public void updateProperty() throws HttpException, IOException {
+	public void updateProperty() throws HttpException, IOException, JSONException {
 
 		//
 		// Set cat=felix using POST
@@ -145,10 +233,18 @@ public class PropertiesControllerTest ex
 		put.addParameter("api_key", API_KEY_VALID);
 		put.addParameter("widgetid", WIDGET_ID_VALID);
 		put.addParameter("userid", "test");
-		put.addParameter("is_public", "false");
 		put.addParameter("shareddatakey", "propstest");
-		put.addParameter("propertyname", "cat");
-		put.addParameter("propertyvalue", "felix");
+		
+		JSONObject data = new JSONObject();
+		data.put("name", "cat");
+		data.put("value", "felix");
+		JSONObject json = new JSONObject();
+		JSONArray set = new JSONArray();
+		set.put(data);
+		json.put("shareddata", set);		
+		StringRequestEntity entity = new StringRequestEntity(json.toString(), "application/json", "UTF-8");
+		put.setRequestEntity(entity);
+		
 		put.execute(true, false);
 		int code = put.getStatusCode();
 		assertEquals(200, code);
@@ -186,6 +282,7 @@ public class PropertiesControllerTest ex
 		delete.addParameter("api_key", API_KEY_VALID);
 		delete.addParameter("widgetid", WIDGET_ID_VALID);
 		delete.addParameter("userid", "test");
+		delete.addParameter("is_public", "true");
 		delete.addParameter("shareddatakey", "propstest");
 		delete.addParameter("propertyname", "cat");
 		delete.execute(true, false);
@@ -217,16 +314,25 @@ public class PropertiesControllerTest ex
 	 * 
 	 * @throws IOException
 	 * @throws HttpException
+	 * @throws JSONException 
 	 */
 	@Test
-	public void setPropertyNoName() throws HttpException, IOException {
+	public void setPropertyNoName() throws HttpException, IOException, JSONException {
 		Request post = new Request("POST", TEST_PROPERTIES_SERVICE_URL_VALID);
 		post.addParameter("api_key", API_KEY_VALID);
 		post.addParameter("widgetid", WIDGET_ID_VALID);
 		post.addParameter("userid", "test");
-		post.addParameter("is_public", "false");
 		post.addParameter("shareddatakey", "propstest");
-		post.addParameter("propertyvalue", "garfield");
+		
+		JSONObject data = new JSONObject();
+		data.put("value", "garfield");
+		JSONObject json = new JSONObject();
+		JSONArray set = new JSONArray();
+		set.put(data);
+		json.put("shareddata", set);		
+		StringRequestEntity entity = new StringRequestEntity(json.toString(), "application/json", "UTF-8");
+		post.setRequestEntity(entity);
+		
 		post.execute(true, false);
 		int code = post.getStatusCode();
 		assertEquals(400, code);
@@ -238,17 +344,26 @@ public class PropertiesControllerTest ex
 	 * 
 	 * @throws IOException
 	 * @throws HttpException
+	 * @throws JSONException 
 	 */
 	@Test
-	public void setPropertyEmptyName() throws HttpException, IOException {
+	public void setPropertyEmptyName() throws HttpException, IOException, JSONException {
 		Request post = new Request("POST", TEST_PROPERTIES_SERVICE_URL_VALID);
 		post.addParameter("api_key", API_KEY_VALID);
 		post.addParameter("widgetid", WIDGET_ID_VALID);
 		post.addParameter("userid", "test");
-		post.addParameter("is_public", "false");
 		post.addParameter("shareddatakey", "propstest");
-		post.addParameter("propertyname", "");
-		post.addParameter("propertyvalue", "garfield");
+		
+		JSONObject data = new JSONObject();
+		data.put("name", "");
+		data.put("value", "garfield");
+		JSONObject json = new JSONObject();
+		JSONArray set = new JSONArray();
+		set.put(data);
+		json.put("shareddata", set);		
+		StringRequestEntity entity = new StringRequestEntity(json.toString(), "application/json", "UTF-8");
+		post.setRequestEntity(entity);
+		
 		post.execute(true, false);
 		int code = post.getStatusCode();
 		assertEquals(400, code);
@@ -259,17 +374,26 @@ public class PropertiesControllerTest ex
 	 * 
 	 * @throws IOException
 	 * @throws HttpException
+	 * @throws JSONException 
 	 */
 	@Test
-	public void setPropertyWhitespaceName() throws HttpException, IOException {
+	public void setPropertyWhitespaceName() throws HttpException, IOException, JSONException {
 		Request post = new Request("POST", TEST_PROPERTIES_SERVICE_URL_VALID);
 		post.addParameter("api_key", API_KEY_VALID);
 		post.addParameter("widgetid", WIDGET_ID_VALID);
 		post.addParameter("userid", "test");
-		post.addParameter("is_public", "false");
 		post.addParameter("shareddatakey", "propstest");
-		post.addParameter("propertyname", "  ");
-		post.addParameter("propertyvalue", "garfield");
+		
+		JSONObject data = new JSONObject();
+		data.put("name", " ");
+		data.put("value", "garfield");
+		JSONObject json = new JSONObject();
+		JSONArray set = new JSONArray();
+		set.put(data);
+		json.put("shareddata", set);		
+		StringRequestEntity entity = new StringRequestEntity(json.toString(), "application/json", "UTF-8");
+		post.setRequestEntity(entity);
+		
 		post.execute(true, false);
 		int code = post.getStatusCode();
 		assertEquals(400, code);