You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lens.apache.org by am...@apache.org on 2016/02/02 14:21:19 UTC

[1/7] lens git commit: LENS-920 : Fix issues in producing and consuming json for all api

Repository: lens
Updated Branches:
  refs/heads/master a5091fe0c -> d559ef2e5


http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-server/src/test/java/org/apache/lens/server/session/TestSessionResource.java
----------------------------------------------------------------------
diff --git a/lens-server/src/test/java/org/apache/lens/server/session/TestSessionResource.java b/lens-server/src/test/java/org/apache/lens/server/session/TestSessionResource.java
index 3055ce5..bde7b9b 100644
--- a/lens-server/src/test/java/org/apache/lens/server/session/TestSessionResource.java
+++ b/lens-server/src/test/java/org/apache/lens/server/session/TestSessionResource.java
@@ -53,11 +53,10 @@ import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.metastore.api.Database;
 import org.apache.hadoop.hive.ql.metadata.Hive;
 
-import org.glassfish.jersey.client.ClientConfig;
 import org.glassfish.jersey.media.multipart.FormDataBodyPart;
 import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
 import org.glassfish.jersey.media.multipart.FormDataMultiPart;
-import org.glassfish.jersey.media.multipart.MultiPartFeature;
+import org.glassfish.jersey.test.TestProperties;
 import org.testng.Assert;
 import org.testng.annotations.AfterTest;
 import org.testng.annotations.BeforeTest;
@@ -101,39 +100,31 @@ public class TestSessionResource extends LensJerseyTest {
    */
   @Override
   protected Application configure() {
+    enable(TestProperties.LOG_TRAFFIC);
+    enable(TestProperties.DUMP_ENTITY);
     return new SessionApp();
   }
 
-  /*
-   * (non-Javadoc)
-   *
-   * @see org.glassfish.jersey.test.JerseyTest#configureClient(org.glassfish.jersey.client.ClientConfig)
-   */
-  @Override
-  protected void configureClient(ClientConfig config) {
-    config.register(MultiPartFeature.class);
-  }
-
   /**
    * Test session.
    */
-  @Test
-  public void testSession() {
+  @Test(dataProvider = "mediaTypeData")
+  public void testSession(MediaType mt) {
     final WebTarget target = target().path("session");
     final FormDataMultiPart mp = new FormDataMultiPart();
 
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("username").build(), "foo"));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("password").build(), "bar"));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionconf").fileName("sessionconf").build(),
-      new LensConf(), MediaType.APPLICATION_XML_TYPE));
+      new LensConf(), mt));
 
-    final LensSessionHandle handle = target.request().post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE),
+    final LensSessionHandle handle = target.request(mt).post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE),
       LensSessionHandle.class);
     Assert.assertNotNull(handle);
 
     // get all session params
     final WebTarget paramtarget = target().path("session/params");
-    StringList sessionParams = paramtarget.queryParam("sessionid", handle).request().get(StringList.class);
+    StringList sessionParams = paramtarget.queryParam("sessionid", handle).request(mt).get(StringList.class);
     System.out.println("Session params:" + sessionParams.getElements());
     Assert.assertTrue(sessionParams.getElements().size() > 1);
     Assert.assertTrue(sessionParams.getElements().contains("lens.session.cluster.user=testlensuser"));
@@ -142,14 +133,14 @@ public class TestSessionResource extends LensJerseyTest {
     // set hive variable
     FormDataMultiPart setpart = new FormDataMultiPart();
     setpart.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), handle,
-      MediaType.APPLICATION_XML_TYPE));
+      mt));
     setpart.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("key").build(), "hivevar:myvar"));
     setpart.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("value").build(), "10"));
-    APIResult result = paramtarget.request().put(Entity.entity(setpart, MediaType.MULTIPART_FORM_DATA_TYPE),
+    APIResult result = paramtarget.request(mt).put(Entity.entity(setpart, MediaType.MULTIPART_FORM_DATA_TYPE),
       APIResult.class);
     Assert.assertEquals(result.getStatus(), APIResult.Status.SUCCEEDED);
     // get myvar session params
-    sessionParams = paramtarget.queryParam("sessionid", handle).queryParam("key", "hivevar:myvar").request()
+    sessionParams = paramtarget.queryParam("sessionid", handle).queryParam("key", "hivevar:myvar").request(mt)
       .get(StringList.class);
     System.out.println("Session params:" + sessionParams.getElements());
     Assert.assertEquals(sessionParams.getElements().size(), 1);
@@ -158,39 +149,39 @@ public class TestSessionResource extends LensJerseyTest {
     // set hive conf
     setpart = new FormDataMultiPart();
     setpart.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), handle,
-      MediaType.APPLICATION_XML_TYPE));
+      mt));
     setpart.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("key").build(), "hiveconf:my.conf"));
     setpart.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("value").build(), "myvalue"));
-    result = paramtarget.request().put(Entity.entity(setpart, MediaType.MULTIPART_FORM_DATA_TYPE), APIResult.class);
+    result = paramtarget.request(mt).put(Entity.entity(setpart, MediaType.MULTIPART_FORM_DATA_TYPE), APIResult.class);
     Assert.assertEquals(result.getStatus(), APIResult.Status.SUCCEEDED);
     // get the my.conf session param
-    sessionParams = paramtarget.queryParam("sessionid", handle).queryParam("key", "my.conf").request()
+    sessionParams = paramtarget.queryParam("sessionid", handle).queryParam("key", "my.conf").request(mt)
       .get(StringList.class);
     System.out.println("Session params:" + sessionParams.getElements());
     Assert.assertEquals(sessionParams.getElements().size(), 1);
     Assert.assertTrue(sessionParams.getElements().contains("my.conf=myvalue"));
     // get server params on session
     try {
-      paramtarget.queryParam("sessionid", handle).queryParam("key", "lens.server.persist.location").request()
+      paramtarget.queryParam("sessionid", handle).queryParam("key", "lens.server.persist.location").request(mt)
         .get(StringList.class);
       Assert.fail("Expected 404");
     } catch (Exception ne) {
       Assert.assertTrue(ne instanceof NotFoundException);
     }
     // get all params verbose
-    sessionParams = paramtarget.queryParam("sessionid", handle).queryParam("verbose", true).request()
+    sessionParams = paramtarget.queryParam("sessionid", handle).queryParam("verbose", true).request(mt)
       .get(StringList.class);
     System.out.println("Session params:" + sessionParams.getElements());
     Assert.assertTrue(sessionParams.getElements().size() > 1);
 
     // Create another session
-    final LensSessionHandle handle2 = target.request().post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE),
+    final LensSessionHandle handle2 = target.request(mt).post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE),
       LensSessionHandle.class);
     Assert.assertNotNull(handle);
 
     // get myvar session params on handle2
     try {
-      paramtarget.queryParam("sessionid", handle2).queryParam("key", "hivevar:myvar").request()
+      paramtarget.queryParam("sessionid", handle2).queryParam("key", "hivevar:myvar").request(mt)
         .get(StringList.class);
       Assert.fail("Expected 404");
     } catch (Exception ne) {
@@ -198,7 +189,7 @@ public class TestSessionResource extends LensJerseyTest {
     }
     // get the my.conf session param on handle2
     try {
-      sessionParams = paramtarget.queryParam("sessionid", handle2).queryParam("key", "my.conf").request()
+      sessionParams = paramtarget.queryParam("sessionid", handle2).queryParam("key", "my.conf").request(mt)
         .get(StringList.class);
       System.out.println("sessionParams:" + sessionParams.getElements());
       Assert.fail("Expected 404");
@@ -207,36 +198,36 @@ public class TestSessionResource extends LensJerseyTest {
     }
 
     // close session
-    result = target.queryParam("sessionid", handle).request().delete(APIResult.class);
+    result = target.queryParam("sessionid", handle).request(mt).delete(APIResult.class);
     Assert.assertEquals(result.getStatus(), APIResult.Status.SUCCEEDED);
 
     // now getting session params should return session is expired
     try {
-      sessionParams = paramtarget.queryParam("sessionid", handle).queryParam("key", "hivevar:myvar").request()
+      sessionParams = paramtarget.queryParam("sessionid", handle).queryParam("key", "hivevar:myvar").request(mt)
             .get(StringList.class);
       Assert.fail("Expected 410");
     } catch(ClientErrorException ce) {
       Assert.assertEquals(ce.getResponse().getStatus(), 410);
     }
 
-    result = target.queryParam("sessionid", handle2).request().delete(APIResult.class);
+    result = target.queryParam("sessionid", handle2).request(mt).delete(APIResult.class);
     Assert.assertEquals(result.getStatus(), APIResult.Status.SUCCEEDED);
   }
 
   /**
    * Test resource.
    */
-  @Test
-  public void testResource() {
+  @Test(dataProvider = "mediaTypeData")
+  public void testResource(MediaType mt) {
     final WebTarget target = target().path("session");
     final FormDataMultiPart mp = new FormDataMultiPart();
 
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("username").build(), "foo"));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("password").build(), "bar"));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionconf").fileName("sessionconf").build(),
-      new LensConf(), MediaType.APPLICATION_XML_TYPE));
+      new LensConf(), mt));
 
-    final LensSessionHandle handle = target.request().post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE),
+    final LensSessionHandle handle = target.request(mt).post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE),
       LensSessionHandle.class);
     Assert.assertNotNull(handle);
 
@@ -245,37 +236,38 @@ public class TestSessionResource extends LensJerseyTest {
     final WebTarget resourcetarget = target().path("session/resources");
     final FormDataMultiPart mp1 = new FormDataMultiPart();
     mp1.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), handle,
-      MediaType.APPLICATION_XML_TYPE));
+      mt));
     mp1.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("type").build(), "file"));
     mp1.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("path").build(),
         lensSiteFilePath));
-    APIResult result = resourcetarget.path("add").request()
+    APIResult result = resourcetarget.path("add").request(mt)
       .put(Entity.entity(mp1, MediaType.MULTIPART_FORM_DATA_TYPE), APIResult.class);
     Assert.assertEquals(result.getStatus(), Status.SUCCEEDED);
 
     // list all resources
-    StringList listResources = resourcetarget.path("list").queryParam("sessionid", handle).request()
+    StringList listResources = resourcetarget.path("list").queryParam("sessionid", handle).request(mt)
       .get(StringList.class);
     Assert.assertEquals(listResources.getElements().size(), 1);
 
     // delete the resource
     final FormDataMultiPart mp2 = new FormDataMultiPart();
     mp2.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), handle,
-      MediaType.APPLICATION_XML_TYPE));
+      mt));
     mp2.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("type").build(), "file"));
     mp2.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("path").build(),
         lensSiteFilePath));
-    result = resourcetarget.path("delete").request()
+    result = resourcetarget.path("delete").request(mt)
       .put(Entity.entity(mp2, MediaType.MULTIPART_FORM_DATA_TYPE), APIResult.class);
     Assert.assertEquals(result.getStatus(), APIResult.Status.SUCCEEDED);
 
     // list all resources
     StringList listResourcesAfterDeletion = resourcetarget.path("list").queryParam("sessionid", handle)
-      .request().get(StringList.class);
-    Assert.assertNull(listResourcesAfterDeletion.getElements());
+      .request(mt).get(StringList.class);
+    Assert.assertTrue(listResourcesAfterDeletion.getElements() == null
+      || listResourcesAfterDeletion.getElements().isEmpty());
 
     // close session
-    result = target.queryParam("sessionid", handle).request().delete(APIResult.class);
+    result = target.queryParam("sessionid", handle).request(mt).delete(APIResult.class);
     Assert.assertEquals(result.getStatus(), APIResult.Status.SUCCEEDED);
   }
 
@@ -284,8 +276,8 @@ public class TestSessionResource extends LensJerseyTest {
    *
    * @throws org.apache.lens.server.api.error.LensException the lens exception
    */
-  @Test
-  public void testAuxJars() throws LensException, IOException, LenServerTestException {
+  @Test(dataProvider = "mediaTypeData")
+  public void testAuxJars(MediaType mt) throws LensException, IOException, LenServerTestException {
     final WebTarget target = target().path("session");
     final FormDataMultiPart mp = new FormDataMultiPart();
     final LensConf sessionconf = new LensConf();
@@ -299,11 +291,9 @@ public class TestSessionResource extends LensJerseyTest {
       mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("username").build(), "foo"));
       mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("password").build(), "bar"));
       mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionconf").fileName("sessionconf").build(),
-        sessionconf, MediaType.APPLICATION_XML_TYPE));
-      mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionconf").fileName("sessionconf").build(),
-        new LensConf(), MediaType.APPLICATION_XML_TYPE));
+        sessionconf, mt));
 
-      final LensSessionHandle handle = target.request()
+      final LensSessionHandle handle = target.request(mt)
         .post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE), LensSessionHandle.class);
       Assert.assertNotNull(handle);
 
@@ -320,13 +310,13 @@ public class TestSessionResource extends LensJerseyTest {
 
       final WebTarget resourcetarget = target().path("session/resources");
       // list all resources
-      StringList listResources = resourcetarget.path("list").queryParam("sessionid", handle).request()
+      StringList listResources = resourcetarget.path("list").queryParam("sessionid", handle).request(mt)
         .get(StringList.class);
       Assert.assertEquals(listResources.getElements().size(), 1);
       Assert.assertTrue(listResources.getElements().get(0).contains(jarFileName));
 
       // close session
-      APIResult result = target.queryParam("sessionid", handle).request().delete(APIResult.class);
+      APIResult result = target.queryParam("sessionid", handle).request(mt).delete(APIResult.class);
       Assert.assertEquals(result.getStatus(), APIResult.Status.SUCCEEDED);
     } finally {
       LensServerTestFileUtils.deleteFile(jarFile);
@@ -336,22 +326,23 @@ public class TestSessionResource extends LensJerseyTest {
   /**
    * Test wrong auth.
    */
-  @Test
-  public void testWrongAuth() {
+  @Test(dataProvider = "mediaTypeData")
+  public void testWrongAuth(MediaType mt) {
     final WebTarget target = target().path("session");
     final FormDataMultiPart mp = new FormDataMultiPart();
 
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("username").build(), "a"));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("password").build(), "b"));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionconf").fileName("sessionconf").build(),
-      new LensConf(), MediaType.APPLICATION_XML_TYPE));
+      new LensConf(), mt));
 
-    final Response handle = target.request().post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE));
+    final Response handle = target.request(mt).post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE));
     Assert.assertEquals(handle.getStatus(), 401);
   }
 
-  @Test
-  public void testServerMustRestartOnManualDeletionOfAddedResources() throws IOException, LenServerTestException {
+  @Test(dataProvider = "mediaTypeData")
+  public void testServerMustRestartOnManualDeletionOfAddedResources(MediaType mt)
+    throws IOException, LenServerTestException {
 
     /* Begin: Setup */
 
@@ -360,8 +351,8 @@ public class TestSessionResource extends LensJerseyTest {
     FileUtils.touch(jarFile);
 
     /* Add the created resource jar to lens server */
-    LensSessionHandle sessionHandle = openSession("foo", "bar", new LensConf());
-    addResource(sessionHandle, "jar", jarFile.getPath());
+    LensSessionHandle sessionHandle = openSession("foo", "bar", new LensConf(), mt);
+    addResource(sessionHandle, "jar", jarFile.getPath(), mt);
 
     /* Delete resource jar from current working directory */
     LensServerTestFileUtils.deleteFile(jarFile);
@@ -372,7 +363,7 @@ public class TestSessionResource extends LensJerseyTest {
     restartLensServer();
   }
 
-  private LensSessionHandle openSession(final String userName, final String passwd, final LensConf conf) {
+  private LensSessionHandle openSession(final String userName, final String passwd, final LensConf conf, MediaType mt) {
 
     final WebTarget target = target().path("session");
     final FormDataMultiPart mp = new FormDataMultiPart();
@@ -380,23 +371,23 @@ public class TestSessionResource extends LensJerseyTest {
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("username").build(), userName));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("password").build(), passwd));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionconf").fileName("sessionconf").build(),
-      conf, MediaType.APPLICATION_XML_TYPE));
+      conf, mt));
 
-    return target.request().post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE),
+    return target.request(mt).post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE),
       LensSessionHandle.class);
 
   }
 
   private void addResource(final LensSessionHandle lensSessionHandle, final String resourceType,
-    final String resourcePath) {
+    final String resourcePath, MediaType mt) {
     final WebTarget target = target().path("session/resources");
     final FormDataMultiPart mp = new FormDataMultiPart();
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionHandle,
-      MediaType.APPLICATION_XML_TYPE));
+      mt));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("type").build(), resourceType));
     mp.bodyPart(
       new FormDataBodyPart(FormDataContentDisposition.name("path").build(), resourcePath));
-    APIResult result = target.path("add").request()
+    APIResult result = target.path("add").request(mt)
       .put(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE), APIResult.class);
 
     if (!result.getStatus().equals(Status.SUCCEEDED)) {
@@ -404,8 +395,8 @@ public class TestSessionResource extends LensJerseyTest {
     }
   }
 
-  @Test
-  public void testOpenSessionWithDatabase() throws Exception {
+  @Test(dataProvider = "mediaTypeData")
+  public void testOpenSessionWithDatabase(MediaType mt) throws Exception {
     // TEST1 - Check if call with database parameter sets current database
     // Create the test DB
     Hive hive = Hive.get(new HiveConf());
@@ -421,9 +412,9 @@ public class TestSessionResource extends LensJerseyTest {
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("password").build(), "bar"));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("database").build(), testDbName));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionconf").fileName("sessionconf").build(),
-      new LensConf(), MediaType.APPLICATION_XML_TYPE));
+      new LensConf(), mt));
 
-    final LensSessionHandle handle = target.request().post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE),
+    final LensSessionHandle handle = target.request(mt).post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE),
       LensSessionHandle.class);
     Assert.assertNotNull(handle);
 
@@ -441,11 +432,11 @@ public class TestSessionResource extends LensJerseyTest {
     form2.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("password").build(), "bar"));
     form2.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("database").build(), invalidDB));
     form2.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionconf").fileName("sessionconf").build(),
-      new LensConf(), MediaType.APPLICATION_XML_TYPE));
+      new LensConf(), mt));
 
     try {
-      final LensSessionHandle handle2 = target.request().post(Entity.entity(form2, MediaType.MULTIPART_FORM_DATA_TYPE),
-        LensSessionHandle.class);
+      final LensSessionHandle handle2 = target.request(mt).post(Entity.entity(form2,
+          MediaType.MULTIPART_FORM_DATA_TYPE), LensSessionHandle.class);
       Assert.fail("Expected above call to fail with not found exception");
     } catch (NotFoundException nfe) {
       // PASS
@@ -455,8 +446,8 @@ public class TestSessionResource extends LensJerseyTest {
   /**
    * Test acquire and release behaviour for closed sessions
    */
-  @Test
-  public void testAcquireReleaseClosedSession() throws Exception {
+  @Test(dataProvider = "mediaTypeData")
+  public void testAcquireReleaseClosedSession(MediaType mt) throws Exception {
     HiveSessionService sessionService = LensServices.get().getService(SessionService.NAME);
 
     LensSessionHandle sessionHandle = sessionService.openSession("foo@localhost", "bar", new HashMap<String, String>());
@@ -485,39 +476,39 @@ public class TestSessionResource extends LensJerseyTest {
     }
   }
 
-  private FormDataMultiPart getMultiFormData(String username, String password) {
+  private FormDataMultiPart getMultiFormData(String username, String password, MediaType mt) {
     final FormDataMultiPart mp = new FormDataMultiPart();
 
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("username").build(), username));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("password").build(), password));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionconf").fileName("sessionconf").build(),
-        new LensConf(), MediaType.APPLICATION_XML_TYPE));
+        new LensConf(), mt));
     return mp;
   }
 
-  @Test
-  public void testSessionEvents() {
+  @Test(dataProvider = "mediaTypeData")
+  public void testSessionEvents(MediaType mt) {
     final WebTarget target = target().path("session");
-    FormDataMultiPart mp = getMultiFormData("foo", "bar");
+    FormDataMultiPart mp = getMultiFormData("foo", "bar", mt);
 
-    LensSessionHandle lensSessionHandle = target.request().post(
+    LensSessionHandle lensSessionHandle = target.request(mt).post(
         Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE), LensSessionHandle.class);
     Assert.assertTrue(lensSessionHandle != null);
     Assert.assertTrue(metricsSvc.getTotalOpenedSessions() >= 1);
     Assert.assertTrue(metricsSvc.getActiveSessions() >= 1);
 
-    LensSessionHandle lensSessionHandle1 = target.request().post(
+    LensSessionHandle lensSessionHandle1 = target.request(mt).post(
         Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE), LensSessionHandle.class);
     Assert.assertTrue(lensSessionHandle1 != null);
     Assert.assertTrue(metricsSvc.getTotalOpenedSessions() >= 2);
     Assert.assertTrue(metricsSvc.getActiveSessions() >= 2);
 
-    APIResult result = target.queryParam("sessionid", lensSessionHandle).request().delete(APIResult.class);
+    APIResult result = target.queryParam("sessionid", lensSessionHandle).request(mt).delete(APIResult.class);
     Assert.assertTrue(metricsSvc.getTotalOpenedSessions() >= 1);
     Assert.assertTrue(metricsSvc.getTotalClosedSessions() >= 1);
     Assert.assertTrue(metricsSvc.getActiveSessions() >= 1);
 
-    result = target.queryParam("sessionid", lensSessionHandle1).request().delete(APIResult.class);
+    result = target.queryParam("sessionid", lensSessionHandle1).request(mt).delete(APIResult.class);
     Assert.assertTrue(metricsSvc.getTotalClosedSessions() >= 2);
   }
 }

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-server/src/test/java/org/apache/lens/server/ui/TestSessionUIResource.java
----------------------------------------------------------------------
diff --git a/lens-server/src/test/java/org/apache/lens/server/ui/TestSessionUIResource.java b/lens-server/src/test/java/org/apache/lens/server/ui/TestSessionUIResource.java
index 6f7c216..be87e65 100644
--- a/lens-server/src/test/java/org/apache/lens/server/ui/TestSessionUIResource.java
+++ b/lens-server/src/test/java/org/apache/lens/server/ui/TestSessionUIResource.java
@@ -28,11 +28,9 @@ import org.apache.lens.api.LensConf;
 import org.apache.lens.api.LensSessionHandle;
 import org.apache.lens.server.LensJerseyTest;
 
-import org.glassfish.jersey.client.ClientConfig;
 import org.glassfish.jersey.media.multipart.FormDataBodyPart;
 import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
 import org.glassfish.jersey.media.multipart.FormDataMultiPart;
-import org.glassfish.jersey.media.multipart.MultiPartFeature;
 import org.testng.Assert;
 import org.testng.annotations.AfterTest;
 import org.testng.annotations.BeforeTest;
@@ -74,16 +72,6 @@ public class TestSessionUIResource extends LensJerseyTest {
     return new UIApp();
   }
 
-  /*
-   * (non-Javadoc)
-   *
-   * @see org.glassfish.jersey.test.JerseyTest#configureClient(org.glassfish.jersey.client.ClientConfig)
-   */
-  @Override
-  protected void configureClient(ClientConfig config) {
-    config.register(MultiPartFeature.class);
-  }
-
   private FormDataMultiPart getMultiFormData(String username, String password) {
     final FormDataMultiPart mp = new FormDataMultiPart();
 

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 746204e..349b71c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -38,8 +38,8 @@
     <servlet3.version>3.0.1</servlet3.version>
     <servlet.api.version>2.5</servlet.api.version>
     <jsp.api.version>2.0</jsp.api.version>
-    <ws.rs.version>2.0</ws.rs.version>
-    <jaxb.api.version>2.2.11</jaxb.api.version>
+    <ws.rs.version>2.0.1</ws.rs.version>
+    <jaxb.api.version>2.2.12</jaxb.api.version>
     <javax.mail.version>1.4</javax.mail.version>
 
     <!-- hadoop stack -->
@@ -71,8 +71,8 @@
     <libthrift.version>0.9.0</libthrift.version>
 
     <jetty.version>6.1.26</jetty.version>
-    <jersey.version>2.3.1</jersey.version>
-    <grizzly.version>2.3.6</grizzly.version>
+    <jersey.version>2.22.1</jersey.version>
+    <grizzly.version>2.3.23</grizzly.version>
     <metrics.version>3.0.2</metrics.version>
     <subethasmtp.version>3.1.7</subethasmtp.version>
     <liquibase.version>3.0.7</liquibase.version>
@@ -963,6 +963,10 @@
             <artifactId>jersey-server</artifactId>
           </exclusion>
           <exclusion>
+            <groupId>com.sun.jersey</groupId>
+            <artifactId>jersey-client</artifactId>
+          </exclusion>
+          <exclusion>
             <groupId>tomcat</groupId>
             <artifactId>jasper-compiler</artifactId>
           </exclusion>
@@ -1293,6 +1297,11 @@
       </dependency>
       <dependency>
         <groupId>org.glassfish.jersey.media</groupId>
+        <artifactId>jersey-media-jaxb</artifactId>
+        <version>${jersey.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.glassfish.jersey.media</groupId>
         <artifactId>jersey-media-multipart</artifactId>
         <version>${jersey.version}</version>
       </dependency>

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/src/site/apt/admin/config.apt
----------------------------------------------------------------------
diff --git a/src/site/apt/admin/config.apt b/src/site/apt/admin/config.apt
index 703abb3..fb15d83 100644
--- a/src/site/apt/admin/config.apt
+++ b/src/site/apt/admin/config.apt
@@ -123,130 +123,134 @@ Lens server configuration
 *--+--+---+--+
 |48|lens.server.mode|OPEN|The mode in which server should run. Allowed values are OPEN, READ_ONLY, METASTORE_READONLY, METASTORE_NODROP. OPEN mode will allow all requests. READ_ONLY mode will allow all requests on session resouce and only GET requests on all other resources. METASTORE_READONLY will allow GET on metastore and all other requests in other services. METASTORE_NODROP will not allow DELETE on metastore, will allow all other requests.|
 *--+--+---+--+
-|49|lens.server.multipart.ws.feature.impl|org.glassfish.jersey.media.multipart.MultiPartFeature|Implementation class for query scheduler resource|
+|49|lens.server.moxyjson.ws.feature.impl|org.glassfish.jersey.moxy.json.MoxyJsonFeature|Enable Moxy json feature|
 *--+--+---+--+
-|50|lens.server.persist.location|file:///tmp/lensserver|The directory in which lens server will persist its state when it is going down. The location be on any Hadoop compatible file system. Server will read from the location when it is restarted and recovery is enabled. So, Server should have both read and write permissions to the location|
+|50|lens.server.moxyjsonconfigresovler.ws.feature.impl|org.apache.lens.api.util.MoxyJsonConfigurationContextResolver|Moxy json configuration resolver|
 *--+--+---+--+
-|51|lens.server.query.acceptors| |Query Acceptors configured. Query acceptors are consulted first, before anything happens for the given query. They can either return null or return a messaging indicating why the given query shouldn't be accepted. These can be used to filter out queries at the earliest.|
+|51|lens.server.multipart.ws.feature.impl|org.glassfish.jersey.media.multipart.MultiPartFeature|Implementation class for query scheduler resource|
 *--+--+---+--+
-|52|lens.server.query.launching.constraint.factories|org.apache.lens.server.query.constraint.TotalQueryCostCeilingConstraintFactory|Factories used to instantiate constraints enforced on queries by lens. Every Factory should be an implementation of org.apache.lens.server.api.common.ConfigBasedObjectCreationFactory and create an implementation of org.apache.lens.server.api.query.constraint.QueryLaunchingConstraint. A query will be launched only if all constraints pass.|
+|52|lens.server.persist.location|file:///tmp/lensserver|The directory in which lens server will persist its state when it is going down. The location be on any Hadoop compatible file system. Server will read from the location when it is restarted and recovery is enabled. So, Server should have both read and write permissions to the location|
 *--+--+---+--+
-|53|lens.server.query.phase1.rewriters| |Query phase 1 rewriters. This is to convert user query to cube query. The resulting cube query will be passed for validation and rewriting to hql query.\ |
+|53|lens.server.query.acceptors| |Query Acceptors configured. Query acceptors are consulted first, before anything happens for the given query. They can either return null or return a messaging indicating why the given query shouldn't be accepted. These can be used to filter out queries at the earliest.|
+*--+--+---+--+
+|54|lens.server.query.launching.constraint.factories|org.apache.lens.server.query.constraint.TotalQueryCostCeilingConstraintFactory|Factories used to instantiate constraints enforced on queries by lens. Every Factory should be an implementation of org.apache.lens.server.api.common.ConfigBasedObjectCreationFactory and create an implementation of org.apache.lens.server.api.query.constraint.QueryLaunchingConstraint. A query will be launched only if all constraints pass.|
+*--+--+---+--+
+|55|lens.server.query.phase1.rewriters| |Query phase 1 rewriters. This is to convert user query to cube query. The resulting cube query will be passed for validation and rewriting to hql query.\ |
 |  |                                  | |Use cases will be to use extra intelligence to convert user query to optimized cube query.                                                              \ |
 |  |                                  | |Or define shortcuts for certain frequently used queries :)                                                                                                |
 *--+--+---+--+
-|54|lens.server.query.resultset.retention|1 day|Lens query resultset retention period. Default 1 day|
+|56|lens.server.query.resultset.retention|1 day|Lens query resultset retention period. Default 1 day|
 *--+--+---+--+
-|55|lens.server.query.service.impl|org.apache.lens.server.query.QueryExecutionServiceImpl|Implementation class for query execution service|
+|57|lens.server.query.service.impl|org.apache.lens.server.query.QueryExecutionServiceImpl|Implementation class for query execution service|
 *--+--+---+--+
-|56|lens.server.query.state.logger.enabled|true|Disable or enable the query state logger with this config. The location for the logger can be specified in logback xml for the class org.apache.lens.server.query.QueryExecutionServiceImpl.QueryStatusLogger|
+|58|lens.server.query.state.logger.enabled|true|Disable or enable the query state logger with this config. The location for the logger can be specified in logback xml for the class org.apache.lens.server.query.QueryExecutionServiceImpl.QueryStatusLogger|
 *--+--+---+--+
-|57|lens.server.query.ws.resource.impl|org.apache.lens.server.query.QueryServiceResource|Implementation class for Query Resource|
+|59|lens.server.query.ws.resource.impl|org.apache.lens.server.query.QueryServiceResource|Implementation class for Query Resource|
 *--+--+---+--+
-|58|lens.server.querypurger.sleep.interval|10000|The interval(milliseconds) with which purger to run periodically. Default 10 sec.|
+|60|lens.server.querypurger.sleep.interval|10000|The interval(milliseconds) with which purger to run periodically. Default 10 sec.|
 *--+--+---+--+
-|59|lens.server.quota.service.impl|org.apache.lens.server.quota.QuotaServiceImpl|Implementation class for quota service|
+|61|lens.server.quota.service.impl|org.apache.lens.server.quota.QuotaServiceImpl|Implementation class for quota service|
 *--+--+---+--+
-|60|lens.server.quota.ws.resource.impl|org.apache.lens.server.quota.QuotaResource|Implementation class for Quota Resource|
+|62|lens.server.quota.ws.resource.impl|org.apache.lens.server.quota.QuotaResource|Implementation class for Quota Resource|
 *--+--+---+--+
-|61|lens.server.recover.onrestart|true|If the flag is enabled, all the services will be started from last saved state, if disabled all the services will start afresh|
+|63|lens.server.recover.onrestart|true|If the flag is enabled, all the services will be started from last saved state, if disabled all the services will start afresh|
 *--+--+---+--+
-|62|lens.server.restart.enabled|true|If flag is enabled, all the services will be persisted to persistent location passed.|
+|64|lens.server.restart.enabled|true|If flag is enabled, all the services will be persisted to persistent location passed.|
 *--+--+---+--+
-|63|lens.server.resultset.purge.enabled|false|Whether to purge the query results|
+|65|lens.server.resultset.purge.enabled|false|Whether to purge the query results|
 *--+--+---+--+
-|64|lens.server.resultsetpurger.sleep.interval.secs|3600|Periodicity for Query result purger runs. Default 1 hour.|
+|66|lens.server.resultsetpurger.sleep.interval.secs|3600|Periodicity for Query result purger runs. Default 1 hour.|
 *--+--+---+--+
-|65|lens.server.savedquery.jdbc.dialectclass|org.apache.lens.server.query.save.SavedQueryDao$HSQLDialect|Dialect of the target DB, Default is HSQL. Override with the target DB used.|
+|67|lens.server.savedquery.jdbc.dialectclass|org.apache.lens.server.query.save.SavedQueryDao$HSQLDialect|Dialect of the target DB, Default is HSQL. Override with the target DB used.|
 *--+--+---+--+
-|66|lens.server.savedquery.list.default.count|20|Key denoting the default fetch value of saved query list api.|
+|68|lens.server.savedquery.list.default.count|20|Key denoting the default fetch value of saved query list api.|
 *--+--+---+--+
-|67|lens.server.savedquery.list.default.offset|0|Key denoting the default start value of saved query list api.|
+|69|lens.server.savedquery.list.default.offset|0|Key denoting the default start value of saved query list api.|
 *--+--+---+--+
-|68|lens.server.savedquery.service.impl|org.apache.lens.server.query.save.SavedQueryServiceImpl|Implementation class for saved query service|
+|70|lens.server.savedquery.service.impl|org.apache.lens.server.query.save.SavedQueryServiceImpl|Implementation class for saved query service|
 *--+--+---+--+
-|69|lens.server.savedquery.ws.resource.impl|org.apache.lens.server.query.save.SavedQueryResource|Implementation class for Saved query Resource|
+|71|lens.server.savedquery.ws.resource.impl|org.apache.lens.server.query.save.SavedQueryResource|Implementation class for Saved query Resource|
 *--+--+---+--+
-|70|lens.server.scheduler.service.impl|org.apache.lens.server.scheduler.SchedulerServiceImpl|Implementation class for query scheduler service|
+|72|lens.server.scheduler.service.impl|org.apache.lens.server.scheduler.SchedulerServiceImpl|Implementation class for query scheduler service|
 *--+--+---+--+
-|71|lens.server.scheduler.ws.resource.impl|org.apache.lens.server.scheduler.ScheduleResource|Implementation class for query scheduler resource|
+|73|lens.server.scheduler.ws.resource.impl|org.apache.lens.server.scheduler.ScheduleResource|Implementation class for query scheduler resource|
 *--+--+---+--+
-|72|lens.server.scheduling.queue.poll.interval.millisec|2000|The interval at which submission thread will poll scheduling queue to fetch the next query for submission. If value is less than equal to 0, then it would mean that thread will continuosly poll without sleeping. The interval has to be given in milliseconds.|
+|74|lens.server.scheduling.queue.poll.interval.millisec|2000|The interval at which submission thread will poll scheduling queue to fetch the next query for submission. If value is less than equal to 0, then it would mean that thread will continuosly poll without sleeping. The interval has to be given in milliseconds.|
 *--+--+---+--+
-|73|lens.server.serverMode.ws.filter.impl|org.apache.lens.server.ServerModeFilter|Implementation class for ServerMode Filter|
+|75|lens.server.serverMode.ws.filter.impl|org.apache.lens.server.ServerModeFilter|Implementation class for ServerMode Filter|
 *--+--+---+--+
-|74|lens.server.service.provider.factory|org.apache.lens.server.ServiceProviderFactoryImpl|Service provider factory implementation class. This parameter is used to lookup the factory implementation class name that would provide an instance of ServiceProvider. Users should instantiate the class to obtain its instance. Example -- Class spfClass = conf.getClass("lens.server.service.provider.factory", null, ServiceProviderFactory.class); ServiceProviderFactory spf = spfClass.newInstance(); ServiceProvider serviceProvider = spf.getServiceProvider(); -- This is not supposed to be overridden by users.|
+|76|lens.server.service.provider.factory|org.apache.lens.server.ServiceProviderFactoryImpl|Service provider factory implementation class. This parameter is used to lookup the factory implementation class name that would provide an instance of ServiceProvider. Users should instantiate the class to obtain its instance. Example -- Class spfClass = conf.getClass("lens.server.service.provider.factory", null, ServiceProviderFactory.class); ServiceProviderFactory spf = spfClass.newInstance(); ServiceProvider serviceProvider = spf.getServiceProvider(); -- This is not supposed to be overridden by users.|
 *--+--+---+--+
-|75|lens.server.servicenames|session,query,metastore,scheduler,quota|These services would be started in the specified order when lens-server starts up|
+|77|lens.server.servicenames|session,query,metastore,scheduler,quota|These services would be started in the specified order when lens-server starts up|
 *--+--+---+--+
-|76|lens.server.session.expiry.service.interval.secs|3600|Interval at which lens session expiry service runs|
+|78|lens.server.session.expiry.service.interval.secs|3600|Interval at which lens session expiry service runs|
 *--+--+---+--+
-|77|lens.server.session.service.impl|org.apache.lens.server.session.HiveSessionService|Implementation class for session service|
+|79|lens.server.session.service.impl|org.apache.lens.server.session.HiveSessionService|Implementation class for session service|
 *--+--+---+--+
-|78|lens.server.session.timeout.seconds|86400|Lens session timeout in seconds.If there is no activity on the session for this period then the session will be closed.Default timeout is one day.|
+|80|lens.server.session.timeout.seconds|86400|Lens session timeout in seconds.If there is no activity on the session for this period then the session will be closed.Default timeout is one day.|
 *--+--+---+--+
-|79|lens.server.session.ws.resource.impl|org.apache.lens.server.session.SessionResource|Implementation class for Session Resource|
+|81|lens.server.session.ws.resource.impl|org.apache.lens.server.session.SessionResource|Implementation class for Session Resource|
 *--+--+---+--+
-|80|lens.server.snapshot.interval|300000|Snapshot interval time in miliseconds for saving lens server state.|
+|82|lens.server.snapshot.interval|300000|Snapshot interval time in miliseconds for saving lens server state.|
 *--+--+---+--+
-|81|lens.server.state.persist.out.stream.buffer.size|1048576|Output Stream Buffer Size used in writing lens server state to file system. Size is in bytes.|
+|83|lens.server.state.persist.out.stream.buffer.size|1048576|Output Stream Buffer Size used in writing lens server state to file system. Size is in bytes.|
 *--+--+---+--+
-|82|lens.server.statistics.db|lensstats|Database to which statistics tables are created and partitions are added.|
+|84|lens.server.statistics.db|lensstats|Database to which statistics tables are created and partitions are added.|
 *--+--+---+--+
-|83|lens.server.statistics.log.rollover.interval|3600000|Default rate which log statistics store scans for rollups in milliseconds.|
+|85|lens.server.statistics.log.rollover.interval|3600000|Default rate which log statistics store scans for rollups in milliseconds.|
 *--+--+---+--+
-|84|lens.server.statistics.store.class|org.apache.lens.server.stats.store.log.LogStatisticsStore|Default implementation of class used to persist Lens Statistics.|
+|86|lens.server.statistics.store.class|org.apache.lens.server.stats.store.log.LogStatisticsStore|Default implementation of class used to persist Lens Statistics.|
 *--+--+---+--+
-|85|lens.server.statistics.warehouse.dir|file:///tmp/lens/statistics/warehouse|Default top level location where stats are moved by the log statistics store.|
+|87|lens.server.statistics.warehouse.dir|file:///tmp/lens/statistics/warehouse|Default top level location where stats are moved by the log statistics store.|
 *--+--+---+--+
-|86|lens.server.total.query.cost.ceiling.per.user|-1.0|A query submitted by user will be launched only if total query cost of all current launched queries of user is less than or equal to total query cost ceiling defined by this property. This configuration value is only useful when TotalQueryCostCeilingConstraint is enabled by using org.apache.lens.server.query.constraint.TotalQueryCostCeilingConstraintFactory as one of the factories in lens.server.query.constraint.factories property. Default is -1.0 which means that there is no limit on the total query cost of launched queries submitted by a user.|
+|88|lens.server.total.query.cost.ceiling.per.user|-1.0|A query submitted by user will be launched only if total query cost of all current launched queries of user is less than or equal to total query cost ceiling defined by this property. This configuration value is only useful when TotalQueryCostCeilingConstraint is enabled by using org.apache.lens.server.query.constraint.TotalQueryCostCeilingConstraintFactory as one of the factories in lens.server.query.constraint.factories property. Default is -1.0 which means that there is no limit on the total query cost of launched queries submitted by a user.|
 *--+--+---+--+
-|87|lens.server.ui.base.uri|http://0.0.0.0:19999/|The base url for the Lens UI Server|
+|89|lens.server.ui.base.uri|http://0.0.0.0:19999/|The base url for the Lens UI Server|
 *--+--+---+--+
-|88|lens.server.ui.enable|true|Bringing up the ui server is optional. By default it brings up UI server.|
+|90|lens.server.ui.enable|true|Bringing up the ui server is optional. By default it brings up UI server.|
 *--+--+---+--+
-|89|lens.server.ui.enable.caching|true|Set this to false to disable static file caching in the UI server|
+|91|lens.server.ui.enable.caching|true|Set this to false to disable static file caching in the UI server|
 *--+--+---+--+
-|90|lens.server.ui.static.dir|webapp/lens-server/static|The base directory to server UI static files from|
+|92|lens.server.ui.static.dir|webapp/lens-server/static|The base directory to server UI static files from|
 *--+--+---+--+
-|91|lens.server.user.resolver.custom.class|full.package.name.Classname|Required for CUSTOM user resolver. In case the provided implementations are not sufficient for user config resolver, a custom classname can be provided. Class should extend org.apache.lens.server.user.UserConfigLoader|
+|93|lens.server.user.resolver.custom.class|full.package.name.Classname|Required for CUSTOM user resolver. In case the provided implementations are not sufficient for user config resolver, a custom classname can be provided. Class should extend org.apache.lens.server.user.UserConfigLoader|
 *--+--+---+--+
-|92|lens.server.user.resolver.db.keys|lens.session.cluster.user,mapred.job.queue.name|Required for DATABASE and LDAP_BACKED_DATABASE user resolvers. For database based user config loaders, the conf keys that will be loaded from database.|
+|94|lens.server.user.resolver.db.keys|lens.session.cluster.user,mapred.job.queue.name|Required for DATABASE and LDAP_BACKED_DATABASE user resolvers. For database based user config loaders, the conf keys that will be loaded from database.|
 *--+--+---+--+
-|93|lens.server.user.resolver.db.query|select clusteruser,queue from user_config_table where username=?|Required for DATABASE and LDAP_BACKED_DATABASE user resolvers. For database based user config loader, this query will be run with single argument = logged in user and the result columns will be assigned to lens.server.user.resolver.db.keys in order. For ldap backed database resolver, the argument to this query will be the intermediate values obtained from ldap.|
+|95|lens.server.user.resolver.db.query|select clusteruser,queue from user_config_table where username=?|Required for DATABASE and LDAP_BACKED_DATABASE user resolvers. For database based user config loader, this query will be run with single argument = logged in user and the result columns will be assigned to lens.server.user.resolver.db.keys in order. For ldap backed database resolver, the argument to this query will be the intermediate values obtained from ldap.|
 *--+--+---+--+
-|94|lens.server.user.resolver.fixed.value| |Required for FIXED user resolver. when lens.server.user.resolver.type=FIXED, This will be the value cluster user will resolve to.|
+|96|lens.server.user.resolver.fixed.value| |Required for FIXED user resolver. when lens.server.user.resolver.type=FIXED, This will be the value cluster user will resolve to.|
 *--+--+---+--+
-|95|lens.server.user.resolver.ldap.bind.dn| |Required for LDAP_BACKED_DATABASE user resolvers. ldap dn for admin binding example: CN=company-it-admin,ou=service-account,ou=company-service-account,dc=dc1,dc=com...|
+|97|lens.server.user.resolver.ldap.bind.dn| |Required for LDAP_BACKED_DATABASE user resolvers. ldap dn for admin binding example: CN=company-it-admin,ou=service-account,ou=company-service-account,dc=dc1,dc=com...|
 *--+--+---+--+
-|96|lens.server.user.resolver.ldap.bind.password| |Required for LDAP_BACKED_DATABASE user resolvers. ldap password for admin binding above|
+|98|lens.server.user.resolver.ldap.bind.password| |Required for LDAP_BACKED_DATABASE user resolvers. ldap password for admin binding above|
 *--+--+---+--+
-|97|lens.server.user.resolver.ldap.fields|department|Required for LDAP_BACKED_DATABASE user resolvers. list of fields to be obtained from ldap. These will be cached by the intermediate db.|
+|99|lens.server.user.resolver.ldap.fields|department|Required for LDAP_BACKED_DATABASE user resolvers. list of fields to be obtained from ldap. These will be cached by the intermediate db.|
 *--+--+---+--+
-|98|lens.server.user.resolver.ldap.intermediate.db.delete.sql|delete from user_department where username=?|Required for LDAP_BACKED_DATABASE user resolvers. query to delete intermediate values from database backing ldap as cache. one argument: logged in user.|
+|100|lens.server.user.resolver.ldap.intermediate.db.delete.sql|delete from user_department where username=?|Required for LDAP_BACKED_DATABASE user resolvers. query to delete intermediate values from database backing ldap as cache. one argument: logged in user.|
 *--+--+---+--+
-|99|lens.server.user.resolver.ldap.intermediate.db.insert.sql|insert into user_department (username, department, expiry) values (?, ?, ?)|Required for LDAP_BACKED_DATABASE user resolvers. query to insert intermediate values from database backing ldap as cache. arguments: first logged in user, then all intermediate values, then current time + expiration time|
+|101|lens.server.user.resolver.ldap.intermediate.db.insert.sql|insert into user_department (username, department, expiry) values (?, ?, ?)|Required for LDAP_BACKED_DATABASE user resolvers. query to insert intermediate values from database backing ldap as cache. arguments: first logged in user, then all intermediate values, then current time + expiration time|
 *--+--+---+--+
-|100|lens.server.user.resolver.ldap.intermediate.db.query|select department from user_department where username=? and expiry>?|Required for LDAP_BACKED_DATABASE user resolvers. query to obtain intermediate values from database backing ldap as cache. two arguments: logged in user and current time.|
+|102|lens.server.user.resolver.ldap.intermediate.db.query|select department from user_department where username=? and expiry>?|Required for LDAP_BACKED_DATABASE user resolvers. query to obtain intermediate values from database backing ldap as cache. two arguments: logged in user and current time.|
 *--+--+---+--+
-|101|lens.server.user.resolver.ldap.search.base| |Required for LDAP_BACKED_DATABASE user resolvers. for searching intermediate values for a user, the search keys. example: cn=users,dc=dc1,dc=dc2...|
+|103|lens.server.user.resolver.ldap.search.base| |Required for LDAP_BACKED_DATABASE user resolvers. for searching intermediate values for a user, the search keys. example: cn=users,dc=dc1,dc=dc2...|
 *--+--+---+--+
-|102|lens.server.user.resolver.ldap.search.filter|(&(objectClass=user)(sAMAccountName=%s))|Required for LDAP_BACKED_DATABASE user resolvers. filter pattern for ldap search|
+|104|lens.server.user.resolver.ldap.search.filter|(&(objectClass=user)(sAMAccountName=%s))|Required for LDAP_BACKED_DATABASE user resolvers. filter pattern for ldap search|
 *--+--+---+--+
-|103|lens.server.user.resolver.ldap.url| |Required for LDAP_BACKED_DATABASE user resolvers. ldap url to connect to.|
+|105|lens.server.user.resolver.ldap.url| |Required for LDAP_BACKED_DATABASE user resolvers. ldap url to connect to.|
 *--+--+---+--+
-|104|lens.server.user.resolver.propertybased.filename|/path/to/propertyfile|Required for PROPERTYBASED user resolver. when lens.server.user.resolver.type is PROPERTYBASED, then this file will be read and parsed to determine cluster user. Each line should contain username followed by DOT followed by property full name followed by equal-to sign and followed by value. example schema of the file is: user1.lens.server.cluster.user=clusteruser1 user1.mapred.job.queue.name=queue1 *.lens.server.cluster.user=defaultclusteruser *.mapred.job.queue.name=default|
+|106|lens.server.user.resolver.propertybased.filename|/path/to/propertyfile|Required for PROPERTYBASED user resolver. when lens.server.user.resolver.type is PROPERTYBASED, then this file will be read and parsed to determine cluster user. Each line should contain username followed by DOT followed by property full name followed by equal-to sign and followed by value. example schema of the file is: user1.lens.server.cluster.user=clusteruser1 user1.mapred.job.queue.name=queue1 *.lens.server.cluster.user=defaultclusteruser *.mapred.job.queue.name=default|
 *--+--+---+--+
-|105|lens.server.user.resolver.type|FIXED|Type of user config resolver. allowed values are FIXED, PROPERTYBASED, DATABASE, LDAP_BACKED_DATABASE, CUSTOM.|
+|107|lens.server.user.resolver.type|FIXED|Type of user config resolver. allowed values are FIXED, PROPERTYBASED, DATABASE, LDAP_BACKED_DATABASE, CUSTOM.|
 *--+--+---+--+
-|106|lens.server.waiting.queries.selection.policy.factories|org.apache.lens.server.query.collect.UserSpecificWaitingQueriesSelectionPolicyFactory|Factories used to instantiate waiting queries selection policies. Every factory should be an implementation of org.apache.lens.server.api.common.ConfigBasedObjectCreationFactory and create an implementation of org.apache.lens.server.api.query.collect.WaitingQueriesSelectionPolicy.|
+|108|lens.server.waiting.queries.selection.policy.factories|org.apache.lens.server.query.collect.UserSpecificWaitingQueriesSelectionPolicyFactory|Factories used to instantiate waiting queries selection policies. Every factory should be an implementation of org.apache.lens.server.api.common.ConfigBasedObjectCreationFactory and create an implementation of org.apache.lens.server.api.query.collect.WaitingQueriesSelectionPolicy.|
 *--+--+---+--+
-|107|lens.server.ws.featurenames|multipart|These JAX-RS Feature(s) would be started in the specified order when lens-server starts up|
+|109|lens.server.ws.featurenames|multipart,moxyjson,moxyjsonconfigresovler|These JAX-RS Feature(s) would be started in the specified order when lens-server starts up|
 *--+--+---+--+
-|108|lens.server.ws.filternames|authentication,consistentState,serverMode|These JAX-RS filters would be started in the specified order when lens-server starts up|
+|110|lens.server.ws.filternames|authentication,consistentState,serverMode|These JAX-RS filters would be started in the specified order when lens-server starts up|
 *--+--+---+--+
-|109|lens.server.ws.listenernames|appevent|These listeners would be called in the specified order when lens-server starts up|
+|111|lens.server.ws.listenernames|appevent|These listeners would be called in the specified order when lens-server starts up|
 *--+--+---+--+
-|110|lens.server.ws.resourcenames|session,metastore,query,quota,scheduler,index,log|These JAX-RS resources would be started in the specified order when lens-server starts up|
+|112|lens.server.ws.resourcenames|session,metastore,query,quota,scheduler,index,log|These JAX-RS resources would be started in the specified order when lens-server starts up|
 *--+--+---+--+
 The configuration parameters and their default values


[4/7] lens git commit: LENS-920 : Fix issues in producing and consuming json for all api

Posted by am...@apache.org.
http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-server/src/test/java/org/apache/lens/server/metastore/TestMetastoreService.java
----------------------------------------------------------------------
diff --git a/lens-server/src/test/java/org/apache/lens/server/metastore/TestMetastoreService.java b/lens-server/src/test/java/org/apache/lens/server/metastore/TestMetastoreService.java
index 925fc86..4bc3f0a 100644
--- a/lens-server/src/test/java/org/apache/lens/server/metastore/TestMetastoreService.java
+++ b/lens-server/src/test/java/org/apache/lens/server/metastore/TestMetastoreService.java
@@ -29,10 +29,7 @@ import javax.ws.rs.BadRequestException;
 import javax.ws.rs.NotFoundException;
 import javax.ws.rs.client.Entity;
 import javax.ws.rs.client.WebTarget;
-import javax.ws.rs.core.Application;
-import javax.ws.rs.core.GenericType;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
+import javax.ws.rs.core.*;
 import javax.xml.bind.JAXBElement;
 import javax.xml.datatype.DatatypeFactory;
 import javax.xml.datatype.XMLGregorianCalendar;
@@ -44,6 +41,7 @@ import org.apache.lens.api.LensSessionHandle;
 import org.apache.lens.api.StringList;
 import org.apache.lens.api.error.LensCommonErrorCode;
 import org.apache.lens.api.metastore.*;
+import org.apache.lens.api.metastore.ObjectFactory;
 import org.apache.lens.api.result.LensAPIResult;
 import org.apache.lens.cube.metadata.*;
 import org.apache.lens.cube.metadata.ExprColumn.ExprSpec;
@@ -62,15 +60,9 @@ import org.apache.hadoop.hive.metastore.api.FieldSchema;
 import org.apache.hadoop.hive.ql.session.SessionState;
 import org.apache.hadoop.mapred.SequenceFileInputFormat;
 
-import org.glassfish.jersey.client.ClientConfig;
-import org.glassfish.jersey.media.multipart.FormDataBodyPart;
-import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
-import org.glassfish.jersey.media.multipart.FormDataMultiPart;
-import org.glassfish.jersey.media.multipart.MultiPartFeature;
+import org.glassfish.jersey.test.TestProperties;
 import org.testng.Assert;
-import org.testng.annotations.AfterTest;
-import org.testng.annotations.BeforeTest;
-import org.testng.annotations.Test;
+import org.testng.annotations.*;
 
 import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
@@ -80,8 +72,6 @@ import lombok.extern.slf4j.Slf4j;
 @Test(groups = "unit-test")
 public class TestMetastoreService extends LensJerseyTest {
   private ObjectFactory cubeObjectFactory;
-  protected String mediaType = MediaType.APPLICATION_XML;
-  protected MediaType medType = MediaType.APPLICATION_XML_TYPE;
   protected String dbPFX = "TestMetastoreService_";
   CubeMetastoreServiceImpl metastoreService;
   LensSessionHandle lensSessionId;
@@ -90,7 +80,7 @@ public class TestMetastoreService extends LensJerseyTest {
     assertEquals(result.getStatus(), Status.SUCCEEDED, String.valueOf(result));
   }
 
-  @BeforeTest
+  @BeforeMethod
   public void setUp() throws Exception {
     super.setUp();
     cubeObjectFactory = new ObjectFactory();
@@ -99,7 +89,7 @@ public class TestMetastoreService extends LensJerseyTest {
 
   }
 
-  @AfterTest
+  @AfterMethod
   public void tearDown() throws Exception {
     metastoreService.closeSession(lensSessionId);
     super.tearDown();
@@ -107,62 +97,67 @@ public class TestMetastoreService extends LensJerseyTest {
 
   @Override
   protected Application configure() {
+    enable(TestProperties.LOG_TRAFFIC);
+    enable(TestProperties.DUMP_ENTITY);
     return new MetastoreApp();
   }
 
-  @Override
-  protected void configureClient(ClientConfig config) {
-    config.register(MultiPartFeature.class);
-  }
-
-  @Test
-  public void testSetDatabase() throws Exception {
-    WebTarget dbTarget = target().path("metastore").path("databases/current");
-    String dbName = "test_set_db";
+  @Test(dataProvider = "mediaTypeData")
+  public void testSetDatabase(MediaType mediaType) throws Exception {
+    String prevDb = getCurrentDatabase(mediaType);
+    String dbName = "test_set_db" + mediaType.getSubtype();
     try {
-      dbTarget.queryParam("sessionid", lensSessionId).request(mediaType).put(Entity.xml(dbName), APIResult.class);
-      fail("Should get 404");
-    } catch (NotFoundException e) {
-      // expected
-    }
+      WebTarget dbTarget = target().path("metastore").path("databases/current");
+      try {
+        dbTarget.queryParam("sessionid", lensSessionId).request(mediaType).put(getEntityForString(dbName, mediaType),
+          APIResult.class);
+        fail("Should get 404");
+      } catch (NotFoundException e) {
+        // expected
+      }
 
-    // create
-    APIResult result = target().path("metastore").path("databases")
-      .queryParam("sessionid", lensSessionId).request(mediaType).post(Entity.xml(dbName), APIResult.class);
-    assertNotNull(result);
-    assertSuccess(result);
+      // create
+      APIResult result = target().path("metastore").path("databases")
+        .queryParam("sessionid", lensSessionId).request(mediaType).post(getEntityForString(dbName, mediaType), APIResult
+          .class);
+      assertNotNull(result);
+      assertSuccess(result);
 
-    // set
-    result = dbTarget.queryParam("sessionid", lensSessionId).request(mediaType)
-      .put(Entity.xml(dbName), APIResult.class);
-    assertNotNull(result);
-    assertSuccess(result);
+      // set
+      result = dbTarget.queryParam("sessionid", lensSessionId).request(mediaType)
+        .put(getEntityForString(dbName, mediaType), APIResult.class);
+      assertNotNull(result);
+      assertSuccess(result);
 
-    // set without session id, we should get bad request
-    try {
-      dbTarget.request(mediaType).put(Entity.xml(dbName), APIResult.class);
-      fail("Should have thrown bad request exception");
-    } catch (BadRequestException badReq) {
-      // expected
-    }
+      // set without session id, we should get bad request
+      try {
+        dbTarget.request(mediaType).put(getEntityForString(dbName, mediaType), APIResult.class);
+        fail("Should have thrown bad request exception");
+      } catch (BadRequestException badReq) {
+        // expected
+      }
 
-    String current = dbTarget.queryParam("sessionid", lensSessionId).request(mediaType).get(String.class);
-    assertEquals(current, dbName);
+      String current = dbTarget.queryParam("sessionid", lensSessionId).request(mediaType).get(String.class);
+      assertEquals(current, dbName);
+    } finally {
+      setCurrentDatabase(prevDb, mediaType);
+      dropDatabase(dbName, mediaType);
+    }
   }
 
-  @Test
-  public void testCreateDatabase() throws Exception {
-    final String newDb = dbPFX + "new_db";
+  @Test(dataProvider = "mediaTypeData")
+  public void testCreateDatabase(MediaType mediaType) throws Exception {
+    final String newDb = dbPFX + "new_db" + mediaType.getSubtype();
     WebTarget dbTarget = target().path("metastore").path("databases");
 
     APIResult result = dbTarget.queryParam("sessionid", lensSessionId).request(mediaType)
-      .post(Entity.xml(newDb), APIResult.class);
+      .post(getEntityForString(newDb, mediaType), APIResult.class);
     assertNotNull(result);
     assertSuccess(result);
 
     // Create again
     result = dbTarget.queryParam("sessionid", lensSessionId).queryParam("ignoreIfExisting", false)
-      .request(mediaType).post(Entity.xml(newDb), APIResult.class);
+      .request(mediaType).post(getEntityForString(newDb, mediaType), APIResult.class);
     assertEquals(result.getStatus(), APIResult.Status.FAILED);
     log.info(">> Result message " + result.getMessage());
 
@@ -170,13 +165,13 @@ public class TestMetastoreService extends LensJerseyTest {
     dbTarget.path(newDb).queryParam("sessionid", lensSessionId).request().delete();
   }
 
-  @Test
-  public void testDropDatabase() throws Exception {
-    final String dbName = dbPFX + "del_db";
+  @Test(dataProvider = "mediaTypeData")
+  public void testDropDatabase(MediaType mediaType) throws Exception {
+    final String dbName = dbPFX + "del_db" + mediaType.getSubtype();
     final WebTarget dbTarget = target().path("metastore").path("databases");
     // First create the database
     APIResult create = dbTarget.queryParam("sessionid", lensSessionId).request(mediaType)
-      .post(Entity.xml(dbName), APIResult.class);
+      .post(getEntityForString(dbName, mediaType), APIResult.class);
     assertSuccess(create);
 
     // Now drop it
@@ -186,16 +181,16 @@ public class TestMetastoreService extends LensJerseyTest {
     assertSuccess(drop);
   }
 
-  @Test
-  public void testGetAllDatabases() throws Exception {
-    final String[] dbsToCreate = {"db_1", "db_2", "db_3"};
+  @Test(dataProvider = "mediaTypeData")
+  public void testGetAllDatabases(MediaType mediaType) throws Exception {
+    final String[] dbsToCreate = {"db_1" + mediaType.getSubtype(),
+      "db_2" + mediaType.getSubtype(), "db_3" + mediaType.getSubtype(), };
     final WebTarget dbTarget = target().path("metastore").path("databases");
 
     for (String name : dbsToCreate) {
-      dbTarget.queryParam("sessionid", lensSessionId).request(mediaType).post(Entity.xml(name));
+      dbTarget.queryParam("sessionid", lensSessionId).request(mediaType).post(getEntityForString(name, mediaType));
     }
 
-
     StringList allDbs = target().path("metastore").path("databases")
       .queryParam("sessionid", lensSessionId).request(mediaType)
       .get(StringList.class);
@@ -216,16 +211,16 @@ public class TestMetastoreService extends LensJerseyTest {
     }
   }
 
-  private void createDatabase(String dbName) throws Exception {
+  private void createDatabase(String dbName, MediaType mediaType) throws Exception {
     WebTarget dbTarget = target().path("metastore").path("databases");
 
     APIResult result = dbTarget.queryParam("sessionid", lensSessionId).request(mediaType)
-      .post(Entity.xml(dbName), APIResult.class);
+      .post(getEntityForString(dbName, mediaType), APIResult.class);
     assertNotNull(result);
     assertSuccess(result);
   }
 
-  private void createStorage(String storageName) throws Exception {
+  private void createStorage(String storageName, MediaType mediaType) throws Exception {
     WebTarget target = target().path("metastore").path("storages");
 
     XStorage xs = new XStorage();
@@ -237,13 +232,15 @@ public class TestMetastoreService extends LensJerseyTest {
     prop.setValue("prop1.value");
     xs.getProperties().getProperty().add(prop);
 
-    APIResult result = target.queryParam("sessionid", lensSessionId).request(mediaType).post(Entity.xml(
-      cubeObjectFactory.createXStorage(xs)), APIResult.class);
+    APIResult result = target.queryParam("sessionid", lensSessionId).request(mediaType).post(
+      Entity.entity(new GenericEntity<JAXBElement<XStorage>>(cubeObjectFactory.createXStorage(xs)) {
+      }, mediaType),
+      APIResult.class);
     assertNotNull(result);
     assertSuccess(result);
   }
 
-  private void dropStorage(String storageName) throws Exception {
+  private void dropStorage(String storageName, MediaType mediaType) throws Exception {
     WebTarget target = target().path("metastore").path("storages").path(storageName);
 
     APIResult result = target
@@ -251,7 +248,7 @@ public class TestMetastoreService extends LensJerseyTest {
     assertSuccess(result);
   }
 
-  private void dropDatabase(String dbName) throws Exception {
+  private void dropDatabase(String dbName, MediaType mediaType) throws Exception {
     WebTarget dbTarget = target().path("metastore").path("databases").path(dbName);
 
     APIResult result = dbTarget.queryParam("cascade", "true")
@@ -259,14 +256,14 @@ public class TestMetastoreService extends LensJerseyTest {
     assertSuccess(result);
   }
 
-  private void setCurrentDatabase(String dbName) throws Exception {
+  private void setCurrentDatabase(String dbName, MediaType mediaType) throws Exception {
     WebTarget dbTarget = target().path("metastore").path("databases/current");
-    APIResult result = dbTarget.queryParam("sessionid", lensSessionId).request(mediaType).put(Entity.xml(dbName),
-      APIResult.class);
+    APIResult result = dbTarget.queryParam("sessionid", lensSessionId).request(mediaType)
+      .put(getEntityForString(dbName, mediaType), APIResult.class);
     assertSuccess(result);
   }
 
-  private String getCurrentDatabase() throws Exception {
+  private String getCurrentDatabase(MediaType mediaType) throws Exception {
     return target().path("metastore").path("databases/current")
       .queryParam("sessionid", lensSessionId).request(mediaType).get(String.class);
   }
@@ -462,25 +459,27 @@ public class TestMetastoreService extends LensJerseyTest {
     }
   }
 
-  @Test
-  public void testCreateCube() throws Exception {
-    final String DB = dbPFX + "test_create_cube";
-    String prevDb = getCurrentDatabase();
-    createDatabase(DB);
-    setCurrentDatabase(DB);
+  @Test(dataProvider = "mediaTypeData")
+  public void testCreateCube(MediaType mediaType) throws Exception {
+    final String DB = dbPFX + "test_create_cube" + mediaType.getSubtype();
+    String prevDb = getCurrentDatabase(mediaType);
+    createDatabase(DB, mediaType);
+    setCurrentDatabase(DB, mediaType);
     try {
       final XCube cube = createTestCube("testCube1");
       final WebTarget target = target().path("metastore").path("cubes");
       APIResult result;
       try {
         // first try without a session id
-        target.request(mediaType).post(Entity.xml(cubeObjectFactory.createXCube(cube)), APIResult.class);
+        target.request(mediaType).post(Entity.entity(new GenericEntity<JAXBElement<XCube>>(
+          cubeObjectFactory.createXCube(cube)){}, mediaType), APIResult.class);
         fail("Should have thrown bad request exception");
       } catch (BadRequestException badReq) {
         // expected
       }
       result = target.queryParam("sessionid", lensSessionId).request(mediaType)
-        .post(Entity.xml(cubeObjectFactory.createXCube(cube)), APIResult.class);
+        .post(Entity.entity(new GenericEntity<JAXBElement<XCube>>(cubeObjectFactory.createXCube(cube)){}, mediaType),
+          APIResult.class);
       assertNotNull(result);
       assertSuccess(result);
 
@@ -490,14 +489,16 @@ public class TestMetastoreService extends LensJerseyTest {
       // create invalid derived cube
       XCube dcube = createDerivedCube("testderived", "testCube1", true);
       result = target.queryParam("sessionid", lensSessionId).request(
-        mediaType).post(Entity.xml(cubeObjectFactory.createXCube(dcube)), APIResult.class);
+        mediaType).post(Entity.entity(new GenericEntity<JAXBElement<XCube>>(cubeObjectFactory.createXCube(dcube)){},
+        mediaType), APIResult.class);
       assertEquals(result.getStatus(), Status.FAILED);
       assertEquals(result.getMessage(), "Problem in submitting entity: Derived cube invalid: Measures "
         + "[random_measure] and Dim Attributes [random_dim] were not present in parent cube testcube1");
       // create derived cube
       dcube = createDerivedCube("testderived", "testCube1", false);
       result = target.queryParam("sessionid", lensSessionId).request(
-        mediaType).post(Entity.xml(cubeObjectFactory.createXCube(dcube)), APIResult.class);
+        mediaType).post(Entity.entity(new GenericEntity<JAXBElement<XCube>>(cubeObjectFactory.createXCube(dcube)){},
+        mediaType), APIResult.class);
       assertNotNull(result);
       assertSuccess(result);
 
@@ -528,7 +529,8 @@ public class TestMetastoreService extends LensJerseyTest {
       qcube.getProperties().getProperty().add(xp);
 
       result = target.queryParam("sessionid", lensSessionId).request(
-        mediaType).post(Entity.xml(cubeObjectFactory.createXCube(qcube)), APIResult.class);
+        mediaType).post(Entity.entity(new GenericEntity<JAXBElement<XCube>>(cubeObjectFactory.createXCube(qcube)){},
+        mediaType), APIResult.class);
       assertNotNull(result);
       assertSuccess(result);
 
@@ -546,12 +548,11 @@ public class TestMetastoreService extends LensJerseyTest {
         LensUtil.<String, Boolean>getHashMap("testCube1", true, "testderived", true, "testNoQueryCube", false));
 
     } finally {
-      dropDatabase(DB);
-      setCurrentDatabase(prevDb);
+      dropDatabase(DB, mediaType);
+      setCurrentDatabase(prevDb, mediaType);
     }
   }
 
-  @Test
   public void testMeasureJaxBConversion() throws Exception {
     CubeMeasure cubeMeasure =
       new ColumnMeasure(new FieldSchema("msr1", "int", "first measure"), null, null, null, null, null, null, null,
@@ -563,12 +564,12 @@ public class TestMetastoreService extends LensJerseyTest {
     assertEquals(actualMeasure.getMax(), measure.getMax());
   }
 
-  @Test
-  public void testGetCube() throws Exception {
-    final String DB = dbPFX + "test_get_cube";
-    String prevDb = getCurrentDatabase();
-    createDatabase(DB);
-    setCurrentDatabase(DB);
+  @Test(dataProvider = "mediaTypeData")
+  public void testGetCube(MediaType mediaType) throws Exception {
+    final String DB = dbPFX + "test_get_cube" + mediaType.getSubtype();
+    String prevDb = getCurrentDatabase(mediaType);
+    createDatabase(DB, mediaType);
+    setCurrentDatabase(DB, mediaType);
 
     try {
       final XBaseCube cube = createTestCube("testGetCube");
@@ -576,7 +577,8 @@ public class TestMetastoreService extends LensJerseyTest {
       WebTarget target = target().path("metastore").path("cubes");
       JAXBElement<XCube> element = cubeObjectFactory.createXCube(cube);
       APIResult result =
-        target.queryParam("sessionid", lensSessionId).request(mediaType).post(Entity.xml(element), APIResult.class);
+        target.queryParam("sessionid", lensSessionId).request(mediaType).post(Entity.entity(
+          new GenericEntity<JAXBElement<XCube>>(element){}, mediaType), APIResult.class);
       assertSuccess(result);
 
       // Now get
@@ -674,7 +676,8 @@ public class TestMetastoreService extends LensJerseyTest {
       // Create this cube first
       element = cubeObjectFactory.createXCube(dcube);
       result =
-        target.queryParam("sessionid", lensSessionId).request(mediaType).post(Entity.xml(element), APIResult.class);
+        target.queryParam("sessionid", lensSessionId).request(mediaType).post(
+          Entity.entity(new GenericEntity<JAXBElement<XCube>>(element){}, mediaType), APIResult.class);
       assertSuccess(result);
 
       // Now get
@@ -688,17 +691,17 @@ public class TestMetastoreService extends LensJerseyTest {
       assertEquals(actual2.getMeasureNames().getMeasureName().size(), dcube.getMeasureNames().getMeasureName().size());
       assertEquals(actual2.getDimAttrNames().getAttrName().size(), dcube.getDimAttrNames().getAttrName().size());
     } finally {
-      dropDatabase(DB);
-      setCurrentDatabase(prevDb);
+      dropDatabase(DB, mediaType);
+      setCurrentDatabase(prevDb, mediaType);
     }
   }
 
-  @Test
-  public void testDropCube() throws Exception {
-    final String DB = dbPFX + "test_drop_cube";
-    String prevDb = getCurrentDatabase();
-    createDatabase(DB);
-    setCurrentDatabase(DB);
+  @Test(dataProvider = "mediaTypeData")
+  public void testDropCube(MediaType mediaType) throws Exception {
+    final String DB = dbPFX + "test_drop_cube" + mediaType.getSubtype();
+    String prevDb = getCurrentDatabase(mediaType);
+    createDatabase(DB, mediaType);
+    setCurrentDatabase(DB, mediaType);
 
     try {
       final XCube cube = createTestCube("test_drop_cube");
@@ -706,7 +709,8 @@ public class TestMetastoreService extends LensJerseyTest {
       WebTarget target = target().path("metastore").path("cubes");
       JAXBElement<XCube> element = cubeObjectFactory.createXCube(cube);
       APIResult result =
-        target.queryParam("sessionid", lensSessionId).request(mediaType).post(Entity.xml(element), APIResult.class);
+        target.queryParam("sessionid", lensSessionId).request(mediaType).post(
+          Entity.entity(new GenericEntity<JAXBElement<XCube>>(element){}, mediaType), APIResult.class);
       assertSuccess(result);
 
       final XCube dcube = createDerivedCube("test_drop_derived_cube", "test_drop_cube", false);
@@ -714,7 +718,8 @@ public class TestMetastoreService extends LensJerseyTest {
       // Create this cube first
       element = cubeObjectFactory.createXCube(dcube);
       result =
-        target.queryParam("sessionid", lensSessionId).request(mediaType).post(Entity.xml(element), APIResult.class);
+        target.queryParam("sessionid", lensSessionId).request(mediaType).post(
+          Entity.entity(new GenericEntity<JAXBElement<XCube>>(element){}, mediaType), APIResult.class);
       assertSuccess(result);
 
       target = target().path("metastore").path("cubes").path("test_drop_derived_cube");
@@ -745,18 +750,18 @@ public class TestMetastoreService extends LensJerseyTest {
         log.error("Resource not found.", ex);
       }
     } finally {
-      dropDatabase(DB);
-      setCurrentDatabase(prevDb);
+      dropDatabase(DB, mediaType);
+      setCurrentDatabase(prevDb, mediaType);
     }
   }
 
-  @Test
-  public void testUpdateCube() throws Exception {
+  @Test(dataProvider = "mediaTypeData")
+  public void testUpdateCube(MediaType mediaType) throws Exception {
     final String cubeName = "test_update";
-    final String DB = dbPFX + "test_update_cube";
-    String prevDb = getCurrentDatabase();
-    createDatabase(DB);
-    setCurrentDatabase(DB);
+    final String DB = dbPFX + "test_update_cube" + mediaType.getSubtype();
+    String prevDb = getCurrentDatabase(mediaType);
+    createDatabase(DB, mediaType);
+    setCurrentDatabase(DB, mediaType);
 
     try {
       final XBaseCube cube = createTestCube(cubeName);
@@ -764,7 +769,8 @@ public class TestMetastoreService extends LensJerseyTest {
       WebTarget target = target().path("metastore").path("cubes");
       JAXBElement<XCube> element = cubeObjectFactory.createXCube(cube);
       APIResult result =
-        target.queryParam("sessionid", lensSessionId).request(mediaType).post(Entity.xml(element), APIResult.class);
+        target.queryParam("sessionid", lensSessionId).request(mediaType).post(Entity.entity(
+          new GenericEntity<JAXBElement<XCube>>(element){}, mediaType), APIResult.class);
       assertSuccess(result);
 
       // Update something
@@ -788,7 +794,8 @@ public class TestMetastoreService extends LensJerseyTest {
 
       element = cubeObjectFactory.createXCube(cube);
       result = target.path(cubeName)
-        .queryParam("sessionid", lensSessionId).request(mediaType).put(Entity.xml(element), APIResult.class);
+        .queryParam("sessionid", lensSessionId).request(mediaType).put(Entity.entity(
+          new GenericEntity<JAXBElement<XCube>>(element){}, mediaType), APIResult.class);
       assertSuccess(result);
 
       JAXBElement<XCube> got =
@@ -807,7 +814,8 @@ public class TestMetastoreService extends LensJerseyTest {
       XDerivedCube dcube = createDerivedCube("test_update_derived", cubeName, true);
       element = cubeObjectFactory.createXCube(dcube);
       result =
-        target.queryParam("sessionid", lensSessionId).request(mediaType).post(Entity.xml(element), APIResult.class);
+        target.queryParam("sessionid", lensSessionId).request(mediaType).post(Entity.entity(
+          new GenericEntity<JAXBElement<XCube>>(element){}, mediaType), APIResult.class);
       assertEquals(result.getStatus(), Status.FAILED);
       assertEquals(result.getMessage(), "Problem in submitting entity: Derived cube invalid: Measures "
         + "[random_measure] and Dim Attributes [random_dim] were not present in parent cube test_update");
@@ -815,7 +823,8 @@ public class TestMetastoreService extends LensJerseyTest {
       // Create this cube first
       element = cubeObjectFactory.createXCube(dcube);
       result =
-        target.queryParam("sessionid", lensSessionId).request(mediaType).post(Entity.xml(element), APIResult.class);
+        target.queryParam("sessionid", lensSessionId).request(mediaType).post(
+          Entity.entity(new GenericEntity<JAXBElement<XCube>>(element){}, mediaType), APIResult.class);
       assertSuccess(result);
 
       // Update something
@@ -831,7 +840,8 @@ public class TestMetastoreService extends LensJerseyTest {
 
       element = cubeObjectFactory.createXCube(dcube);
       result = target.path("test_update_derived")
-        .queryParam("sessionid", lensSessionId).request(mediaType).put(Entity.xml(element), APIResult.class);
+        .queryParam("sessionid", lensSessionId).request(mediaType).put(Entity.entity(new
+          GenericEntity<JAXBElement<XCube>>(element){}, mediaType), APIResult.class);
       assertSuccess(result);
 
       got = target.path("test_update_derived")
@@ -849,19 +859,19 @@ public class TestMetastoreService extends LensJerseyTest {
       assertEquals(((AbstractCubeTable) hdcube).getProperties().get("foo.derived2"), "bar.derived2");
 
     } finally {
-      dropDatabase(DB);
-      setCurrentDatabase(prevDb);
+      dropDatabase(DB, mediaType);
+      setCurrentDatabase(prevDb, mediaType);
     }
   }
 
-  @Test
-  public void testStorage() throws Exception {
-    final String DB = dbPFX + "test_storage";
-    String prevDb = getCurrentDatabase();
-    createDatabase(DB);
-    setCurrentDatabase(DB);
+  @Test(dataProvider = "mediaTypeData")
+  public void testStorage(MediaType mediaType) throws Exception {
+    final String DB = dbPFX + "test_storage" + mediaType.getSubtype();
+    String prevDb = getCurrentDatabase(mediaType);
+    createDatabase(DB, mediaType);
+    setCurrentDatabase(DB, mediaType);
     try {
-      createStorage("store1");
+      createStorage("store1", mediaType);
       final WebTarget target = target().path("metastore").path("storages");
 
       StringList storages = target.queryParam("sessionid", lensSessionId).request(mediaType).get(StringList.class);
@@ -891,7 +901,8 @@ public class TestMetastoreService extends LensJerseyTest {
 
       APIResult result = target.path("store1")
         .queryParam("sessionid", lensSessionId).queryParam("storage", "store1")
-        .request(mediaType).put(Entity.xml(cubeObjectFactory.createXStorage(store1)), APIResult.class);
+        .request(mediaType).put(Entity.entity(new GenericEntity<JAXBElement<XStorage>>(cubeObjectFactory
+          .createXStorage(store1)){}, mediaType), APIResult.class);
       assertSuccess(result);
 
       store1 = target.path("store1").queryParam("sessionid", lensSessionId).request(mediaType).get(XStorage.class);
@@ -904,10 +915,10 @@ public class TestMetastoreService extends LensJerseyTest {
       assertEquals(JAXBUtils.mapFromXProperties(store1.getProperties()).get("prop2.name"), "prop2.value");
 
       // drop the storage
-      dropStorage("store1");
+      dropStorage("store1", mediaType);
     } finally {
-      dropDatabase(DB);
-      setCurrentDatabase(prevDb);
+      dropDatabase(DB, mediaType);
+      setCurrentDatabase(prevDb, mediaType);
     }
   }
 
@@ -982,25 +993,22 @@ public class TestMetastoreService extends LensJerseyTest {
     return dt;
   }
 
-  private XDimensionTable createDimTable(String dimTableName) throws Exception {
+  private XDimensionTable createDimTable(String dimTableName, MediaType mediaType) throws Exception {
     XDimension dimension = createDimension("testdim");
     APIResult result = target().path("metastore").path("dimensions")
       .queryParam("sessionid", lensSessionId).request(
-        mediaType).post(Entity.xml(cubeObjectFactory.createXDimension(dimension)), APIResult.class);
+        mediaType).post(Entity.entity(new GenericEntity<JAXBElement<XDimension>>(cubeObjectFactory
+        .createXDimension(dimension)) {}, mediaType), APIResult.class);
     assertSuccess(result);
     XDimensionTable dt = createDimTable("testdim", dimTableName);
     dt.getStorageTables().getStorageTable().add(createStorageTblElement("test", dimTableName, "HOURLY"));
-    final FormDataMultiPart mp = new FormDataMultiPart();
-    mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(),
-      lensSessionId, medType));
-    mp.bodyPart(new FormDataBodyPart(
-      FormDataContentDisposition.name("dimensionTable").fileName("dimtable").build(),
-      cubeObjectFactory.createXDimensionTable(dt), medType));
     result = target()
       .path("metastore")
-      .path("dimtables")
+      .path("dimtables").queryParam("sessionid", lensSessionId)
       .request(mediaType)
-      .post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE), APIResult.class);
+      .post(Entity.entity(
+        new GenericEntity<JAXBElement<XDimensionTable>>(cubeObjectFactory.createXDimensionTable(dt)) {},
+        mediaType), APIResult.class);
     assertSuccess(result);
     return dt;
   }
@@ -1054,7 +1062,7 @@ public class TestMetastoreService extends LensJerseyTest {
     return dimension;
   }
 
-  private void createdChainedDimensions() throws Exception {
+  private void createdChainedDimensions(MediaType mediaType) throws Exception {
     XDimension dimension = createDimension("testdim");
     XDimension dimension2 = createDimension("testdim2");
 
@@ -1137,25 +1145,27 @@ public class TestMetastoreService extends LensJerseyTest {
 
     // create
     APIResult result = target.queryParam("sessionid", lensSessionId).request(
-      mediaType).post(Entity.xml(cubeObjectFactory.createXDimension(dimension)), APIResult.class);
+      mediaType).post(Entity.entity(new GenericEntity<JAXBElement<XDimension>>(cubeObjectFactory
+      .createXDimension(dimension)){}, mediaType), APIResult.class);
     assertNotNull(result);
     assertSuccess(result);
 
     // create
     result = target.queryParam("sessionid", lensSessionId).request(
-      mediaType).post(Entity.xml(cubeObjectFactory.createXDimension(dimension2)), APIResult.class);
+      mediaType).post(Entity.entity(new GenericEntity<JAXBElement<XDimension>>(cubeObjectFactory
+      .createXDimension(dimension2)){}, mediaType), APIResult.class);
     assertNotNull(result);
     assertSuccess(result);
   }
 
-  @Test
-  public void testDimension() throws Exception {
-    final String DB = dbPFX + "test_dimension";
-    String prevDb = getCurrentDatabase();
-    createDatabase(DB);
-    setCurrentDatabase(DB);
+  @Test(dataProvider = "mediaTypeData")
+  public void testDimension(MediaType mediaType) throws Exception {
+    final String DB = dbPFX + "test_dimension" + mediaType.getSubtype();
+    String prevDb = getCurrentDatabase(mediaType);
+    createDatabase(DB, mediaType);
+    setCurrentDatabase(DB, mediaType);
     try {
-      createdChainedDimensions();
+      createdChainedDimensions(mediaType);
 
       final WebTarget target = target().path("metastore").path("dimensions");
 
@@ -1257,7 +1267,8 @@ public class TestMetastoreService extends LensJerseyTest {
 
       APIResult result = target.path("testdim")
         .queryParam("sessionid", lensSessionId)
-        .request(mediaType).put(Entity.xml(cubeObjectFactory.createXDimension(testDim)), APIResult.class);
+        .request(mediaType).put(Entity.entity(new GenericEntity<JAXBElement<XDimension>>(cubeObjectFactory
+          .createXDimension(testDim)){}, mediaType), APIResult.class);
       assertSuccess(result);
 
       XDimension altered = target.path("testdim").queryParam("sessionid", lensSessionId).request(mediaType).get(
@@ -1299,22 +1310,22 @@ public class TestMetastoreService extends LensJerseyTest {
         log.error("Resource not found.", ex);
       }
     } finally {
-      dropDatabase(DB);
-      setCurrentDatabase(prevDb);
+      dropDatabase(DB, mediaType);
+      setCurrentDatabase(prevDb, mediaType);
     }
   }
 
-  @Test
-  public void testCreateAndDropDimensionTable() throws Exception {
+  @Test(dataProvider = "mediaTypeData")
+  public void testCreateAndDropDimensionTable(MediaType mediaType) throws Exception {
     final String table = "test_create_dim";
-    final String DB = dbPFX + "test_dim_db";
-    String prevDb = getCurrentDatabase();
-    createDatabase(DB);
-    setCurrentDatabase(DB);
-    createStorage("test");
+    final String DB = dbPFX + "test_dim_db" + mediaType.getSubtype();
+    String prevDb = getCurrentDatabase(mediaType);
+    createDatabase(DB, mediaType);
+    setCurrentDatabase(DB, mediaType);
+    createStorage("test", mediaType);
 
     try {
-      createDimTable(table);
+      createDimTable(table, mediaType);
 
       // Drop the table now
       APIResult result =
@@ -1334,22 +1345,22 @@ public class TestMetastoreService extends LensJerseyTest {
       }
 
     } finally {
-      setCurrentDatabase(prevDb);
-      dropDatabase(DB);
+      setCurrentDatabase(prevDb, mediaType);
+      dropDatabase(DB, mediaType);
     }
   }
 
-  @Test
-  public void testGetAndUpdateDimensionTable() throws Exception {
+  @Test(dataProvider = "mediaTypeData")
+  public void testGetAndUpdateDimensionTable(MediaType mediaType) throws Exception {
     final String table = "test_get_dim";
-    final String DB = dbPFX + "test_get_dim_db";
-    String prevDb = getCurrentDatabase();
-    createDatabase(DB);
-    setCurrentDatabase(DB);
-    createStorage("test");
+    final String DB = dbPFX + "test_get_dim_db" + mediaType.getSubtype();
+    String prevDb = getCurrentDatabase(mediaType);
+    createDatabase(DB, mediaType);
+    setCurrentDatabase(DB, mediaType);
+    createStorage("test", mediaType);
 
     try {
-      XDimensionTable dt1 = createDimTable(table);
+      XDimensionTable dt1 = createDimTable(table, mediaType);
 
       JAXBElement<XDimensionTable> dtElement = target().path("metastore/dimtables").path(table)
         .queryParam("sessionid", lensSessionId).request(mediaType)
@@ -1379,7 +1390,9 @@ public class TestMetastoreService extends LensJerseyTest {
       APIResult result = target().path("metastore/dimtables")
         .path(table)
         .queryParam("sessionid", lensSessionId).request(mediaType)
-        .put(Entity.xml(cubeObjectFactory.createXDimensionTable(dt2)), APIResult.class);
+        .put(Entity.entity(new GenericEntity<JAXBElement<XDimensionTable>>(cubeObjectFactory
+            .createXDimensionTable(dt2)){}, mediaType),
+          APIResult.class);
       assertSuccess(result);
 
       // Get the updated table
@@ -1407,7 +1420,7 @@ public class TestMetastoreService extends LensJerseyTest {
       dt3.getStorageTables().getStorageTable().get(0).getTableDesc().setInputFormat(
         SequenceFileInputFormat.class.getCanonicalName());
       // add one more storage table
-      createStorage("testAlterDimStorage");
+      createStorage("testAlterDimStorage", mediaType);
       XStorageTableElement newStorage = createStorageTblElement("testAlterDimStorage", dt3.getTableName(),
         (String[]) null);
       newStorage.getTableDesc().setFieldDelimiter(":");
@@ -1416,7 +1429,9 @@ public class TestMetastoreService extends LensJerseyTest {
       result = target().path("metastore/dimtables")
         .path(table)
         .queryParam("sessionid", lensSessionId).request(mediaType)
-        .put(Entity.xml(cubeObjectFactory.createXDimensionTable(dt3)), APIResult.class);
+        .put(Entity.entity(new GenericEntity<JAXBElement<XDimensionTable>>(cubeObjectFactory
+            .createXDimensionTable(dt3)){}, mediaType),
+          APIResult.class);
       assertSuccess(result);
 
       // Get the updated table
@@ -1436,7 +1451,7 @@ public class TestMetastoreService extends LensJerseyTest {
       // get native table and validate altered property
       XNativeTable newdNativeTable = nativeTarget.path("testalterdimstorage_" + table)
         .queryParam("sessionid", lensSessionId)
-        .request(mediaType).get(XNativeTable.class);
+        .request(mediaType).get(new GenericType<JAXBElement<XNativeTable>>() {}).getValue();
       assertEquals(newdNativeTable.getStorageDescriptor().getFieldDelimiter(), ":");
       XNativeTable alteredNativeTable = nativeTarget.path("test_" + table).queryParam("sessionid", lensSessionId)
         .request(mediaType).get(XNativeTable.class);
@@ -1449,22 +1464,22 @@ public class TestMetastoreService extends LensJerseyTest {
           .queryParam("sessionid", lensSessionId).request(mediaType).delete(APIResult.class);
       assertSuccess(result);
     } finally {
-      setCurrentDatabase(prevDb);
-      dropDatabase(DB);
+      setCurrentDatabase(prevDb, mediaType);
+      dropDatabase(DB, mediaType);
     }
   }
 
-  @Test
-  public void testGetDimensionStorages() throws Exception {
+  @Test(dataProvider = "mediaTypeData")
+  public void testGetDimensionStorages(MediaType mediaType) throws Exception {
     final String table = "test_get_storage";
     final String DB = dbPFX + "test_get_dim_storage_db";
-    String prevDb = getCurrentDatabase();
-    createDatabase(DB);
-    setCurrentDatabase(DB);
-    createStorage("test");
+    String prevDb = getCurrentDatabase(mediaType);
+    createDatabase(DB, mediaType);
+    setCurrentDatabase(DB, mediaType);
+    createStorage("test", mediaType);
 
     try {
-      createDimTable(table);
+      createDimTable(table, mediaType);
       StringList storages = target().path("metastore").path("dimtables")
         .path(table).path("storages")
         .queryParam("sessionid", lensSessionId).request(mediaType)
@@ -1472,28 +1487,30 @@ public class TestMetastoreService extends LensJerseyTest {
       assertEquals(storages.getElements().size(), 1);
       assertTrue(storages.getElements().contains("test"));
     } finally {
-      setCurrentDatabase(prevDb);
-      dropDatabase(DB);
+      setCurrentDatabase(prevDb, mediaType);
+      dropDatabase(DB, mediaType);
     }
   }
 
-  @Test
-  public void testAddAndDropDimensionStorages() throws Exception {
+  @Test(dataProvider = "mediaTypeData")
+  public void testAddAndDropDimensionStorages(MediaType mediaType) throws Exception {
     final String table = "test_add_drop_storage";
-    final String DB = dbPFX + "test_add_drop_dim_storage_db";
-    createDatabase(DB);
-    String prevDb = getCurrentDatabase();
-    setCurrentDatabase(DB);
-    createStorage("test");
-    createStorage("test2");
-    createStorage("test3");
+    final String DB = dbPFX + "test_add_drop_dim_storage_db" + mediaType.getSubtype();
+    createDatabase(DB, mediaType);
+    String prevDb = getCurrentDatabase(mediaType);
+    setCurrentDatabase(DB, mediaType);
+    createStorage("test", mediaType);
+    createStorage("test2", mediaType);
+    createStorage("test3", mediaType);
     try {
-      createDimTable(table);
+      createDimTable(table, mediaType);
 
       XStorageTableElement sTbl = createStorageTblElement("test2", table, "DAILY");
       APIResult result = target().path("metastore/dimtables").path(table).path("/storages")
         .queryParam("sessionid", lensSessionId).request(mediaType)
-        .post(Entity.xml(cubeObjectFactory.createXStorageTableElement(sTbl)), APIResult.class);
+        .post(Entity.entity(new GenericEntity<JAXBElement<XStorageTableElement>>(cubeObjectFactory
+          .createXStorageTableElement(sTbl)) {
+        }, mediaType), APIResult.class);
       assertSuccess(result);
 
       StringList storages = target().path("metastore").path("dimtables")
@@ -1501,8 +1518,8 @@ public class TestMetastoreService extends LensJerseyTest {
         .queryParam("sessionid", lensSessionId).request(mediaType)
         .get(StringList.class);
       assertEquals(storages.getElements().size(), 2);
-      assertTrue(storages.getElements().contains("test"));
-      assertTrue(storages.getElements().contains("test2"));
+      assertTrue(storages.getElements().contains("test"), "Got " + storages.getElements().toString());
+      assertTrue(storages.getElements().contains("test2"), "Got " + storages.getElements().toString());
 
       // Check get table also contains the storage
       JAXBElement<XDimensionTable> dt = target().path("metastore/dimtables").path(table)
@@ -1542,7 +1559,8 @@ public class TestMetastoreService extends LensJerseyTest {
       sTbl = createStorageTblElement("test3", table, (String[]) null);
       result = target().path("metastore/dimtables").path(table).path("/storages")
         .queryParam("sessionid", lensSessionId).request(mediaType)
-        .post(Entity.xml(cubeObjectFactory.createXStorageTableElement(sTbl)), APIResult.class);
+        .post(Entity.entity(new GenericEntity<JAXBElement<XStorageTableElement>>(cubeObjectFactory
+          .createXStorageTableElement(sTbl)){}, mediaType), APIResult.class);
       assertSuccess(result);
 
       storages = target().path("metastore").path("dimtables")
@@ -1563,27 +1581,28 @@ public class TestMetastoreService extends LensJerseyTest {
       assertTrue(cdim.getStorages().contains("test3"));
       assertNull(cdim.getSnapshotDumpPeriods().get("test3"));
     } finally {
-      setCurrentDatabase(prevDb);
-      dropDatabase(DB);
+      setCurrentDatabase(prevDb, mediaType);
+      dropDatabase(DB, mediaType);
     }
   }
 
-  @Test
-  public void testAddDropAllDimStorages() throws Exception {
+  @Test(dataProvider = "mediaTypeData")
+  public void testAddDropAllDimStorages(MediaType mediaType) throws Exception {
     final String table = "testAddDropAllDimStorages";
-    final String DB = dbPFX + "testAddDropAllDimStorages_db";
-    String prevDb = getCurrentDatabase();
-    createDatabase(DB);
-    setCurrentDatabase(DB);
-    createStorage("test");
-    createStorage("test2");
+    final String DB = dbPFX + "testAddDropAllDimStorages_db" + mediaType.getSubtype();
+    String prevDb = getCurrentDatabase(mediaType);
+    createDatabase(DB, mediaType);
+    setCurrentDatabase(DB, mediaType);
+    createStorage("test", mediaType);
+    createStorage("test2", mediaType);
 
     try {
-      createDimTable(table);
+      createDimTable(table, mediaType);
       XStorageTableElement sTbl = createStorageTblElement("test2", table, "DAILY");
       APIResult result = target().path("metastore/dimtables").path(table).path("/storages")
         .queryParam("sessionid", lensSessionId).request(mediaType)
-        .post(Entity.xml(cubeObjectFactory.createXStorageTableElement(sTbl)), APIResult.class);
+        .post(Entity.entity(new GenericEntity<JAXBElement<XStorageTableElement>>(cubeObjectFactory
+          .createXStorageTableElement(sTbl)){}, mediaType), APIResult.class);
       assertSuccess(result);
 
       result = target().path("metastore/dimtables/").path(table).path("storages")
@@ -1591,7 +1610,6 @@ public class TestMetastoreService extends LensJerseyTest {
         .delete(APIResult.class);
       assertSuccess(result);
 
-
       JAXBElement<XDimensionTable> dt = target().path("metastore/dimtables").path(table)
         .queryParam("sessionid", lensSessionId).request(mediaType)
         .get(new GenericType<JAXBElement<XDimensionTable>>() {});
@@ -1600,8 +1618,8 @@ public class TestMetastoreService extends LensJerseyTest {
       assertTrue(cdim.getStorages().isEmpty());
       assertTrue(cdim.getSnapshotDumpPeriods().isEmpty());
     } finally {
-      setCurrentDatabase(prevDb);
-      dropDatabase(DB);
+      setCurrentDatabase(prevDb, mediaType);
+      dropDatabase(DB, mediaType);
     }
   }
 
@@ -1636,31 +1654,27 @@ public class TestMetastoreService extends LensJerseyTest {
     return f;
   }
 
-  @Test
-  public void testCreateFactTable() throws Exception {
+  @Test(dataProvider = "mediaTypeData")
+  public void testCreateFactTable(MediaType mediaType) throws Exception {
     final String table = "testCreateFactTable";
-    final String DB = dbPFX + "testCreateFactTable_DB";
-    String prevDb = getCurrentDatabase();
-    createDatabase(DB);
-    setCurrentDatabase(DB);
-    createStorage("S1");
-    createStorage("S2");
+    final String DB = dbPFX + "testCreateFactTable_DB" + mediaType.getSubtype();
+    String prevDb = getCurrentDatabase(mediaType);
+    createDatabase(DB, mediaType);
+    setCurrentDatabase(DB, mediaType);
+    createStorage("S1", mediaType);
+    createStorage("S2", mediaType);
     try {
 
       XFactTable f = createFactTable(table);
       f.getStorageTables().getStorageTable().add(createStorageTblElement("S1", table, "HOURLY"));
       f.getStorageTables().getStorageTable().add(createStorageTblElement("S2", table, "DAILY"));
-      final FormDataMultiPart mp = new FormDataMultiPart();
-      mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(),
-        lensSessionId, medType));
-      mp.bodyPart(new FormDataBodyPart(
-        FormDataContentDisposition.name("fact").fileName("fact").build(),
-        cubeObjectFactory.createXFactTable(f), medType));
       APIResult result = target()
         .path("metastore")
-        .path("facts")
+        .path("facts").queryParam("sessionid", lensSessionId)
         .request(mediaType)
-        .post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE), APIResult.class);
+        .post(Entity.entity(
+          new GenericEntity<JAXBElement<XFactTable>>(cubeObjectFactory.createXFactTable(f)){}, mediaType),
+          APIResult.class);
       assertSuccess(result);
 
       // Get all fact names, this should contain the fact table
@@ -1712,37 +1726,33 @@ public class TestMetastoreService extends LensJerseyTest {
         // PASS
       }
     } finally {
-      setCurrentDatabase(prevDb);
-      dropDatabase(DB);
+      setCurrentDatabase(prevDb, mediaType);
+      dropDatabase(DB, mediaType);
     }
   }
 
-  @Test
-  public void testUpdateFactTable() throws Exception {
+  @Test(dataProvider = "mediaTypeData")
+  public void testUpdateFactTable(MediaType mediaType) throws Exception {
     final String table = "testUpdateFactTable";
-    final String DB = dbPFX + "testUpdateFactTable_DB";
-    String prevDb = getCurrentDatabase();
-    createDatabase(DB);
-    setCurrentDatabase(DB);
-    createStorage("S1");
-    createStorage("S2");
-    createStorage("S3");
+    final String DB = dbPFX + "testUpdateFactTable_DB" + mediaType.getSubtype();
+    String prevDb = getCurrentDatabase(mediaType);
+    createDatabase(DB, mediaType);
+    setCurrentDatabase(DB, mediaType);
+    createStorage("S1", mediaType);
+    createStorage("S2", mediaType);
+    createStorage("S3", mediaType);
     try {
 
       XFactTable f = createFactTable(table);
       f.getStorageTables().getStorageTable().add(createStorageTblElement("S1", table, "HOURLY"));
       f.getStorageTables().getStorageTable().add(createStorageTblElement("S2", table, "DAILY"));
-      final FormDataMultiPart mp = new FormDataMultiPart();
-      mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(),
-        lensSessionId, medType));
-      mp.bodyPart(new FormDataBodyPart(
-        FormDataContentDisposition.name("fact").fileName("fact").build(),
-        cubeObjectFactory.createXFactTable(f), medType));
       APIResult result = target()
         .path("metastore")
-        .path("facts")
+        .path("facts").queryParam("sessionid", lensSessionId)
         .request(mediaType)
-        .post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE), APIResult.class);
+        .post(Entity.entity(
+            new GenericEntity<JAXBElement<XFactTable>>(cubeObjectFactory.createXFactTable(f)){}, mediaType),
+          APIResult.class);
       assertSuccess(result);
 
       // Get the created table
@@ -1768,7 +1778,9 @@ public class TestMetastoreService extends LensJerseyTest {
       // Update
       result = target().path("metastore").path("facts").path(table)
         .queryParam("sessionid", lensSessionId).request(mediaType)
-        .put(Entity.xml(cubeObjectFactory.createXFactTable(update)), APIResult.class);
+        .put(Entity.entity(new GenericEntity<JAXBElement<XFactTable>>(cubeObjectFactory.createXFactTable(update)){},
+            mediaType),
+          APIResult.class);
       assertSuccess(result);
 
       // Get the updated table
@@ -1801,7 +1813,7 @@ public class TestMetastoreService extends LensJerseyTest {
 
       // get native table and validate altered property
       XNativeTable alteredNativeTable = nativeTarget.path("s1_" + table).queryParam("sessionid", lensSessionId)
-        .request(mediaType).get(XNativeTable.class);
+        .request(mediaType).get(new GenericType<JAXBElement<XNativeTable>>() {}).getValue();
       assertEquals(alteredNativeTable.getStorageDescriptor().getFieldDelimiter(), "#");
 
       // Finally, drop the fact table
@@ -1823,37 +1835,33 @@ public class TestMetastoreService extends LensJerseyTest {
         // PASS
       }
     } finally {
-      setCurrentDatabase(prevDb);
-      dropDatabase(DB);
+      setCurrentDatabase(prevDb, mediaType);
+      dropDatabase(DB, mediaType);
     }
   }
 
-  @Test
-  public void testFactStorages() throws Exception {
+  @Test(dataProvider = "mediaTypeData")
+  public void testFactStorages(MediaType mediaType) throws Exception {
     final String table = "testFactStorages";
-    final String DB = dbPFX + "testFactStorages_DB";
-    String prevDb = getCurrentDatabase();
-    createDatabase(DB);
-    setCurrentDatabase(DB);
-    createStorage("S1");
-    createStorage("S2");
-    createStorage("S3");
+    final String DB = dbPFX + "testFactStorages_DB" + mediaType.getSubtype();
+    String prevDb = getCurrentDatabase(mediaType);
+    createDatabase(DB, mediaType);
+    setCurrentDatabase(DB, mediaType);
+    createStorage("S1", mediaType);
+    createStorage("S2", mediaType);
+    createStorage("S3", mediaType);
 
     try {
       XFactTable f = createFactTable(table);
       f.getStorageTables().getStorageTable().add(createStorageTblElement("S1", table, "HOURLY"));
       f.getStorageTables().getStorageTable().add(createStorageTblElement("S2", table, "DAILY"));
-      final FormDataMultiPart mp = new FormDataMultiPart();
-      mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(),
-        lensSessionId, medType));
-      mp.bodyPart(new FormDataBodyPart(
-        FormDataContentDisposition.name("fact").fileName("fact").build(),
-        cubeObjectFactory.createXFactTable(f), medType));
       APIResult result = target()
         .path("metastore")
-        .path("facts")
+        .path("facts").queryParam("sessionid", lensSessionId)
         .request(mediaType)
-        .post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE), APIResult.class);
+        .post(Entity.entity(
+            new GenericEntity<JAXBElement<XFactTable>>(cubeObjectFactory.createXFactTable(f)){}, mediaType),
+          APIResult.class);
       assertSuccess(result);
 
       // Test get storages
@@ -1866,7 +1874,8 @@ public class TestMetastoreService extends LensJerseyTest {
       XStorageTableElement sTbl = createStorageTblElement("S3", table, "HOURLY", "DAILY", "MONTHLY");
       result = target().path("metastore/facts").path(table).path("storages")
         .queryParam("sessionid", lensSessionId).request(mediaType)
-        .post(Entity.xml(cubeObjectFactory.createXStorageTableElement(sTbl)), APIResult.class);
+        .post(Entity.entity(new GenericEntity<JAXBElement<XStorageTableElement>>(cubeObjectFactory
+          .createXStorageTableElement(sTbl)){}, mediaType), APIResult.class);
       assertSuccess(result);
 
       // Get the fact storage
@@ -1881,7 +1890,8 @@ public class TestMetastoreService extends LensJerseyTest {
 
       JAXBElement<XFactTable> gotFactElement = target().path("metastore/facts").path(table)
         .queryParam("sessionid", lensSessionId).request(mediaType)
-        .get(new GenericType<JAXBElement<XFactTable>>() {});
+        .get(new GenericType<JAXBElement<XFactTable>>() {
+        });
       XFactTable gotFact = gotFactElement.getValue();
       CubeFactTable ucf = JAXBUtils.cubeFactFromFactTable(gotFact);
 
@@ -1900,8 +1910,8 @@ public class TestMetastoreService extends LensJerseyTest {
       assertEquals(storageList.getElements().size(), 2);
       assertFalse(storageList.getElements().contains("S3"));
     } finally {
-      setCurrentDatabase(prevDb);
-      dropDatabase(DB);
+      setCurrentDatabase(prevDb, mediaType);
+      dropDatabase(DB, mediaType);
     }
   }
 
@@ -1937,28 +1947,29 @@ public class TestMetastoreService extends LensJerseyTest {
     return xp;
   }
 
-  @Test
-  public void testLatestDateWithInputTimeDimAbsentFromAtleastOneFactPartition() throws Exception {
+  @Test(dataProvider = "mediaTypeData")
+  public void testLatestDateWithInputTimeDimAbsentFromAtleastOneFactPartition(MediaType mediaType) throws Exception {
 
     final String dbName = dbPFX + getUniqueDbName();
-    String prevDb = getCurrentDatabase();
+    String prevDb = getCurrentDatabase(mediaType);
 
     try {
 
       // Begin: Setup
-      createDatabase(dbName);
-      setCurrentDatabase(dbName);
+      createDatabase(dbName, mediaType);
+      setCurrentDatabase(dbName, mediaType);
 
       String[] storages = {"S1"};
       for (String storage : storages) {
-        createStorage(storage);
+        createStorage(storage, mediaType);
       }
 
       // Create a cube with name testCube
       final String cubeName = "testCube";
       final XCube cube = createTestCube(cubeName);
       APIResult result = target().path("metastore").path("cubes").queryParam("sessionid", lensSessionId)
-        .request(mediaType).post(Entity.xml(cubeObjectFactory.createXCube(cube)), APIResult.class);
+        .request(mediaType).post(Entity.entity(new GenericEntity<JAXBElement<XCube>>(
+          cubeObjectFactory.createXCube(cube)){}, mediaType), APIResult.class);
       assertSuccess(result);
 
       // Create two facts and fact storage tables with one of the facts
@@ -1975,8 +1986,8 @@ public class TestMetastoreService extends LensJerseyTest {
       String fact2TableName = "fact2";
       String[] fact2TimePartColNames = {timeDimensionPresentInPartitionOfAllFacts};
 
-      createTestFactAndStorageTable(cubeName, storages, fact1TableName, fact1TimePartColNames);
-      createTestFactAndStorageTable(cubeName, storages, fact2TableName, fact2TimePartColNames);
+      createTestFactAndStorageTable(cubeName, storages, fact1TableName, fact1TimePartColNames, mediaType);
+      createTestFactAndStorageTable(cubeName, storages, fact2TableName, fact2TimePartColNames, mediaType);
 
       // Add partition to fact storage table of the fact whose partition has all time dimension
 
@@ -1998,7 +2009,9 @@ public class TestMetastoreService extends LensJerseyTest {
       APIResult partAddResult = target().path("metastore/facts/").path(fact1TableName)
         .path("storages/" + storages[0] + "/partition")
         .queryParam("sessionid", lensSessionId).request(mediaType)
-        .post(Entity.xml(cubeObjectFactory.createXPartition(xp)), APIResult.class);
+        .post(Entity.entity(new GenericEntity<JAXBElement<XPartition>>(cubeObjectFactory.createXPartition(xp)){},
+            mediaType),
+          APIResult.class);
       assertSuccess(partAddResult);
 
       // End: Setup
@@ -2016,44 +2029,42 @@ public class TestMetastoreService extends LensJerseyTest {
 
     } finally {
       // Cleanup
-      setCurrentDatabase(prevDb);
-      dropDatabase(dbName);
+      setCurrentDatabase(prevDb, mediaType);
+      dropDatabase(dbName, mediaType);
     }
   }
 
 
   @SuppressWarnings("deprecation")
-  @Test
-  public void testFactStoragePartitions() throws Exception {
+  @Test(dataProvider = "mediaTypeData")
+  public void testFactStoragePartitions(MediaType mediaType) throws Exception {
     final String table = "testFactStoragePartitions";
-    final String DB = dbPFX + "testFactStoragePartitions_DB";
-    String prevDb = getCurrentDatabase();
-    createDatabase(DB);
-    setCurrentDatabase(DB);
-    createStorage("S1");
-    createStorage("S2");
+    final String DB = dbPFX + "testFactStoragePartitions_DB" + mediaType.getSubtype();
+    String prevDb = getCurrentDatabase(mediaType);
+    createDatabase(DB, mediaType);
+    setCurrentDatabase(DB, mediaType);
+    createStorage("S1", mediaType);
+    createStorage("S2", mediaType);
 
     try {
 
       final XCube cube = createTestCube("testCube");
       target().path("metastore").path("cubes").queryParam("sessionid", lensSessionId).request(mediaType)
-        .post(Entity.xml(cubeObjectFactory.createXCube(cube)), APIResult.class);
+        .post(Entity.entity(new GenericEntity<JAXBElement<XCube>>(cubeObjectFactory.createXCube(cube)) {
+          }, mediaType),
+          APIResult.class);
 
       XFactTable f = createFactTable(table);
       f.getStorageTables().getStorageTable().add(createStorageTblElement("S1", table, "HOURLY"));
       f.getStorageTables().getStorageTable().add(createStorageTblElement("S2", table, "DAILY"));
       f.getStorageTables().getStorageTable().add(createStorageTblElement("S2", table, "HOURLY"));
-      final FormDataMultiPart mp = new FormDataMultiPart();
-      mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(),
-        lensSessionId, medType));
-      mp.bodyPart(new FormDataBodyPart(
-        FormDataContentDisposition.name("fact").fileName("fact").build(),
-        cubeObjectFactory.createXFactTable(f), medType));
       APIResult result = target()
         .path("metastore")
-        .path("facts")
+        .path("facts").queryParam("sessionid", lensSessionId)
         .request(mediaType)
-        .post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE), APIResult.class);
+        .post(Entity.entity(
+            new GenericEntity<JAXBElement<XFactTable>>(cubeObjectFactory.createXFactTable(f)){}, mediaType),
+          APIResult.class);
       assertSuccess(result);
 
       APIResult partAddResult;
@@ -2070,7 +2081,8 @@ public class TestMetastoreService extends LensJerseyTest {
         .add(createTimePartSpecElement(partDate, "non_existant_time_part"));
       partAddResult = target().path("metastore/facts/").path(table).path("storages/S2/partition")
         .queryParam("sessionid", lensSessionId).request(mediaType)
-        .post(Entity.xml(cubeObjectFactory.createXPartition(xp2)), APIResult.class);
+        .post(Entity.entity(new GenericEntity<JAXBElement<XPartition>>(cubeObjectFactory.createXPartition(xp2)){},
+          mediaType), APIResult.class);
       assertEquals(partAddResult.getStatus(), Status.FAILED);
       assertEquals(partAddResult.getMessage(), "No timeline found for fact=testFactStoragePartitions, storage=S2, "
         + "update period=HOURLY, partition column=non_existant_time_part.");
@@ -2078,25 +2090,29 @@ public class TestMetastoreService extends LensJerseyTest {
       XPartition xp = createPartition(table, partDate);
       partAddResult = target().path("metastore/facts/").path(table).path("storages/S2/partition")
         .queryParam("sessionid", lensSessionId).request(mediaType)
-        .post(Entity.xml(cubeObjectFactory.createXPartition(xp)), APIResult.class);
+        .post(Entity.entity(new GenericEntity<JAXBElement<XPartition>>(cubeObjectFactory.createXPartition(xp)){},
+          mediaType), APIResult.class);
       assertSuccess(partAddResult);
 
       // add same should fail
       partAddResult = target().path("metastore/facts/").path(table).path("storages/S2/partition")
         .queryParam("sessionid", lensSessionId).request(mediaType)
-        .post(Entity.xml(cubeObjectFactory.createXPartition(xp)), APIResult.class);
+        .post(Entity.entity(new GenericEntity<JAXBElement<XPartition>>(cubeObjectFactory.createXPartition(xp)){},
+          mediaType), APIResult.class);
       assertEquals(partAddResult.getStatus(), Status.FAILED);
 
       xp.setLocation(xp.getLocation() + "/a/b/c");
       APIResult partUpdateResult = target().path("metastore/facts/").path(table).path("storages/S2/partition")
         .queryParam("sessionid", lensSessionId).request(mediaType)
-        .put(Entity.xml(cubeObjectFactory.createXPartition(xp)), APIResult.class);
+        .put(Entity.entity(new GenericEntity<JAXBElement<XPartition>>(cubeObjectFactory.createXPartition(xp)){},
+          mediaType), APIResult.class);
       assertSuccess(partUpdateResult);
 
       JAXBElement<XPartitionList> partitionsElement = target().path("metastore/facts").path(table)
         .path("storages/S2/partitions")
         .queryParam("sessionid", lensSessionId).request(mediaType)
-        .get(new GenericType<JAXBElement<XPartitionList>>() {});
+        .get(new GenericType<JAXBElement<XPartitionList>>() {
+        });
 
       XPartitionList partitions = partitionsElement.getValue();
       assertNotNull(partitions);
@@ -2125,7 +2141,8 @@ public class TestMetastoreService extends LensJerseyTest {
       parts.getPartition().add(createPartition(table, DateUtils.addHours(partDate, 1)));
       partAddResult = target().path("metastore/facts/").path(table).path("storages/S2/partitions")
         .queryParam("sessionid", lensSessionId).request(mediaType)
-        .post(Entity.xml(cubeObjectFactory.createXPartitionList(parts)), APIResult.class);
+        .post(Entity.entity(new GenericEntity<JAXBElement<XPartitionList>>(
+          cubeObjectFactory.createXPartitionList(parts)){}, mediaType), APIResult.class);
       assertEquals(partAddResult.getStatus(), Status.PARTIAL);
 
       // Drop the partitions
@@ -2138,7 +2155,8 @@ public class TestMetastoreService extends LensJerseyTest {
       // Verify partition was dropped
       partitionsElement = target().path("metastore/facts").path(table).path("storages/S2/partitions")
         .queryParam("sessionid", lensSessionId).request(mediaType)
-        .get(new GenericType<JAXBElement<XPartitionList>>() {});
+        .get(new GenericType<JAXBElement<XPartitionList>>() {
+        });
 
       partitions = partitionsElement.getValue();
       assertNotNull(partitions);
@@ -2152,20 +2170,29 @@ public class TestMetastoreService extends LensJerseyTest {
       // Try adding in batch, but to a wrong endpoint
       resp = target().path("metastore/facts/").path(table).path("storages/S2/partition")
         .queryParam("sessionid", lensSessionId).request(mediaType)
-        .post(Entity.xml(cubeObjectFactory.createXPartitionList(toXPartitionList(xp))));
-      assertXMLError(resp);
+        .post(Entity.entity(new GenericEntity<JAXBElement<XPartitionList>>(cubeObjectFactory
+          .createXPartitionList(toXPartitionList(xp))) {
+        }, mediaType));
+      assertXMLError(resp, mediaType);
 
 
       // Try adding in batch, but provide just an XPartition
       resp = target().path("metastore/facts/").path(table).path("storages/S2/partitions")
         .queryParam("sessionid", lensSessionId).request(mediaType)
-        .post(Entity.xml(cubeObjectFactory.createXPartition(xp)));
-      assertXMLError(resp);
+        .post(Entity.entity(new GenericEntity<JAXBElement<XPartition>>(cubeObjectFactory.createXPartition(xp)){},
+          mediaType));
+      if (mediaType.equals(MediaType.APPLICATION_XML_TYPE)) {
+        assertXMLError(resp, mediaType);
+      } else {
+        // for json input, XPartitionList is getting created
+        assertEquals(resp.getStatus(), 200);
+      }
 
       // Try adding in batch with one partition being wrong wrt partition column.
       partAddResult = target().path("metastore/facts/").path(table).path("storages/S2/partitions")
         .queryParam("sessionid", lensSessionId).request(mediaType)
-        .post(Entity.xml(cubeObjectFactory.createXPartitionList(toXPartitionList(xp2))),
+        .post(Entity.entity(new GenericEntity<JAXBElement<XPartitionList>>(cubeObjectFactory
+          .createXPartitionList(toXPartitionList(xp2))){}, mediaType),
           APIResult.class);
       assertEquals(partAddResult.getStatus(), Status.FAILED);
       assertEquals(partAddResult.getMessage(), "No timeline found for fact=testFactStoragePartitions, storage=S2, "
@@ -2173,7 +2200,9 @@ public class TestMetastoreService extends LensJerseyTest {
       // Add in batch
       partAddResult = target().path("metastore/facts/").path(table).path("storages/S2/partitions")
         .queryParam("sessionid", lensSessionId).request(mediaType)
-        .post(Entity.xml(cubeObjectFactory.createXPartitionList(toXPartitionList(xp))),
+        .post(Entity.entity(new GenericEntity<JAXBElement<XPartitionList>>(cubeObjectFactory
+            .createXPartitionList(toXPartitionList(xp))) {
+          }, mediaType),
           APIResult.class);
       assertSuccess(partAddResult);
 
@@ -2203,24 +2232,24 @@ public class TestMetastoreService extends LensJerseyTest {
       assertNotNull(partitions);
       assertEquals(partitions.getPartition().size(), 0);
     } finally {
-      setCurrentDatabase(prevDb);
-      dropDatabase(DB);
+      setCurrentDatabase(prevDb, mediaType);
+      dropDatabase(DB, mediaType);
     }
   }
 
-  @Test
-  public void testDimStoragePartitions() throws Exception {
+  @Test(dataProvider = "mediaTypeData")
+  public void testDimStoragePartitions(MediaType mediaType) throws Exception {
     final String table = "testDimStoragePartitions";
-    final String DB = dbPFX + "testDimStoragePartitions_DB";
-    String prevDb = getCurrentDatabase();
-    createDatabase(DB);
-    setCurrentDatabase(DB);
-    createStorage("S1");
-    createStorage("S2");
-    createStorage("test");
+    final String DB = dbPFX + "testDimStoragePartitions_DB" + mediaType.getSubtype();
+    String prevDb = getCurrentDatabase(mediaType);
+    createDatabase(DB, mediaType);
+    setCurrentDatabase(DB, mediaType);
+    createStorage("S1", mediaType);
+    createStorage("S2", mediaType);
+    createStorage("test", mediaType);
 
     try {
-      createDimTable(table);
+      createDimTable(table, mediaType);
       APIResult partAddResult;
       // Add null partition
       Response resp = target().path("metastore/dimtables/").path(table).path("storages/test/partition")
@@ -2233,20 +2262,23 @@ public class TestMetastoreService extends LensJerseyTest {
       XPartition xp = createPartition(table, partDate);
       partAddResult = target().path("metastore/dimtables/").path(table).path("storages/test/partition")
         .queryParam("sessionid", lensSessionId).request(mediaType)
-        .post(Entity.xml(cubeObjectFactory.createXPartition(xp)), APIResult.class);
+        .post(Entity.entity(new GenericEntity<JAXBElement<XPartition>>(cubeObjectFactory.createXPartition(xp)){},
+          mediaType), APIResult.class);
       assertSuccess(partAddResult);
 
       // create call for same
       partAddResult = target().path("metastore/dimtables/").path(table).path("storages/test/partition")
         .queryParam("sessionid", lensSessionId).request(mediaType)
-        .post(Entity.xml(cubeObjectFactory.createXPartition(xp)), APIResult.class);
+        .post(Entity.entity(new GenericEntity<JAXBElement<XPartition>>(cubeObjectFactory.createXPartition(xp)){},
+          mediaType), APIResult.class);
       assertEquals(partAddResult.getStatus(), Status.FAILED);
 
 
       xp.setLocation(xp.getLocation() + "/a/b/c");
       APIResult partUpdateResult = target().path("metastore/dimtables/").path(table).path("storages/test/partition")
         .queryParam("sessionid", lensSessionId).request(mediaType)
-        .put(Entity.xml(cubeObjectFactory.createXPartition(xp)), APIResult.class);
+        .put(Entity.entity(new GenericEntity<JAXBElement<XPartition>>(cubeObjectFactory.createXPartition(xp)){},
+          mediaType), APIResult.class);
       assertSuccess(partUpdateResult);
 
       JAXBElement<XPartitionList> partitionsElement = target().path("metastore/dimtables").path(table)
@@ -2295,7 +2327,8 @@ public class TestMetastoreService extends LensJerseyTest {
       parts.getPartition().add(xp2);
       partAddResult = target().path("metastore/dimtables/").path(table).path("storages/test/partitions")
         .queryParam("sessionid", lensSessionId).request(mediaType)
-        .post(Entity.xml(cubeObjectFactory.createXPartitionList(parts)), APIResult.class);
+        .post(Entity.entity(new GenericEntity<JAXBElement<XPartitionList>>(
+          cubeObjectFactory.createXPartitionList(parts)){}, mediaType), APIResult.class);
       assertEquals(partAddResult.getStatus(), Status.PARTIAL);
 
       // Drop the partitions
@@ -2323,19 +2356,29 @@ public class TestMetastoreService extends LensJerseyTest {
       // Try adding in batch, but to a wrong endpoint
       resp = target().path("metastore/dimtables/").path(table).path("storages/test/partition")
         .queryParam("sessionid", lensSessionId).request(mediaType)
-        .post(Entity.xml(cubeObjectFactory.createXPartitionList(toXPartitionList(xp))));
-      assertXMLError(resp);
+        .post(Entity.entity(
+          new GenericEntity<JAXBElement<XPartitionList>>(cubeObjectFactory.createXPartitionList(toXPartitionList(xp)))
+          {}, mediaType));
+      assertXMLError(resp, mediaType);
 
       // Try adding in batch, but provide just an XPartition
       resp = target().path("metastore/dimtables/").path(table).path("storages/test/partitions")
         .queryParam("sessionid", lensSessionId).request(mediaType)
-        .post(Entity.xml(cubeObjectFactory.createXPartition(xp)));
-      assertXMLError(resp);
-
+        .post(Entity.entity(new GenericEntity<JAXBElement<XPartition>>(cubeObjectFactory.createXPartition(xp)){},
+          mediaType));
+      if (mediaType.equals(MediaType.APPLICATION_XML_TYPE)) {
+        assertXMLError(resp, mediaType);
+      } else {
+        // for json input, XPartitionList is getting created
+        assertEquals(resp.getStatus(), 200);
+      }
       // Add in batch
       partAddResult = target().path("metastore/dimtables/").path(table).path("storages/test/partitions")
         .queryParam("sessionid", lensSessionId).request(mediaType)
-        .post(Entity.xml(cubeObjectFactory.createXPartitionList(toXPartitionList(xp))),
+        .post(Entity.entity(
+          new GenericEntity<JAXBElement<XPartitionList>>(cubeObjectFactory.createXPartitionList(toXPartitionList(xp)))
+          {},
+          mediaType),
           APIResult.class);
       assertSuccess(partAddResult);
 
@@ -2367,7 +2410,8 @@ public class TestMetastoreService extends LensJerseyTest {
       // add again, this time we'll drop by filter
       partAddResult = target().path("metastore/dimtables/").path(table).path("storages/test/partitions")
         .queryParam("sessionid", lensSessionId).request(mediaType)
-        .post(Entity.xml(cubeObjectFactory.createXPartitionList(toXPartitionList(xp))),
+        .post(Entity.entity(new GenericEntity<JAXBElement<XPartitionList>>(
+            cubeObjectFactory.createXPartitionList(toXPartitionList(xp))){}, mediaType),
           APIResult.class);
       assertSuccess(partAddResult);
 
@@ -2386,17 +2430,19 @@ public class TestMetastoreService extends LensJerseyTest {
       assertNotNull(partitions);
       assertEquals(partitions.getPartition().size(), 0);
     } finally {
-      setCurrentDatabase(prevDb);
-      dropDatabase(DB);
+      setCurrentDatabase(prevDb, mediaType);
+      dropDatabase(DB, mediaType);
     }
   }
 
-  private void assertXMLError(Response resp) {
+  private void assertXMLError(Response resp, MediaType mt) {
     assertEquals(resp.getStatus(), 400);
-    LensAPIResult entity = resp.readEntity(LensAPIResult.class);
-    assertTrue(entity.isErrorResult());
-    assertEquals(entity.getLensErrorTO().getCode(), LensCommonErrorCode.INVALID_XML_ERROR.getValue());
-    assertTrue(entity.getLensErrorTO().getMessage().contains("unexpected element"));
+    if (mt.equals(MediaType.APPLICATION_XML_TYPE)) {
+      LensAPIResult entity = resp.readEntity(LensAPIResult.class);
+      assertTrue(entity.isErrorResult());
+      assertEquals(entity.getLensErrorTO().getCode(), LensCommonErrorCode.INVALID_XML_ERROR.getValue());
+      assertTrue(entity.getLensErrorTO().getMessage().contains("unexpected element"));
+    }
   }
 
   private XPartitionList toXPartitionList(final XPartition... xps) {
@@ -2405,12 +2451,12 @@ public class TestMetastoreService extends LensJerseyTest {
     return ret;
   }
 
-  @Test
-  public void testNativeTables() throws Exception {
-    final String DB = dbPFX + "test_native_tables";
-    String prevDb = getCurrentDatabase();
-    createDatabase(DB);
-    setCurrentDatabase(DB);
+  @Test(dataProvider = "mediaTypeData")
+  public void testNativeTables(MediaType mediaType) throws Exception {
+    final String DB = dbPFX + "test_native_tables" + mediaType.getSubtype();
+    String prevDb = getCurrentDatabase(mediaType);
+    createDatabase(DB, mediaType);
+    setCurrentDatabase(DB, mediaType);
 
     try {
       // create hive table
@@ -2498,7 +2544,8 @@ public class TestMetastoreService extends LensJerseyTest {
       JAXBElement<XCube> element = cubeObjectFactory.createXCube(cube);
       APIResult result =
         target().path("metastore").path("cubes").queryParam("sessionid",
-          lensSessionId).request(mediaType).post(Entity.xml(element), APIResult.class);
+          lensSessionId).request(mediaType).post(Entity.entity(new GenericEntity<JAXBElement<XCube>>(element){},
+          mediaType), APIResult.class);
       assertSuccess(result);
 
       // get a cube table
@@ -2521,8 +2568,8 @@ public class TestMetastoreService extends LensJerseyTest {
         .queryParam("dbName", "nonexisting").request(mediaType).get(Response.class);
       assertEquals(response.getStatus(), Response.Status.NOT_FOUND.getStatusCode());
     } finally {
-      dropDatabase(DB);
-      setCurrentDatabase(prevDb);
+      dropDatabase(DB, mediaType);
+      setCurrentDatabase(prevDb, mediaType);
     }
   }
 
@@ -2543,12 +2590,12 @@ public class TestMetastoreService extends LensJerseyTest {
     }
   }
 
-  @Test
-  public void testFlattenedView() throws Exception {
-    final String DB = dbPFX + "test_flattened_view";
-    String prevDb = getCurrentDatabase();
-    createDatabase(DB);
-    setCurrentDatabase(DB);
+  @Test(dataProvider = "mediaTypeData")
+  public void testFlattenedView(MediaType mediaType) throws Exception {
+    final String DB = dbPFX + "test_flattened_view" + mediaType.getSubtype();
+    String prevDb = getCurrentDatabase(mediaType);
+    createDatabase(DB, mediaType);
+    setCurrentDatabase(DB, mediaType);
 
     try {
       // Create the tables
@@ -2557,12 +2604,13 @@ public class TestMetastoreService extends LensJerseyTest {
       final WebTarget cubeTarget = target().path("metastore").path("cubes");
       APIResult result =
         cubeTarget.queryParam("sessionid", lensSessionId).request(mediaType)
-          .post(Entity.xml(cubeObjectFactory.createXCube(flatTestCube)), APIResult.class);
+          .post(Entity.entity(new GenericEntity<JAXBElement<XCube>>(cubeObjectFactory.createXCube(flatTestCube)){},
+            mediaType), APIResult.class);
       assertNotNull(result);
       assertSuccess(result);
 
       // create chained dimensions - testdim and testdim2
-      createdChainedDimensions();
+      createdChainedDimensions(mediaType);
 
       // Now test flattened view
       final WebTarget flatCubeTarget = target().path("metastore").path("flattened").path("flattestcube");
@@ -2630,13 +2678,13 @@ public class TestMetastoreService extends LensJerseyTest {
       ));
 
     } finally {
-      dropDatabase(DB);
-      setCurrentDatabase(prevDb);
+      dropDatabase(DB, mediaType);
+      setCurrentDatabase(prevDb, mediaType);
     }
   }
 
   private void createTestFactAndStorageTable(final String cubeName, final String[] storages, final String tableName,
-    final String[] timePartColNames) {
+    final String[] timePartColNames, MediaType mediaType) {
 
     // Create a fact table object linked to cubeName
     XFactTable f = createFactTable(tableName, cubeName);
@@ -2647,17 +2695,14 @@ public class TestMetastoreService extends LensJerseyTest {
     }
 
     // Call API to create a fact table and storage table
-    final FormDataMultiPart mp = new FormDataMultiPart();
-    mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(),
-      lensSessionId, medType));
-    mp.bodyPart(new FormDataBodyPart(
-      FormDataContentDisposition.name("fact").fileName("fact").build(),
-      cubeObjectFactory.createXFactTable(f), medType));
     APIResult result = target()
       .path("metastore")
-      .path("facts")
+      .path("facts").queryParam("sessionid", lensSessionId)
       .request(mediaType)
-      .post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE), APIResult.class);
+      .post(Entity.entity(
+          new GenericEntity<JAXBElement<XFactTable>>(cubeObjectFactory.createXFactTable(f)) {
+          }, mediaType),
+        APIResult.class);
     assertSuccess(result);
   }
 

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-server/src/test/java/org/apache/lens/server/metastore/TestMetastoreServiceJSON.java
----------------------------------------------------------------------
diff --git a/lens-server/src/test/java/org/apache/lens/server/metastore/TestMetastoreServiceJSON.java b/lens-server/src/test/java/org/apache/lens/server/metastore/TestMetastoreServiceJSON.java
deleted file mode 100644
index 85580da..0000000
--- a/lens-server/src/test/java/org/apache/lens/server/metastore/TestMetastoreServiceJSON.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.lens.server.metastore;
-
-
-public class TestMetastoreServiceJSON { //extends TestMetastoreService {
-  /*public TestMetastoreServiceJSON() {
-    super();
-    mediaType = MediaType.APPLICATION_JSON;
-    dbPFX = "TestMetastoreServiceJSON_";
-  }*/
-}

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-server/src/test/java/org/apache/lens/server/metrics/TestResourceMethodMetrics.java
----------------------------------------------------------------------
diff --git a/lens-server/src/test/java/org/apache/lens/server/metrics/TestResourceMethodMetrics.java b/lens-server/src/test/java/org/apache/lens/server/metrics/TestResourceMethodMetrics.java
index 515ac13..c20ddf8 100644
--- a/lens-server/src/test/java/org/apache/lens/server/metrics/TestResourceMethodMetrics.java
+++ b/lens-server/src/test/java/org/apache/lens/server/metrics/TestResourceMethodMetrics.java
@@ -50,11 +50,10 @@ import org.apache.lens.server.common.TestResourceFile;
 import org.apache.lens.server.metastore.CubeMetastoreServiceImpl;
 import org.apache.lens.server.query.TestQueryService;
 
-import org.glassfish.jersey.client.ClientConfig;
 import org.glassfish.jersey.media.multipart.FormDataBodyPart;
 import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
 import org.glassfish.jersey.media.multipart.FormDataMultiPart;
-import org.glassfish.jersey.media.multipart.MultiPartFeature;
+import org.glassfish.jersey.test.TestProperties;
 import org.testng.Assert;
 import org.testng.annotations.AfterTest;
 import org.testng.annotations.BeforeTest;
@@ -87,16 +86,16 @@ public class TestResourceMethodMetrics extends LensAllApplicationJerseyTest {
   }
 
   private void createTable(String tblName) throws InterruptedException {
-    LensServerTestUtil.createTable(tblName, target(), lensSessionId);
+    LensServerTestUtil.createTable(tblName, target(), lensSessionId, defaultMT);
   }
 
   private void loadData(String tblName, final String testDataFile) throws InterruptedException {
-    LensServerTestUtil.loadDataFromClasspath(tblName, testDataFile, target(), lensSessionId);
+    LensServerTestUtil.loadDataFromClasspath(tblName, testDataFile, target(), lensSessionId, defaultMT);
   }
 
   @AfterTest
   public void tearDown() throws Exception {
-    LensServerTestUtil.dropTable(TestQueryService.TEST_TABLE, target(), lensSessionId);
+    LensServerTestUtil.dropTable(TestQueryService.TEST_TABLE, target(), lensSessionId, defaultMT);
     metastoreService.closeSession(lensSessionId);
     super.tearDown();
   }
@@ -110,14 +109,11 @@ public class TestResourceMethodMetrics extends LensAllApplicationJerseyTest {
 
   @Override
   protected Application configure() {
+    enable(TestProperties.LOG_TRAFFIC);
+    enable(TestProperties.DUMP_ENTITY);
     return new LensApplication();
   }
 
-  @Override
-  protected void configureClient(ClientConfig config) {
-    config.register(MultiPartFeature.class);
-  }
-
   @Test
   public void test() throws Exception {
     boolean enabled = metricsSvc.isEnableResourceMethodMetering();
@@ -241,7 +237,7 @@ public class TestResourceMethodMetrics extends LensAllApplicationJerseyTest {
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "execute"));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), new LensConf(),
       MediaType.APPLICATION_XML_TYPE));
-    final QueryHandle handle = target.request().post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE),
+    final QueryHandle handle = target.request(mediaType).post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE),
         new GenericType<LensAPIResult<QueryHandle>>() {}).getData();
 
     Assert.assertNotNull(handle);


[3/7] lens git commit: LENS-920 : Fix issues in producing and consuming json for all api

Posted by am...@apache.org.
http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-server/src/test/java/org/apache/lens/server/query/QueryAPIErrorResponseTest.java
----------------------------------------------------------------------
diff --git a/lens-server/src/test/java/org/apache/lens/server/query/QueryAPIErrorResponseTest.java b/lens-server/src/test/java/org/apache/lens/server/query/QueryAPIErrorResponseTest.java
index 6f8886c..30f7aff 100644
--- a/lens-server/src/test/java/org/apache/lens/server/query/QueryAPIErrorResponseTest.java
+++ b/lens-server/src/test/java/org/apache/lens/server/query/QueryAPIErrorResponseTest.java
@@ -31,6 +31,7 @@ import static org.testng.Assert.assertTrue;
 
 import javax.ws.rs.client.WebTarget;
 import javax.ws.rs.core.Application;
+import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 import javax.xml.datatype.DatatypeConfigurationException;
 
@@ -41,6 +42,7 @@ import org.apache.lens.api.metastore.*;
 import org.apache.lens.api.query.SupportedQuerySubmitOperations;
 import org.apache.lens.api.result.LensAPIResult;
 import org.apache.lens.api.result.LensErrorTO;
+import org.apache.lens.api.util.MoxyJsonConfigurationContextResolver;
 import org.apache.lens.cube.error.ColUnAvailableInTimeRange;
 import org.apache.lens.server.LensJerseyTest;
 import org.apache.lens.server.LensRequestContextInitFilter;
@@ -50,12 +52,10 @@ import org.apache.lens.server.error.LensJAXBValidationExceptionMapper;
 import org.apache.lens.server.metastore.MetastoreResource;
 import org.apache.lens.server.session.SessionResource;
 
-import org.glassfish.jersey.client.ClientConfig;
 import org.glassfish.jersey.media.multipart.MultiPartFeature;
+import org.glassfish.jersey.moxy.json.MoxyJsonFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.TestProperties;
-import org.glassfish.jersey.test.inmemory.InMemoryTestContainerFactory;
-import org.glassfish.jersey.test.spi.TestContainerFactory;
 import org.joda.time.DateTime;
 import org.joda.time.DateTimeZone;
 import org.joda.time.format.DateTimeFormat;
@@ -91,24 +91,14 @@ public class QueryAPIErrorResponseTest extends LensJerseyTest {
 
     return new ResourceConfig(LensRequestContextInitFilter.class, SessionResource.class, MetastoreResource.class,
       QueryServiceResource.class, MultiPartFeature.class, LensExceptionMapper.class, LensJAXBContextResolver.class,
-      LensRequestContextInitFilter.class, LensJAXBValidationExceptionMapper.class);
+      LensRequestContextInitFilter.class, LensJAXBValidationExceptionMapper.class,
+      MoxyJsonConfigurationContextResolver.class, MoxyJsonFeature.class);
   }
 
-  @Override
-  protected void configureClient(ClientConfig config) {
-    config.register(MultiPartFeature.class);
-    config.register(LensJAXBContextResolver.class);
-  }
+  @Test(dataProvider = "mediaTypeData")
+  public void testErrorResponseWhenSessionIdIsAbsent(MediaType mt) {
 
-  @Override
-  protected TestContainerFactory getTestContainerFactory() {
-    return new InMemoryTestContainerFactory();
-  }
-
-  @Test
-  public void testErrorResponseWhenSessionIdIsAbsent() {
-
-    Response response = estimate(target(), Optional.<LensSessionHandle>absent(), Optional.of(MOCK_QUERY));
+    Response response = estimate(target(), Optional.<LensSessionHandle>absent(), Optional.of(MOCK_QUERY), mt);
 
     final String expectedErrMsg = "Session id not provided. Please provide a session id.";
     LensErrorTO expectedLensErrorTO = LensErrorTO.composedOf(
@@ -118,12 +108,12 @@ public class QueryAPIErrorResponseTest extends LensJerseyTest {
     expectedData.verify(response);
   }
 
-  @Test
-  public void testErrorResponseWhenQueryIsAbsent() {
+  @Test(dataProvider = "mediaTypeData")
+  public void testErrorResponseWhenQueryIsAbsent(MediaType mt) {
 
-    LensSessionHandle sessionId = openSession(target(), "foo", "bar", new LensConf());
+    LensSessionHandle sessionId = openSession(target(), "foo", "bar", new LensConf(), mt);
     Optional<String> testQuery = Optional.absent();
-    Response response = estimate(target(), Optional.of(sessionId), testQuery);
+    Response response = estimate(target(), Optional.of(sessionId), testQuery, mt);
 
     final String expectedErrMsg = "Query is not provided, or it is empty or blank. Please provide a valid query.";
     LensErrorTO expectedLensErrorTO = LensErrorTO.composedOf(
@@ -133,13 +123,13 @@ public class QueryAPIErrorResponseTest extends LensJerseyTest {
     expectedData.verify(response);
   }
 
-  @Test
-  public void testErrorResponseWhenInvalidOperationIsSubmitted() {
+  @Test(dataProvider = "mediaTypeData")
+  public void testErrorResponseWhenInvalidOperationIsSubmitted(MediaType mt) {
 
-    LensSessionHandle sessionId = openSession(target(), "foo", "bar", new LensConf());
+    LensSessionHandle sessionId = openSession(target(), "foo", "bar", new LensConf(), mt);
 
     Response response = postQuery(target(), Optional.of(sessionId), Optional.of(MOCK_QUERY),
-        Optional.of(INVALID_OPERATION));
+        Optional.of(INVALID_OPERATION), mt);
 
     final String expectedErrMsg = "Provided Operation is not supported. Supported Operations are: "
       + "[estimate, execute, explain, execute_with_timeout]";
@@ -152,17 +142,16 @@ public class QueryAPIErrorResponseTest extends LensJerseyTest {
     expectedData.verify(response);
   }
 
-  @Test
-  public void testErrorResponseWhenLensMultiCauseExceptionOccurs() {
+  @Test(dataProvider = "mediaTypeData")
+  public void testErrorResponseWhenLensMultiCauseExceptionOccurs(MediaType mt) {
 
-    LensSessionHandle sessionId = openSession(target(), "foo", "bar");
+    LensSessionHandle sessionId = openSession(target(), "foo", "bar", mt);
 
     final String testQuery = "select * from non_existing_table";
-    Response response = estimate(target(), Optional.of(sessionId), Optional.of(testQuery));
+    Response response = estimate(target(), Optional.of(sessionId), Optional.of(testQuery), mt);
 
     final String expectedErrMsg1 = "Semantic Error : Error while compiling statement: "
       + "FAILED: SemanticException [Error 10001]: Line 1:31 Table not found 'non_existing_table'";
-
     final String expectedErrMsg2 = "Semantic Error : user lacks privilege or object not found: NON_EXISTING_TABLE";
 
     LensErrorTO expectedLensErrorTO1 = LensErrorTO.composedOf(INTERNAL_SERVER_ERROR.getValue(),
@@ -174,15 +163,16 @@ public class QueryAPIErrorResponseTest extends LensJerseyTest {
     LensErrorTO responseLensErrorTO = response.readEntity(LensAPIResult.class).getLensErrorTO();
 
     assertTrue(expectedLensErrorTO1.getMessage().equals(responseLensErrorTO.getMessage())
-            || expectedLensErrorTO2.getMessage().equals(responseLensErrorTO.getMessage()));
+            || expectedLensErrorTO2.getMessage().equals(responseLensErrorTO.getMessage()),
+      "Message is " + responseLensErrorTO.getMessage());
   }
 
-  @Test
-  public void testErrorResponseWithSyntaxErrorInQuery() {
+  @Test(dataProvider = "mediaTypeData")
+  public void testErrorResponseWithSyntaxErrorInQuery(MediaType mt) {
 
-    LensSessionHandle sessionId = openSession(target(), "foo", "bar", new LensConf());
+    LensSessionHandle sessionId = openSession(target(), "foo", "bar", new LensConf(), mt);
 
-    Response response = estimate(target(), Optional.of(sessionId), Optional.of(MOCK_QUERY));
+    Response response = estimate(target(), Optional.of(sessionId), Optional.of(MOCK_QUERY), mt);
 
     final String expectedErrMsg = "Syntax Error: line 1:0 cannot recognize input near 'mock' '-' 'query'";
     LensErrorTO expectedLensErrorTO = LensErrorTO.composedOf(SYNTAX_ERROR.getLensErrorInfo().getErrorCode(),
@@ -192,8 +182,8 @@ public class QueryAPIErrorResponseTest extends LensJerseyTest {
     expectedData.verify(response);
   }
 
-  @Test
-  public void testQueryColumnWithBothStartDateAndEndDate() throws DatatypeConfigurationException {
+  @Test(dataProvider = "mediaTypeData")
+  public void testQueryColumnWithBothStartDateAndEndDate(MediaType mt) throws DatatypeConfigurationException {
 
     /* This test will have a col which has both start date and end date set */
     /* Col will be queried for a time range which does not fall in start date and end date */
@@ -208,11 +198,11 @@ public class QueryAPIErrorResponseTest extends LensJerseyTest {
       + "before Friday, January 30, 2015 11:00:00 PM UTC. Please adjust the selected time range accordingly.";
 
     testColUnAvailableInTimeRange(Optional.of(startDateOneJan2015),
-      Optional.of(endDateThirtyJan2015), queryFromOneJan2014, queryTillThreeJan2014, expectedErrMsgSuffix);
+      Optional.of(endDateThirtyJan2015), queryFromOneJan2014, queryTillThreeJan2014, expectedErrMsgSuffix, mt);
   }
 
-  @Test
-  public void testQueryColumnWithOnlyStartDate() throws DatatypeConfigurationException {
+  @Test(dataProvider = "mediaTypeData")
+  public void testQueryColumnWithOnlyStartDate(MediaType mt) throws DatatypeConfigurationException {
 
     /* This test will have a col which has only start date set */
     /* Col will be queried for a time range which is before start date */
@@ -226,11 +216,11 @@ public class QueryAPIErrorResponseTest extends LensJerseyTest {
       + "Please adjust the selected time range accordingly.";
 
     testColUnAvailableInTimeRange(Optional.of(startDateOneJan2015),
-      Optional.<DateTime>absent(), queryFromOneJan2014, queryTillThreeJan2014, expectedErrMsgSuffix);
+      Optional.<DateTime>absent(), queryFromOneJan2014, queryTillThreeJan2014, expectedErrMsgSuffix, mt);
   }
 
-  @Test
-  public void testQueryColumnWithOnlyEndDate() throws DatatypeConfigurationException {
+  @Test(dataProvider = "mediaTypeData")
+  public void testQueryColumnWithOnlyEndDate(MediaType mt) throws DatatypeConfigurationException {
 
     /* This test will have a col which has only end date set */
     /* Col will be queried for a time range which is after end date */
@@ -244,12 +234,12 @@ public class QueryAPIErrorResponseTest extends LensJerseyTest {
       + "Please adjust the selected time range accordingly.";
 
     testColUnAvailableInTimeRange(Optional.<DateTime>absent(),
-      Optional.of(endDateThirtyJan2015), queryFromOneJan2016, queryTillThreeJan2016, expectedErrMsgSuffix);
+      Optional.of(endDateThirtyJan2015), queryFromOneJan2016, queryTillThreeJan2016, expectedErrMsgSuffix, mt);
   }
 
   private void testColUnAvailableInTimeRange(@NonNull final Optional<DateTime> colStartDate,
     @NonNull final Optional<DateTime> colEndDate, @NonNull DateTime queryFrom, @NonNull DateTime queryTill,
-    @NonNull final String expectedErrorMsgSuffix) throws DatatypeConfigurationException {
+    @NonNull final String expectedErrorMsgSuffix, @NonNull final MediaType mt) throws DatatypeConfigurationException {
 
     final WebTarget target = target();
     final String testDb = getRandomDbName();
@@ -258,21 +248,21 @@ public class QueryAPIErrorResponseTest extends LensJerseyTest {
     final String testFact = getRandomFactName();
 
     /* Setup: Begin */
-    LensSessionHandle sessionId = openSession(target, "foo", "bar", new LensConf());
+    LensSessionHandle sessionId = openSession(target, "foo", "bar", new LensConf(), mt);
 
     try {
 
-      createAndSetCurrentDbFailFast(target, sessionId, testDb);
+      createAndSetCurrentDbFailFast(target, sessionId, testDb, mt);
 
       /* Create a test cube with test dimension field having a start Date and end Date */
       XDimAttribute testXDim = createXDimAttribute(testDimensionField, colStartDate, colEndDate);
       XCube xcube = createXCubeWithDummyMeasure(testCube, Optional.of("dt"), testXDim);
-      createCubeFailFast(target, sessionId, xcube);
+      createCubeFailFast(target, sessionId, xcube, mt);
 
       /* Create a fact with test dimension field */
       XColumn xColumn = createXColumn(testDimensionField);
       XFactTable xFactTable = createXFactTableWithColumns(testFact, testCube, xColumn);
-      createFactFailFast(target, sessionId, xFactTable);
+      createFactFailFast(target, sessionId, xFactTable, mt);
 
       /* Setup: End */
 
@@ -280,7 +270,7 @@ public class QueryAPIErrorResponseTest extends LensJerseyTest {
       final String testQuery = "cube select " + testDimensionField + " from " + testCube + " where TIME_RANGE_IN(dt, "
         + "\"" + dtf.print(queryFrom) + "\",\"" + dtf.print(queryTill) + "\")";
 
-      Response response = estimate(target, Optional.of(sessionId), Optional.of(testQuery));
+      Response response = estimate(target, Optional.of(sessionId), Optional.of(testQuery), mt);
 
       final String expectedErrMsg = testDimensionField + expectedErrorMsgSuffix;
 
@@ -297,8 +287,8 @@ public class QueryAPIErrorResponseTest extends LensJerseyTest {
 
       expectedData.verify(response);
     } finally {
-      dropDatabaseFailFast(target, sessionId, testDb);
-      closeSessionFailFast(target, sessionId);
+      dropDatabaseFailFast(target, sessionId, testDb, mt);
+      closeSessionFailFast(target, sessionId, mt);
     }
   }
 }

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-server/src/test/java/org/apache/lens/server/query/TestLensDAO.java
----------------------------------------------------------------------
diff --git a/lens-server/src/test/java/org/apache/lens/server/query/TestLensDAO.java b/lens-server/src/test/java/org/apache/lens/server/query/TestLensDAO.java
index 01e846a..4597f9d 100644
--- a/lens-server/src/test/java/org/apache/lens/server/query/TestLensDAO.java
+++ b/lens-server/src/test/java/org/apache/lens/server/query/TestLensDAO.java
@@ -25,15 +25,12 @@ import java.sql.Statement;
 import java.util.HashMap;
 import java.util.List;
 
-import javax.ws.rs.core.Application;
-
 import org.apache.lens.api.LensConf;
 import org.apache.lens.api.LensSessionHandle;
 import org.apache.lens.api.query.LensQuery;
 import org.apache.lens.api.query.QueryHandle;
 import org.apache.lens.api.query.QueryStatus;
 import org.apache.lens.driver.jdbc.JDBCResultSet;
-import org.apache.lens.server.LensJerseyTest;
 import org.apache.lens.server.LensServices;
 import org.apache.lens.server.api.driver.MockDriver;
 import org.apache.lens.server.api.query.FinishedLensQuery;
@@ -53,7 +50,7 @@ import lombok.extern.slf4j.Slf4j;
  */
 @Test(groups = "unit-test")
 @Slf4j
-public class TestLensDAO extends LensJerseyTest {
+public class TestLensDAO {
 
   /**
    * Test lens server dao.
@@ -146,14 +143,4 @@ public class TestLensDAO extends LensJerseyTest {
     Assert.assertEquals(daoTestQueryHandles.size(), 1);
     Assert.assertEquals(daoTestQueryHandles.get(0).getHandleId().toString(), finishedHandle);
   }
-
-  /*
-   * (non-Javadoc)
-   *
-   * @see org.glassfish.jersey.test.JerseyTest#configure()
-   */
-  @Override
-  protected Application configure() {
-    return new QueryApp();
-  }
 }

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-server/src/test/java/org/apache/lens/server/query/TestQueryConstraints.java
----------------------------------------------------------------------
diff --git a/lens-server/src/test/java/org/apache/lens/server/query/TestQueryConstraints.java b/lens-server/src/test/java/org/apache/lens/server/query/TestQueryConstraints.java
index ab42a3d..8493d85 100644
--- a/lens-server/src/test/java/org/apache/lens/server/query/TestQueryConstraints.java
+++ b/lens-server/src/test/java/org/apache/lens/server/query/TestQueryConstraints.java
@@ -25,9 +25,9 @@ import static org.testng.Assert.*;
 import java.util.*;
 
 import javax.ws.rs.core.Application;
+import javax.ws.rs.core.MediaType;
 
 import org.apache.lens.api.LensSessionHandle;
-import org.apache.lens.api.jaxb.LensJAXBContextResolver;
 import org.apache.lens.api.query.QueryHandle;
 import org.apache.lens.driver.hive.HiveDriver;
 import org.apache.lens.server.LensJerseyTest;
@@ -47,8 +47,6 @@ import org.apache.lens.server.common.TestResourceFile;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hive.conf.HiveConf;
 
-import org.glassfish.jersey.client.ClientConfig;
-import org.glassfish.jersey.media.multipart.MultiPartFeature;
 import org.glassfish.jersey.test.TestProperties;
 
 import org.testng.annotations.AfterMethod;
@@ -150,17 +148,6 @@ public class TestQueryConstraints extends LensJerseyTest {
     return new TestQueryService.QueryServiceTestApp();
   }
 
-  /*
-   * (non-Javadoc)
-   *
-   * @see org.glassfish.jersey.test.JerseyTest#configureClient(org.glassfish.jersey.client.ClientConfig)
-   */
-  @Override
-  protected void configureClient(ClientConfig config) {
-    config.register(MultiPartFeature.class);
-    config.register(LensJAXBContextResolver.class);
-  }
-
   /** The test table. */
   public static final String TEST_TABLE = "TEST_TABLE";
 
@@ -171,7 +158,7 @@ public class TestQueryConstraints extends LensJerseyTest {
    * @throws InterruptedException the interrupted exception
    */
   private void createTable(String tblName) throws InterruptedException {
-    LensServerTestUtil.createTable(tblName, target(), lensSessionId);
+    LensServerTestUtil.createTable(tblName, target(), lensSessionId, defaultMT);
   }
 
   /**
@@ -182,7 +169,7 @@ public class TestQueryConstraints extends LensJerseyTest {
    * @throws InterruptedException the interrupted exception
    */
   private void loadData(String tblName, final String testDataFile) throws InterruptedException {
-    LensServerTestUtil.loadDataFromClasspath(tblName, testDataFile, target(), lensSessionId);
+    LensServerTestUtil.loadDataFromClasspath(tblName, testDataFile, target(), lensSessionId, defaultMT);
   }
 
   /**
@@ -192,26 +179,26 @@ public class TestQueryConstraints extends LensJerseyTest {
    * @throws InterruptedException the interrupted exception
    */
   private void dropTable(String tblName) throws InterruptedException {
-    LensServerTestUtil.dropTable(tblName, target(), lensSessionId);
+    LensServerTestUtil.dropTable(tblName, target(), lensSessionId, defaultMT);
   }
 
-  @Test
-  public void testThrottling() throws InterruptedException {
+  @Test(dataProvider = "mediaTypeData")
+  public void testThrottling(MediaType mt) throws InterruptedException {
     List<QueryHandle> handles = Lists.newArrayList();
     for (int j = 0; j < 5; j++) {
       for (int i = 0; i < 10; i++) {
-        handles.add(launchQuery());
+        handles.add(launchQuery(mt));
         assertValidity();
       }
       // No harm in sleeping, the queries will anyway take time.
       Thread.sleep(1000);
     }
     for (QueryHandle handle : handles) {
-      RestAPITestUtil.waitForQueryToFinish(target(), lensSessionId, handle);
+      RestAPITestUtil.waitForQueryToFinish(target(), lensSessionId, handle, mt);
       assertValidity();
     }
     for (QueryHandle handle : handles) {
-      RestAPITestUtil.getLensQueryResult(target(), lensSessionId, handle);
+      RestAPITestUtil.getLensQueryResultAsString(target(), lensSessionId, handle, mt);
       assertValidity();
     }
   }
@@ -222,10 +209,10 @@ public class TestQueryConstraints extends LensJerseyTest {
       + queryService.getLaunchedQueries());
   }
 
-  private QueryHandle launchQuery() {
+  private QueryHandle launchQuery(MediaType mt) {
     return RestAPITestUtil.executeAndGetHandle(target(), Optional.of(lensSessionId),
       Optional.of("select ID from " + TEST_TABLE),
-      Optional.of(LensServerAPITestUtil.getLensConf(QUERY_METRIC_UNIQUE_ID_CONF_KEY, UUID.randomUUID())));
+      Optional.of(LensServerAPITestUtil.getLensConf(QUERY_METRIC_UNIQUE_ID_CONF_KEY, UUID.randomUUID())), mt);
   }
 
   @AfterMethod

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-server/src/test/java/org/apache/lens/server/query/TestQueryEndEmailNotifier.java
----------------------------------------------------------------------
diff --git a/lens-server/src/test/java/org/apache/lens/server/query/TestQueryEndEmailNotifier.java b/lens-server/src/test/java/org/apache/lens/server/query/TestQueryEndEmailNotifier.java
index 4ac42b2..e97a5a3 100644
--- a/lens-server/src/test/java/org/apache/lens/server/query/TestQueryEndEmailNotifier.java
+++ b/lens-server/src/test/java/org/apache/lens/server/query/TestQueryEndEmailNotifier.java
@@ -31,6 +31,7 @@ import java.util.Map;
 
 import javax.ws.rs.core.Application;
 import javax.ws.rs.core.GenericType;
+import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
 import org.apache.lens.api.LensConf;
@@ -49,8 +50,7 @@ import org.apache.lens.server.common.TestResourceFile;
 
 import org.apache.hadoop.hive.conf.HiveConf;
 
-import org.glassfish.jersey.client.ClientConfig;
-import org.glassfish.jersey.media.multipart.MultiPartFeature;
+import org.glassfish.jersey.test.TestProperties;
 import org.subethamail.wiser.Wiser;
 import org.subethamail.wiser.WiserMessage;
 import org.testng.annotations.*;
@@ -64,6 +64,7 @@ import com.google.common.base.Optional;
 public class TestQueryEndEmailNotifier extends LensJerseyTest {
 
   private static final int NUM_ITERS = 30;
+
   /** The query service. */
   QueryExecutionServiceImpl queryService;
 
@@ -121,19 +122,11 @@ public class TestQueryEndEmailNotifier extends LensJerseyTest {
    */
   @Override
   protected Application configure() {
+    enable(TestProperties.LOG_TRAFFIC);
+    enable(TestProperties.DUMP_ENTITY);
     return new QueryApp();
   }
 
-  /*
-   * (non-Javadoc)
-   *
-   * @see org.glassfish.jersey.test.JerseyTest#configureClient(org.glassfish.jersey.client.ClientConfig)
-   */
-  @Override
-  protected void configureClient(ClientConfig config) {
-    config.register(MultiPartFeature.class);
-  }
-
   /** The test table. */
   public static final String TEST_TABLE = "EMAIL_NOTIFIER_TEST_TABLE";
 
@@ -144,7 +137,7 @@ public class TestQueryEndEmailNotifier extends LensJerseyTest {
    * @throws InterruptedException the interrupted exception
    */
   private void createTable(String tblName) throws InterruptedException {
-    LensServerTestUtil.createTable(tblName, target(), lensSessionId);
+    LensServerTestUtil.createTable(tblName, target(), lensSessionId, defaultMT);
   }
 
   /**
@@ -155,7 +148,7 @@ public class TestQueryEndEmailNotifier extends LensJerseyTest {
    * @throws InterruptedException the interrupted exception
    */
   private void loadData(String tblName, final String testDataFile) throws InterruptedException {
-    LensServerTestUtil.loadDataFromClasspath(tblName, testDataFile, target(), lensSessionId);
+    LensServerTestUtil.loadDataFromClasspath(tblName, testDataFile, target(), lensSessionId, defaultMT);
   }
 
   /**
@@ -165,13 +158,13 @@ public class TestQueryEndEmailNotifier extends LensJerseyTest {
    * @throws InterruptedException the interrupted exception
    */
   private void dropTable(String tblName) throws InterruptedException {
-    LensServerTestUtil.dropTable(tblName, target(), lensSessionId);
+    LensServerTestUtil.dropTable(tblName, target(), lensSessionId, defaultMT);
   }
 
-  private QueryHandle launchAndWaitForQuery(LensConf conf, String query, Status expectedStatus)
+  private QueryHandle launchAndWaitForQuery(LensConf conf, String query, Status expectedStatus, MediaType mt)
     throws InterruptedException {
     return executeAndWaitForQueryToFinish(target(), lensSessionId, query, Optional.of(conf),
-      Optional.of(expectedStatus)).getQueryHandle();
+      Optional.of(expectedStatus), mt).getQueryHandle();
   }
 
   private WiserMessage getMessage() throws InterruptedException {
@@ -200,58 +193,64 @@ public class TestQueryEndEmailNotifier extends LensJerseyTest {
    *
    * @throws InterruptedException the interrupted exception
    */
-  @Test
-  public void testLaunchFailure() throws InterruptedException {
+  @Test(dataProvider = "mediaTypeData")
+  public void testLaunchFailure(MediaType mt) throws InterruptedException {
     // launch failure
-    final Response response = execute(target(), Optional.of(lensSessionId), Optional.of("select fail from non_exist"));
+    final Response response = execute(target(), Optional.of(lensSessionId), Optional.of("select fail from non_exist"),
+      mt);
     assertEquals(response.getStatus(), Response.Status.OK.getStatusCode());
     QueryHandle handle = response.readEntity(new GenericType<LensAPIResult<QueryHandle>>() {}).getData();
     assertKeywordsContains(getMessage(), handle, "Launching query failed", "Reason");
   }
 
-  @Test
-  public void testFormattingFailure() throws InterruptedException {
+  @Test(dataProvider = "mediaTypeData")
+  public void testFormattingFailure(MediaType mt) throws InterruptedException {
     // formatting failure
     LensConf conf = getLensConf(
       LensConfConstants.QUERY_PERSISTENT_RESULT_SET, "true",
       LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, "false",
       LensConfConstants.QUERY_OUTPUT_SERDE, "NonexistentSerde.class");
-    QueryHandle handle = launchAndWaitForQuery(conf, "select ID, IDSTR from " + TEST_TABLE, Status.FAILED);
+    QueryHandle handle = launchAndWaitForQuery(conf, "select ID, IDSTR from " + TEST_TABLE, Status.FAILED, mt);
     assertKeywordsContains(getMessage(), handle, "Result formatting failed!", "Reason");
   }
 
-  @Test
-  public void testExecutionFailure() throws InterruptedException {
+  @Test(dataProvider = "mediaTypeData")
+  public void testExecutionFailure(MediaType mt) throws InterruptedException {
     // execution failure
     LensConf conf = getLensConf(
       LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, "true",
       HiveConf.ConfVars.COMPRESSRESULT.name(), "true",
       "mapred.compress.map.output", "true",
       "mapred.map.output.compression.codec", "nonexisting");
-    QueryHandle handle = launchAndWaitForQuery(conf, "select count(ID) from " + TEST_TABLE, Status.FAILED);
+    QueryHandle handle = launchAndWaitForQuery(conf, "select count(ID) from " + TEST_TABLE, Status.FAILED, mt);
     assertKeywordsContains(getMessage(), handle, "Query execution failed!", "Reason");
   }
 
   @DataProvider(name = "success-tests")
   public Object[][] persistenceConfigDataProvider() {
     return new Object[][]{
-      {false, false, },
-      {true, false, },
-      {false, true, },
-      {true, true, },
+      {false, false, MediaType.APPLICATION_XML_TYPE},
+      {true, false, MediaType.APPLICATION_XML_TYPE},
+      {false, true, MediaType.APPLICATION_XML_TYPE},
+      {true, true, MediaType.APPLICATION_XML_TYPE},
+      {false, false, MediaType.APPLICATION_JSON_TYPE},
+      {true, false, MediaType.APPLICATION_JSON_TYPE},
+      {false, true, MediaType.APPLICATION_JSON_TYPE},
+      {true, true, MediaType.APPLICATION_JSON_TYPE},
     };
   }
 
   @Test(dataProvider = "success-tests")
-  public void testSuccessfulQuery(Boolean lensPersistence, Boolean driverPersistence) throws InterruptedException {
+  public void testSuccessfulQuery(Boolean lensPersistence, Boolean driverPersistence, MediaType mt)
+    throws InterruptedException {
     // successful query
     LensConf conf = getLensConf(
       LensConfConstants.QUERY_PERSISTENT_RESULT_SET, lensPersistence,
       LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, driverPersistence);
-    QueryHandle handle = launchAndWaitForQuery(conf, "select ID, IDSTR from " + TEST_TABLE, Status.SUCCESSFUL);
+    QueryHandle handle = launchAndWaitForQuery(conf, "select ID, IDSTR from " + TEST_TABLE, Status.SUCCESSFUL, mt);
     String expectedKeywords;
     if (lensPersistence || driverPersistence) {
-      QueryResult result = getLensQueryResult(target(), lensSessionId, handle);
+      QueryResult result = getLensQueryResult(target(), lensSessionId, handle, mt);
       expectedKeywords = result.toPrettyString();
     } else {
       expectedKeywords = InMemoryQueryResult.DECLARATION;


[2/7] lens git commit: LENS-920 : Fix issues in producing and consuming json for all api

Posted by am...@apache.org.
http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-server/src/test/java/org/apache/lens/server/query/TestQueryService.java
----------------------------------------------------------------------
diff --git a/lens-server/src/test/java/org/apache/lens/server/query/TestQueryService.java b/lens-server/src/test/java/org/apache/lens/server/query/TestQueryService.java
index ef8c1aa..d9b7679 100644
--- a/lens-server/src/test/java/org/apache/lens/server/query/TestQueryService.java
+++ b/lens-server/src/test/java/org/apache/lens/server/query/TestQueryService.java
@@ -33,10 +33,7 @@ import java.util.*;
 import javax.ws.rs.NotFoundException;
 import javax.ws.rs.client.Entity;
 import javax.ws.rs.client.WebTarget;
-import javax.ws.rs.core.Application;
-import javax.ws.rs.core.GenericType;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
+import javax.ws.rs.core.*;
 
 import org.apache.lens.api.APIResult;
 import org.apache.lens.api.LensConf;
@@ -77,16 +74,11 @@ import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.io.IOUtils;
 
-import org.glassfish.jersey.client.ClientConfig;
 import org.glassfish.jersey.media.multipart.FormDataBodyPart;
 import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
 import org.glassfish.jersey.media.multipart.FormDataMultiPart;
-import org.glassfish.jersey.media.multipart.MultiPartFeature;
 import org.glassfish.jersey.test.TestProperties;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.AfterTest;
-import org.testng.annotations.BeforeTest;
-import org.testng.annotations.Test;
+import org.testng.annotations.*;
 
 import com.codahale.metrics.MetricRegistry;
 import com.google.common.base.Optional;
@@ -130,7 +122,7 @@ public class TestQueryService extends LensJerseyTest {
     super.setUp();
     queryService = LensServices.get().getService(QueryExecutionService.NAME);
     metricsSvc = LensServices.get().getService(MetricsService.NAME);
-    Map<String, String> sessionconf = new HashMap<String, String>();
+    Map<String, String> sessionconf = new HashMap<>();
     sessionconf.put("test.session.key", "svalue");
     lensSessionId = queryService.openSession("foo@localhost", "bar", sessionconf); // @localhost should be removed
     // automatically
@@ -167,17 +159,6 @@ public class TestQueryService extends LensJerseyTest {
     return new QueryServiceTestApp();
   }
 
-  /*
-   * (non-Javadoc)
-   *
-   * @see org.glassfish.jersey.test.JerseyTest#configureClient(org.glassfish.jersey.client.ClientConfig)
-   */
-  @Override
-  protected void configureClient(ClientConfig config) {
-    config.register(MultiPartFeature.class);
-    config.register(LensJAXBContextResolver.class);
-  }
-
   /** The test table. */
   public static final String TEST_TABLE = "TEST_TABLE";
 
@@ -188,7 +169,7 @@ public class TestQueryService extends LensJerseyTest {
    * @throws InterruptedException the interrupted exception
    */
   private void createTable(String tblName) throws InterruptedException {
-    LensServerTestUtil.createTable(tblName, target(), lensSessionId);
+    LensServerTestUtil.createTable(tblName, target(), lensSessionId, defaultMT);
   }
 
   /**
@@ -199,7 +180,7 @@ public class TestQueryService extends LensJerseyTest {
    * @throws InterruptedException the interrupted exception
    */
   private void loadData(String tblName, final String testDataFile) throws InterruptedException {
-    LensServerTestUtil.loadDataFromClasspath(tblName, testDataFile, target(), lensSessionId);
+    LensServerTestUtil.loadDataFromClasspath(tblName, testDataFile, target(), lensSessionId, defaultMT);
   }
 
   /**
@@ -209,19 +190,17 @@ public class TestQueryService extends LensJerseyTest {
    * @throws InterruptedException the interrupted exception
    */
   private void dropTable(String tblName) throws InterruptedException {
-    LensServerTestUtil.dropTable(tblName, target(), lensSessionId);
+    LensServerTestUtil.dropTable(tblName, target(), lensSessionId, defaultMT);
   }
 
-  // test get a random query, should return 400
-
   /**
-   * Test get random query.
+   * Test get random query. should return 400
    */
-  @Test
-  public void testGetRandomQuery() {
+  @Test(dataProvider = "mediaTypeData")
+  public void testGetRandomQuery(MediaType mt) {
     final WebTarget target = target().path("queryapi/queries");
 
-    Response rs = target.path("random").queryParam("sessionid", lensSessionId).request().get();
+    Response rs = target.path("random").queryParam("sessionid", lensSessionId).request(mt).get();
     assertEquals(rs.getStatus(), 400);
   }
 
@@ -229,7 +208,7 @@ public class TestQueryService extends LensJerseyTest {
   public void testLoadingMultipleDrivers() {
     Collection<LensDriver> drivers = queryService.getDrivers();
     assertEquals(drivers.size(), 4);
-    Set<String> driverNames = new HashSet<String>(drivers.size());
+    Set<String> driverNames = new HashSet<>(drivers.size());
     for (LensDriver driver : drivers) {
       assertEquals(driver.getConf().get("lens.driver.test.drivername"), driver.getFullyQualifiedName());
       driverNames.add(driver.getFullyQualifiedName());
@@ -242,19 +221,17 @@ public class TestQueryService extends LensJerseyTest {
    *
    * @throws InterruptedException the interrupted exception
    */
-  @Test
-  public void testRewriteFailureInExecute() throws InterruptedException {
+  @Test(dataProvider = "mediaTypeData")
+  public void testRewriteFailureInExecute(MediaType mt) throws InterruptedException {
     final WebTarget target = target().path("queryapi/queries");
     LensConf conf = new LensConf();
     final FormDataMultiPart mp = new FormDataMultiPart();
-    mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId,
-      MediaType.APPLICATION_XML_TYPE));
+    mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId, mt));
     mp.bodyPart(
       new FormDataBodyPart(FormDataContentDisposition.name("query").build(), "select ID from non_exist_table"));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "execute"));
-    mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), conf,
-      MediaType.APPLICATION_XML_TYPE));
-    final Response response = target.request().post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE));
+    mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), conf, mt));
+    final Response response = target.request(mt).post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE));
     assertEquals(response.getStatus(), BAD_REQUEST.getStatusCode());
   }
 
@@ -263,10 +240,10 @@ public class TestQueryService extends LensJerseyTest {
    *
    * @throws InterruptedException the interrupted exception
    */
-  @Test
-  public void testLaunchFail() throws InterruptedException {
+  @Test(dataProvider = "mediaTypeData")
+  public void testLaunchFail(MediaType mt) throws InterruptedException {
     LensQuery lensQuery = executeAndWaitForQueryToFinish(target(), lensSessionId, "select fail from non_exist",
-      Optional.<LensConf>absent(), Optional.of(Status.FAILED));
+      Optional.<LensConf>absent(), Optional.of(Status.FAILED), mt);
     assertTrue(lensQuery.getSubmissionTime() > 0);
     assertEquals(lensQuery.getLaunchTime(), 0);
     assertEquals(lensQuery.getDriverStartTime(), 0);
@@ -282,8 +259,8 @@ public class TestQueryService extends LensJerseyTest {
    *
    * @throws InterruptedException the interrupted exception
    */
-  @Test
-  public void testQueriesAPI() throws InterruptedException {
+  @Test(dataProvider = "mediaTypeData")
+  public void testQueriesAPI(MediaType mt) throws InterruptedException {
     // test post execute op
     final WebTarget target = target().path("queryapi/queries");
 
@@ -292,7 +269,7 @@ public class TestQueryService extends LensJerseyTest {
     long finishedQueries = metricsSvc.getFinishedQueries();
 
     QueryHandle handle = executeAndGetHandle(target(), Optional.of(lensSessionId), Optional.of("select ID from "
-      + TEST_TABLE), Optional.<LensConf>absent());
+      + TEST_TABLE), Optional.<LensConf>absent(), mt);
 
     // Get all queries
     // XML
@@ -300,7 +277,7 @@ public class TestQueryService extends LensJerseyTest {
       .get(new GenericType<List<QueryHandle>>() {});
     assertTrue(allQueriesXML.size() >= 1);
 
-    List<QueryHandle> allQueries = target.queryParam("sessionid", lensSessionId).request()
+    List<QueryHandle> allQueries = target.queryParam("sessionid", lensSessionId).request(mt)
       .get(new GenericType<List<QueryHandle>>() {});
     assertTrue(allQueries.size() >= 1);
     assertTrue(allQueries.contains(handle));
@@ -309,17 +286,17 @@ public class TestQueryService extends LensJerseyTest {
       .request(MediaType.APPLICATION_XML).get(String.class);
     log.debug("query XML:{}", queryXML);
 
-    Response response = target.path(handle.toString() + "001").queryParam("sessionid", lensSessionId).request().get();
+    Response response = target.path(handle.toString() + "001").queryParam("sessionid", lensSessionId).request(mt).get();
     assertEquals(response.getStatus(), 404);
 
-    LensQuery ctx = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request()
+    LensQuery ctx = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request(mt)
       .get(LensQuery.class);
 
     // wait till the query finishes
     QueryStatus stat = ctx.getStatus();
     while (!stat.finished()) {
       Thread.sleep(1000);
-      ctx = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request().get(LensQuery.class);
+      ctx = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request(mt).get(LensQuery.class);
       stat = ctx.getStatus();
       /*
       Commented due to same issue as: https://issues.apache.org/jira/browse/LENS-683
@@ -343,10 +320,10 @@ public class TestQueryService extends LensJerseyTest {
     LensConf conf = new LensConf();
     conf.addProperty("my.property", "myvalue");
     confpart.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId,
-      MediaType.APPLICATION_XML_TYPE));
+      mt));
     confpart.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), conf,
-      MediaType.APPLICATION_XML_TYPE));
-    APIResult updateConf = target.path(handle.toString()).request()
+      mt));
+    APIResult updateConf = target.path(handle.toString()).request(mt)
       .put(Entity.entity(confpart, MediaType.MULTIPART_FORM_DATA_TYPE), APIResult.class);
     assertEquals(updateConf.getStatus(), APIResult.Status.FAILED);
   }
@@ -358,19 +335,19 @@ public class TestQueryService extends LensJerseyTest {
    *
    * @throws InterruptedException the interrupted exception
    */
-  @Test
-  public void testExplainQuery() throws InterruptedException {
+  @Test(dataProvider = "mediaTypeData")
+  public void testExplainQuery(MediaType mt) throws InterruptedException {
     final WebTarget target = target().path("queryapi/queries");
 
     final FormDataMultiPart mp = new FormDataMultiPart();
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId,
-      MediaType.APPLICATION_XML_TYPE));
+      mt));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(), "select ID from " + TEST_TABLE));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "explain"));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), new LensConf(),
-      MediaType.APPLICATION_XML_TYPE));
+      mt));
 
-    final QueryPlan plan = target.request()
+    final QueryPlan plan = target.request(mt)
       .post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE),
         new GenericType<LensAPIResult<QueryPlan>>() {}).getData();
     assertEquals(plan.getTablesQueried().size(), 1);
@@ -382,14 +359,14 @@ public class TestQueryService extends LensJerseyTest {
 
     final FormDataMultiPart mp2 = new FormDataMultiPart();
     mp2.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId,
-      MediaType.APPLICATION_XML_TYPE));
+      mt));
     mp2.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(),
       "select ID from " + TEST_TABLE));
     mp2.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "explain_and_prepare"));
     mp2.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), new LensConf(),
-      MediaType.APPLICATION_XML_TYPE));
+      mt));
 
-    final QueryPlan plan2 = ptarget.request().post(Entity.entity(mp2, MediaType.MULTIPART_FORM_DATA_TYPE),
+    final QueryPlan plan2 = ptarget.request(mt).post(Entity.entity(mp2, MediaType.MULTIPART_FORM_DATA_TYPE),
       new GenericType<LensAPIResult<QueryPlan>>() {}).getData();
     assertEquals(plan2.getTablesQueried().size(), 1);
     assertTrue(plan2.getTablesQueried().get(0).endsWith(TEST_TABLE.toLowerCase()));
@@ -404,20 +381,20 @@ public class TestQueryService extends LensJerseyTest {
    * @throws InterruptedException the interrupted exception
    * @throws UnsupportedEncodingException
    */
-  @Test
-  public void testExplainFailure() throws InterruptedException, UnsupportedEncodingException {
+  @Test(dataProvider = "mediaTypeData")
+  public void testExplainFailure(MediaType mt) throws InterruptedException, UnsupportedEncodingException {
     final WebTarget target = target().path("queryapi/queries");
 
     final FormDataMultiPart mp = new FormDataMultiPart();
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId,
-      MediaType.APPLICATION_XML_TYPE));
+      mt));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(), "select NO_ID from "
       + TEST_TABLE));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "explain"));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), new LensConf(),
-      MediaType.APPLICATION_XML_TYPE));
+      mt));
 
-    final Response responseExplain = target.request().post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE));
+    final Response responseExplain = target.request(mt).post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE));
 
     assertEquals(responseExplain.getStatus(), BAD_REQUEST.getStatusCode());
 
@@ -426,14 +403,14 @@ public class TestQueryService extends LensJerseyTest {
 
     final FormDataMultiPart mp2 = new FormDataMultiPart();
     mp2.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId,
-      MediaType.APPLICATION_XML_TYPE));
+      mt));
     mp2.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(), "select NO_ID from "
       + TEST_TABLE));
     mp2.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "explain_and_prepare"));
     mp2.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), new LensConf(),
-      MediaType.APPLICATION_XML_TYPE));
+      mt));
 
-    final Response responseExplainAndPrepare = target.request().post(
+    final Response responseExplainAndPrepare = ptarget.request(mt).post(
       Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE));
 
     assertEquals(responseExplainAndPrepare.getStatus(), BAD_REQUEST.getStatusCode());
@@ -445,19 +422,18 @@ public class TestQueryService extends LensJerseyTest {
    * @throws IOException          Signals that an I/O exception has occurred.
    * @throws InterruptedException the interrupted exception
    */
-  @Test
-  public void testHiveSemanticFailure() throws InterruptedException, IOException {
+  @Test(dataProvider = "mediaTypeData")
+  public void testHiveSemanticFailure(MediaType mt) throws InterruptedException, IOException {
     final WebTarget target = target().path("queryapi/queries");
-
     final FormDataMultiPart mp = new FormDataMultiPart();
-    mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId,
-      MediaType.APPLICATION_XML_TYPE));
+    mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId, mt));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(), " select ID from NOT_EXISTS"));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "execute"));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), new LensConf(),
-      MediaType.APPLICATION_XML_TYPE));
+      mt));
 
-    Response response = target.request().post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE));
+    Response response = target.request(mt).post(Entity.entity(mp, MediaType
+      .MULTIPART_FORM_DATA_TYPE));
     LensAPIResult result = response.readEntity(LensAPIResult.class);
     List<LensErrorTO> childErrors = result.getLensErrorTO().getChildErrors();
     boolean hiveSemanticErrorExists = false;
@@ -482,31 +458,31 @@ public class TestQueryService extends LensJerseyTest {
    *
    * @throws InterruptedException the interrupted exception
    */
-  @Test
-  public void testPrepareQuery() throws InterruptedException {
+  @Test(dataProvider = "mediaTypeData")
+  public void testPrepareQuery(MediaType mt) throws InterruptedException {
     final WebTarget target = target().path("queryapi/preparedqueries");
 
     final FormDataMultiPart mp = new FormDataMultiPart();
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId,
-      MediaType.APPLICATION_XML_TYPE));
+      mt));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(), "select ID from " + TEST_TABLE));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "prepare"));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("queryName").build(), "testQuery1"));
 
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), new LensConf(),
-      MediaType.APPLICATION_XML_TYPE));
+      mt));
 
-    final QueryPrepareHandle pHandle = target.request().post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE),
+    final QueryPrepareHandle pHandle = target.request(mt).post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE),
       new GenericType<LensAPIResult<QueryPrepareHandle>>() {}).getData();
 
     // Get all prepared queries
-    List<QueryPrepareHandle> allQueries = (List<QueryPrepareHandle>) target.queryParam("sessionid", lensSessionId)
-      .queryParam("queryName", "testQuery1").request().get(new GenericType<List<QueryPrepareHandle>>() {
+    List<QueryPrepareHandle> allQueries = target.queryParam("sessionid", lensSessionId)
+      .queryParam("queryName", "testQuery1").request(mt).get(new GenericType<List<QueryPrepareHandle>>() {
       });
     assertTrue(allQueries.size() >= 1);
     assertTrue(allQueries.contains(pHandle));
 
-    LensPreparedQuery ctx = target.path(pHandle.toString()).queryParam("sessionid", lensSessionId).request()
+    LensPreparedQuery ctx = target.path(pHandle.toString()).queryParam("sessionid", lensSessionId).request(mt)
       .get(LensPreparedQuery.class);
     assertTrue(ctx.getUserQuery().equalsIgnoreCase("select ID from " + TEST_TABLE));
     assertTrue(ctx.getDriverQuery().equalsIgnoreCase("select ID from " + TEST_TABLE));
@@ -519,39 +495,40 @@ public class TestQueryService extends LensJerseyTest {
     LensConf conf = new LensConf();
     conf.addProperty("my.property", "myvalue");
     confpart.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId,
-      MediaType.APPLICATION_XML_TYPE));
+      mt));
     confpart.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), conf,
-      MediaType.APPLICATION_XML_TYPE));
-    APIResult updateConf = target.path(pHandle.toString()).request()
+      mt));
+    APIResult updateConf = target.path(pHandle.toString()).request(mt)
       .put(Entity.entity(confpart, MediaType.MULTIPART_FORM_DATA_TYPE), APIResult.class);
     assertEquals(updateConf.getStatus(), APIResult.Status.SUCCEEDED);
 
-    ctx = target.path(pHandle.toString()).queryParam("sessionid", lensSessionId).request().get(LensPreparedQuery.class);
+    ctx = target.path(pHandle.toString()).queryParam("sessionid", lensSessionId).request(mt).get(LensPreparedQuery
+      .class);
     assertEquals(ctx.getConf().getProperties().get("my.property"), "myvalue");
 
-    QueryHandle handle1 = target.path(pHandle.toString()).request()
+    QueryHandle handle1 = target.path(pHandle.toString()).request(mt)
       .post(Entity.entity(confpart, MediaType.MULTIPART_FORM_DATA_TYPE), QueryHandle.class);
 
     // Override query name
     confpart.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("queryName").build(), "testQueryName2"));
     // do post once again
-    QueryHandle handle2 = target.path(pHandle.toString()).request()
+    QueryHandle handle2 = target.path(pHandle.toString()).request(mt)
       .post(Entity.entity(confpart, MediaType.MULTIPART_FORM_DATA_TYPE), QueryHandle.class);
     assertNotEquals(handle1, handle2);
 
-    LensQuery ctx1 = waitForQueryToFinish(target(), lensSessionId, handle1, Status.SUCCESSFUL);
+    LensQuery ctx1 = waitForQueryToFinish(target(), lensSessionId, handle1, Status.SUCCESSFUL, mt);
     assertEquals(ctx1.getQueryName().toLowerCase(), "testquery1");
 
-    LensQuery ctx2 = waitForQueryToFinish(target(), lensSessionId, handle2, Status.SUCCESSFUL);
+    LensQuery ctx2 = waitForQueryToFinish(target(), lensSessionId, handle2, Status.SUCCESSFUL, mt);
     assertEquals(ctx2.getQueryName().toLowerCase(), "testqueryname2");
 
     // destroy prepared
-    APIResult result = target.path(pHandle.toString()).queryParam("sessionid", lensSessionId).request()
+    APIResult result = target.path(pHandle.toString()).queryParam("sessionid", lensSessionId).request(mt)
       .delete(APIResult.class);
     assertEquals(result.getStatus(), APIResult.Status.SUCCEEDED);
 
     // Post on destroyed query
-    Response response = target.path(pHandle.toString()).request()
+    Response response = target.path(pHandle.toString()).request(mt)
       .post(Entity.entity(confpart, MediaType.MULTIPART_FORM_DATA_TYPE), Response.class);
     assertEquals(response.getStatus(), 404);
   }
@@ -561,19 +538,19 @@ public class TestQueryService extends LensJerseyTest {
    *
    * @throws InterruptedException the interrupted exception
    */
-  @Test
-  public void testExplainAndPrepareQuery() throws InterruptedException {
+  @Test(dataProvider = "mediaTypeData")
+  public void testExplainAndPrepareQuery(MediaType mt) throws InterruptedException {
     final WebTarget target = target().path("queryapi/preparedqueries");
 
     final FormDataMultiPart mp = new FormDataMultiPart();
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId,
-      MediaType.APPLICATION_XML_TYPE));
+      mt));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(), "select ID from " + TEST_TABLE));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "explain_and_prepare"));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), new LensConf(),
-      MediaType.APPLICATION_XML_TYPE));
+      mt));
 
-    final QueryPlan plan = target.request()
+    final QueryPlan plan = target.request(mt)
       .post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE),
         new GenericType<LensAPIResult<QueryPlan>>() {}).getData();
 
@@ -582,7 +559,7 @@ public class TestQueryService extends LensJerseyTest {
     assertNotNull(plan.getPrepareHandle());
 
     LensPreparedQuery ctx = target.path(plan.getPrepareHandle().toString()).queryParam("sessionid", lensSessionId)
-      .request().get(LensPreparedQuery.class);
+      .request(mt).get(LensPreparedQuery.class);
     assertTrue(ctx.getUserQuery().equalsIgnoreCase("select ID from " + TEST_TABLE));
     assertTrue(ctx.getDriverQuery().equalsIgnoreCase("select ID from " + TEST_TABLE));
     //both drivers hive/hive1 and hive/hive2 are capable of handling the query as they point to the same hive server
@@ -594,35 +571,35 @@ public class TestQueryService extends LensJerseyTest {
     LensConf conf = new LensConf();
     conf.addProperty("my.property", "myvalue");
     confpart.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId,
-      MediaType.APPLICATION_XML_TYPE));
+      mt));
     confpart.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), conf,
-      MediaType.APPLICATION_XML_TYPE));
-    APIResult updateConf = target.path(plan.getPrepareHandle().toString()).request()
+      mt));
+    APIResult updateConf = target.path(plan.getPrepareHandle().toString()).request(mt)
       .put(Entity.entity(confpart, MediaType.MULTIPART_FORM_DATA_TYPE), APIResult.class);
     assertEquals(updateConf.getStatus(), APIResult.Status.SUCCEEDED);
 
-    ctx = target.path(plan.getPrepareHandle().toString()).queryParam("sessionid", lensSessionId).request()
+    ctx = target.path(plan.getPrepareHandle().toString()).queryParam("sessionid", lensSessionId).request(mt)
       .get(LensPreparedQuery.class);
     assertEquals(ctx.getConf().getProperties().get("my.property"), "myvalue");
 
-    QueryHandle handle1 = target.path(plan.getPrepareHandle().toString()).request()
+    QueryHandle handle1 = target.path(plan.getPrepareHandle().toString()).request(mt)
       .post(Entity.entity(confpart, MediaType.MULTIPART_FORM_DATA_TYPE), QueryHandle.class);
 
     // do post once again
-    QueryHandle handle2 = target.path(plan.getPrepareHandle().toString()).request()
+    QueryHandle handle2 = target.path(plan.getPrepareHandle().toString()).request(mt)
       .post(Entity.entity(confpart, MediaType.MULTIPART_FORM_DATA_TYPE), QueryHandle.class);
     assertNotEquals(handle1, handle2);
 
-    waitForQueryToFinish(target(), lensSessionId, handle1, Status.SUCCESSFUL);
-    waitForQueryToFinish(target(), lensSessionId, handle2, Status.SUCCESSFUL);
+    waitForQueryToFinish(target(), lensSessionId, handle1, Status.SUCCESSFUL, mt);
+    waitForQueryToFinish(target(), lensSessionId, handle2, Status.SUCCESSFUL, mt);
 
     // destroy prepared
-    APIResult result = target.path(plan.getPrepareHandle().toString()).queryParam("sessionid", lensSessionId).request()
-      .delete(APIResult.class);
+    APIResult result = target.path(plan.getPrepareHandle().toString()).queryParam("sessionid", lensSessionId)
+      .request(mt).delete(APIResult.class);
     assertEquals(result.getStatus(), APIResult.Status.SUCCEEDED);
 
     // Post on destroyed query
-    Response response = target.path(plan.getPrepareHandle().toString()).request()
+    Response response = target.path(plan.getPrepareHandle().toString()).request(mt)
       .post(Entity.entity(confpart, MediaType.MULTIPART_FORM_DATA_TYPE), Response.class);
     assertEquals(response.getStatus(), 404);
 
@@ -637,8 +614,8 @@ public class TestQueryService extends LensJerseyTest {
    * @throws InterruptedException the interrupted exception
    * @throws IOException          Signals that an I/O exception has occurred.
    */
-  @Test
-  public void testExecuteAsync() throws InterruptedException, IOException, LensException {
+  @Test(dataProvider = "mediaTypeData")
+  public void testExecuteAsync(MediaType mt) throws InterruptedException, IOException, LensException {
     // test post execute op
     final WebTarget target = target().path("queryapi/queries");
 
@@ -647,19 +624,19 @@ public class TestQueryService extends LensJerseyTest {
 
     final FormDataMultiPart mp = new FormDataMultiPart();
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId,
-      MediaType.APPLICATION_XML_TYPE));
+      mt));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(), "select ID, IDSTR from "
       + TEST_TABLE));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "execute"));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), new LensConf(),
-      MediaType.APPLICATION_XML_TYPE));
-    final QueryHandle handle = target.request().post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE),
+      mt));
+    final QueryHandle handle = target.request(mt).post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE),
       new GenericType<LensAPIResult<QueryHandle>>() {}).getData();
 
     assertNotNull(handle);
 
     // Get query
-    LensQuery lensQuery = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request()
+    LensQuery lensQuery = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request(mt)
       .get(LensQuery.class);
     assertTrue(lensQuery.getStatus().getStatus().equals(Status.QUEUED)
       || lensQuery.getStatus().getStatus().equals(Status.LAUNCHED)
@@ -669,7 +646,8 @@ public class TestQueryService extends LensJerseyTest {
     // wait till the query finishes
     QueryStatus stat = lensQuery.getStatus();
     while (!stat.finished()) {
-      lensQuery = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request().get(LensQuery.class);
+      lensQuery = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request(mt).get(LensQuery
+        .class);
       stat = lensQuery.getStatus();
       /* Commented and jira ticket raised for correction: https://issues.apache.org/jira/browse/LENS-683
       switch (stat.getStatus()) {
@@ -694,17 +672,18 @@ public class TestQueryService extends LensJerseyTest {
     assertEquals(ctx.getPhase1RewrittenQuery(), ctx.getUserQuery()); //Since there is no rewriter in this test
     assertEquals(lensQuery.getStatus().getStatus(), QueryStatus.Status.SUCCESSFUL);
 
-    validatePersistedResult(handle, target(), lensSessionId, new String[][]{{"ID", "INT"}, {"IDSTR", "STRING"}}, true);
+    validatePersistedResult(handle, target(), lensSessionId, new String[][]{{"ID", "INT"}, {"IDSTR", "STRING"}},
+      true, mt);
 
     // test cancel query
-    final QueryHandle handle2 = target.request().post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE),
+    final QueryHandle handle2 = target.request(mt).post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE),
       new GenericType<LensAPIResult<QueryHandle>>() {}).getData();
 
     assertNotNull(handle2);
-    APIResult result = target.path(handle2.toString()).queryParam("sessionid", lensSessionId).request()
+    APIResult result = target.path(handle2.toString()).queryParam("sessionid", lensSessionId).request(mt)
       .delete(APIResult.class);
     // cancel would fail query is already successful
-    LensQuery ctx2 = target.path(handle2.toString()).queryParam("sessionid", lensSessionId).request()
+    LensQuery ctx2 = target.path(handle2.toString()).queryParam("sessionid", lensSessionId).request(mt)
       .get(LensQuery.class);
     if (result.getStatus().equals(APIResult.Status.FAILED)) {
       assertEquals(ctx2.getStatus().getStatus(), QueryStatus.Status.SUCCESSFUL,
@@ -720,7 +699,7 @@ public class TestQueryService extends LensJerseyTest {
     log.info("Starting httpendpoint test");
     final FormDataMultiPart mp3 = new FormDataMultiPart();
     mp3.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId,
-      MediaType.APPLICATION_XML_TYPE));
+      mt));
     mp3.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(), "select ID, IDSTR from "
       + TEST_TABLE));
     mp3.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "execute"));
@@ -728,12 +707,12 @@ public class TestQueryService extends LensJerseyTest {
     conf.addProperty(LensConfConstants.QUERY_PERSISTENT_RESULT_SET, "true");
 
     mp3.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), conf,
-      MediaType.APPLICATION_XML_TYPE));
-    final QueryHandle handle3 = target.request().post(Entity.entity(mp3, MediaType.MULTIPART_FORM_DATA_TYPE),
+      mt));
+    final QueryHandle handle3 = target.request(mt).post(Entity.entity(mp3, MediaType.MULTIPART_FORM_DATA_TYPE),
       new GenericType<LensAPIResult<QueryHandle>>() {}).getData();
 
     // Get query
-    waitForQueryToFinish(target(), lensSessionId, handle3, Status.SUCCESSFUL);
+    waitForQueryToFinish(target(), lensSessionId, handle3, Status.SUCCESSFUL, mt);
     validateHttpEndPoint(target(), null, handle3, null);
   }
 
@@ -747,19 +726,19 @@ public class TestQueryService extends LensJerseyTest {
    * @throws IOException Signals that an I/O exception has occurred.
    */
   static void validatePersistedResult(QueryHandle handle, WebTarget parent, LensSessionHandle lensSessionId,
-    String[][] schema, boolean isDir) throws IOException {
+    String[][] schema, boolean isDir, MediaType mt) throws IOException {
     final WebTarget target = parent.path("queryapi/queries");
     // fetch results
     validateResultSetMetadata(handle, "",
       schema,
-      parent, lensSessionId);
+      parent, lensSessionId, mt);
 
     String presultset = target.path(handle.toString()).path("resultset").queryParam("sessionid", lensSessionId)
-      .request().get(String.class);
+      .request(mt).get(String.class);
     System.out.println("PERSISTED RESULT:" + presultset);
 
     PersistentQueryResult resultset = target.path(handle.toString()).path("resultset")
-      .queryParam("sessionid", lensSessionId).request().get(PersistentQueryResult.class);
+      .queryParam("sessionid", lensSessionId).request(mt).get(PersistentQueryResult.class);
     validatePersistentResult(resultset, handle, isDir);
 
     if (isDir) {
@@ -781,7 +760,7 @@ public class TestQueryService extends LensJerseyTest {
     assertTrue(resultset.getPersistedURI().contains(handle.toString()));
     Path actualPath = new Path(resultset.getPersistedURI());
     FileSystem fs = actualPath.getFileSystem(new Configuration());
-    List<String> actualRows = new ArrayList<String>();
+    List<String> actualRows = new ArrayList<>();
     if (fs.getFileStatus(actualPath).isDir()) {
       assertTrue(isDir);
       for (FileStatus fstat : fs.listStatus(actualPath)) {
@@ -832,7 +811,7 @@ public class TestQueryService extends LensJerseyTest {
     BufferedReader br = null;
     try {
       br = new BufferedReader(new InputStreamReader(in));
-      String line = "";
+      String line;
 
       while ((line = br.readLine()) != null) {
         actualRows.add(line);
@@ -951,8 +930,8 @@ public class TestQueryService extends LensJerseyTest {
    * @throws InterruptedException the interrupted exception
    * @throws IOException          Signals that an I/O exception has occurred.
    */
-  @Test
-  public void testExecuteAsyncInMemoryResult() throws InterruptedException, IOException {
+  @Test(dataProvider = "mediaTypeData")
+  public void testExecuteAsyncInMemoryResult(MediaType mt) throws InterruptedException, IOException {
     // test post execute op
     final WebTarget target = target().path("queryapi/queries");
 
@@ -960,28 +939,26 @@ public class TestQueryService extends LensJerseyTest {
     LensConf conf = new LensConf();
     conf.addProperty(LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, "false");
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId,
-      MediaType.APPLICATION_XML_TYPE));
+      mt));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(), "select ID, IDSTR from "
       + TEST_TABLE));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "execute"));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), conf,
-      MediaType.APPLICATION_XML_TYPE));
-    final QueryHandle handle = target.request().post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE),
+      mt));
+    final QueryHandle handle = target.request(mt).post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE),
       new GenericType<LensAPIResult<QueryHandle>>() {}).getData();
 
     assertNotNull(handle);
 
     // Get query
-    waitForQueryToFinish(target(), lensSessionId, handle, Status.SUCCESSFUL);
+    waitForQueryToFinish(target(), lensSessionId, handle, Status.SUCCESSFUL, mt);
 
     // fetch results
     validateResultSetMetadata(handle, "",
       new String[][]{{"ID", "INT"}, {"IDSTR", "STRING"}},
-      target(), lensSessionId);
+      target(), lensSessionId, mt);
 
-    InMemoryQueryResult resultset = target.path(handle.toString()).path("resultset")
-      .queryParam("sessionid", lensSessionId).request().get(InMemoryQueryResult.class);
-    validateInmemoryResult(resultset);
+    validateInmemoryResult(target, handle, mt);
 
     validNotFoundForHttpResult(target(), lensSessionId, handle);
     waitForPurge(0, queryService.finishedQueries);
@@ -1004,12 +981,12 @@ public class TestQueryService extends LensJerseyTest {
       conf.addProperty(LensConfConstants.QUERY_PERSISTENT_RESULT_SET, "false");
       conf.addProperty(LensConfConstants.QUERY_MAIL_NOTIFY, "false");
       mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId,
-          MediaType.APPLICATION_XML_TYPE));
+          defaultMT));
       mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(), "select ID, IDSTR from "
           + TEST_TABLE));
       mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "execute"));
       mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), conf,
-          MediaType.APPLICATION_XML_TYPE));
+        defaultMT));
 
       final QueryHandle handle =
           target
@@ -1019,7 +996,7 @@ public class TestQueryService extends LensJerseyTest {
                   }).getData();
       assertNotNull(handle);
 
-      waitForQueryToFinish(target(), lensSessionId, handle, Status.SUCCESSFUL);
+      waitForQueryToFinish(target(), lensSessionId, handle, Status.SUCCESSFUL, defaultMT);
 
       // Check TTL
       QueryContext ctx = queryService.getQueryContext(lensSessionId, handle);
@@ -1048,8 +1025,8 @@ public class TestQueryService extends LensJerseyTest {
    * @throws InterruptedException the interrupted exception
    * @throws IOException          Signals that an I/O exception has occurred.
    */
-  @Test
-  public void testExecuteAsyncTempTable() throws InterruptedException, IOException {
+  @Test(dataProvider = "mediaTypeData")
+  public void testExecuteAsyncTempTable(MediaType mt) throws InterruptedException, IOException {
     // test post execute op
     final WebTarget target = target().path("queryapi/queries");
 
@@ -1057,61 +1034,59 @@ public class TestQueryService extends LensJerseyTest {
     LensConf conf = new LensConf();
     conf.addProperty(LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, "false");
     drop.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId,
-      MediaType.APPLICATION_XML_TYPE));
+      mt));
     drop.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(),
       "drop table if exists temp_output"));
     drop.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "execute"));
     drop.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), conf,
-      MediaType.APPLICATION_XML_TYPE));
-    final QueryHandle dropHandle = target.request().post(Entity.entity(drop, MediaType.MULTIPART_FORM_DATA_TYPE),
+      mt));
+    final QueryHandle dropHandle = target.request(mt).post(Entity.entity(drop, MediaType.MULTIPART_FORM_DATA_TYPE),
       new GenericType<LensAPIResult<QueryHandle>>() {}).getData();
 
     assertNotNull(dropHandle);
 
     // Get query
-    waitForQueryToFinish(target(), lensSessionId, dropHandle, Status.SUCCESSFUL);
+    waitForQueryToFinish(target(), lensSessionId, dropHandle, Status.SUCCESSFUL, mt);
 
     final FormDataMultiPart mp = new FormDataMultiPart();
     conf = new LensConf();
     conf.addProperty(LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, "false");
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId,
-      MediaType.APPLICATION_XML_TYPE));
+      mt));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(),
       "create table temp_output as select ID, IDSTR from " + TEST_TABLE));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "execute"));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), conf,
-      MediaType.APPLICATION_XML_TYPE));
-    final QueryHandle handle = target.request().post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE),
+      mt));
+    final QueryHandle handle = target.request(mt).post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE),
       new GenericType<LensAPIResult<QueryHandle>>() {}).getData();
 
     assertNotNull(handle);
 
     // Get query
-    waitForQueryToFinish(target(), lensSessionId, handle, Status.SUCCESSFUL);
+    waitForQueryToFinish(target(), lensSessionId, handle, Status.SUCCESSFUL, mt);
 
     String select = "SELECT * FROM temp_output";
     final FormDataMultiPart fetch = new FormDataMultiPart();
     fetch.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId,
-      MediaType.APPLICATION_XML_TYPE));
+      mt));
     fetch.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(), select));
     fetch.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "execute"));
     fetch.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), conf,
-      MediaType.APPLICATION_XML_TYPE));
-    final QueryHandle handle2 = target.request().post(Entity.entity(fetch, MediaType.MULTIPART_FORM_DATA_TYPE),
+      mt));
+    final QueryHandle handle2 = target.request(mt).post(Entity.entity(fetch, MediaType.MULTIPART_FORM_DATA_TYPE),
       new GenericType<LensAPIResult<QueryHandle>>() {}).getData();
 
     assertNotNull(handle2);
 
     // Get query
-    waitForQueryToFinish(target(), lensSessionId, handle2, Status.SUCCESSFUL);
+    waitForQueryToFinish(target(), lensSessionId, handle2, Status.SUCCESSFUL, mt);
 
     // fetch results
     validateResultSetMetadata(handle2, "temp_output.", new String[][]{{"ID", "INT"}, {"IDSTR", "STRING"}},
-      target(), lensSessionId);
+      target(), lensSessionId, mt);
 
-    InMemoryQueryResult resultset = target.path(handle2.toString()).path("resultset")
-      .queryParam("sessionid", lensSessionId).request().get(InMemoryQueryResult.class);
-    validateInmemoryResult(resultset);
+    validateInmemoryResult(target, handle2, mt);
   }
 
   /**
@@ -1121,10 +1096,11 @@ public class TestQueryService extends LensJerseyTest {
    * @param parent        the parent
    * @param lensSessionId the lens session id
    */
-  static void validateResultSetMetadata(QueryHandle handle, WebTarget parent, LensSessionHandle lensSessionId) {
+  static void validateResultSetMetadata(QueryHandle handle, WebTarget parent, LensSessionHandle lensSessionId,
+    MediaType mt) {
     validateResultSetMetadata(handle, "",
       new String[][]{{"ID", "INT"}, {"IDSTR", "STRING"}, {"IDARR", "ARRAY"}, {"IDSTRARR", "ARRAY"}},
-      parent, lensSessionId);
+      parent, lensSessionId, mt);
   }
 
   /**
@@ -1136,11 +1112,11 @@ public class TestQueryService extends LensJerseyTest {
    * @param lensSessionId  the lens session id
    */
   static void validateResultSetMetadata(QueryHandle handle, String outputTablePfx, String[][] columns, WebTarget parent,
-    LensSessionHandle lensSessionId) {
+    LensSessionHandle lensSessionId, MediaType mt) {
     final WebTarget target = parent.path("queryapi/queries");
 
     QueryResultSetMetadata metadata = target.path(handle.toString()).path("resultsetmetadata")
-      .queryParam("sessionid", lensSessionId).request().get(QueryResultSetMetadata.class);
+      .queryParam("sessionid", lensSessionId).request(mt).get(QueryResultSetMetadata.class);
     assertEquals(metadata.getColumns().size(), columns.length);
     for (int i = 0; i < columns.length; i++) {
       assertTrue(
@@ -1150,6 +1126,28 @@ public class TestQueryService extends LensJerseyTest {
       assertEquals(columns[i][1].toLowerCase(), metadata.getColumns().get(i).getType().name().toLowerCase());
     }
   }
+  private void validateInmemoryResult(WebTarget target, QueryHandle handle, MediaType mt) throws IOException {
+    if (mt.equals(MediaType.APPLICATION_JSON_TYPE)) {
+      String resultSet = target.path(handle.toString()).path("resultset")
+        .queryParam("sessionid", lensSessionId).request(mt).get(String.class);
+      // this is being done because json unmarshalling does not work to construct java Objects back
+      assertEquals(resultSet.replaceAll("\\W", ""), expectedJsonResult().replaceAll("\\W", ""));
+    } else {
+      InMemoryQueryResult resultSet = target.path(handle.toString()).path("resultset")
+        .queryParam("sessionid", lensSessionId).request(mt).get(InMemoryQueryResult.class);
+      validateInmemoryResult(resultSet);
+    }
+  }
+  private String expectedJsonResult() {
+    StringBuilder expectedJson = new StringBuilder();
+    expectedJson.append("{\"inMemoryQueryResult\" : {\"rows\" : [ ")
+      .append("{\"values\" : [ {\n\"type\" : \"int\",\n\"value\" : 1}, {\"type\" : \"string\",\"value\" : \"one\"} ]},")
+      .append("{\"values\" : [ null, {\"type\" : \"string\",\"value\" : \"two\"} ]},")
+      .append("{\"values\" : [ {\"type\" : \"int\",\"value\" : 3}, null ]},")
+      .append("{\"values\" : [ null, null ]},")
+      .append("{\"values\" : [ {\"type\" : \"int\",\"value\" : 5}, {\"type\" : \"string\",\"value\" : \"\"} ]} ]}}");
+    return expectedJson.toString();
+  }
 
   /**
    * Validate inmemory result.
@@ -1182,22 +1180,22 @@ public class TestQueryService extends LensJerseyTest {
    * @throws IOException          Signals that an I/O exception has occurred.
    * @throws InterruptedException the interrupted exception
    */
-  @Test
-  public void testExecuteWithTimeoutQuery() throws IOException, InterruptedException {
+  @Test(dataProvider = "mediaTypeData")
+  public void testExecuteWithTimeoutQuery(MediaType mt) throws IOException, InterruptedException {
     final WebTarget target = target().path("queryapi/queries");
 
     final FormDataMultiPart mp = new FormDataMultiPart();
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId,
-      MediaType.APPLICATION_XML_TYPE));
+      mt));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(), "select ID, IDSTR from "
       + TEST_TABLE));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "execute_with_timeout"));
     // set a timeout value enough for tests
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("timeoutmillis").build(), "300000"));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), new LensConf(),
-      MediaType.APPLICATION_XML_TYPE));
+      mt));
 
-    QueryHandleWithResultSet result = target.request().post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE),
+    QueryHandleWithResultSet result = target.request(mt).post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE),
       new GenericType<LensAPIResult<QueryHandleWithResultSet>>() {}).getData();
     assertNotNull(result.getQueryHandle());
     assertNotNull(result.getResult());
@@ -1207,43 +1205,55 @@ public class TestQueryService extends LensJerseyTest {
     LensConf conf = new LensConf();
     conf.addProperty(LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, "false");
     mp2.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId,
-      MediaType.APPLICATION_XML_TYPE));
+      mt));
     mp2.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(), "select ID, IDSTR from "
       + TEST_TABLE));
     mp2.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "execute_with_timeout"));
     // set a timeout value enough for tests
     mp2.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("timeoutmillis").build(), "300000"));
     mp2.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), conf,
-      MediaType.APPLICATION_XML_TYPE));
+      mt));
 
-    result = target.request().post(Entity.entity(mp2, MediaType.MULTIPART_FORM_DATA_TYPE),
-      new GenericType<LensAPIResult<QueryHandleWithResultSet>>() {}).getData();
-    assertNotNull(result.getQueryHandle());
-    assertNotNull(result.getResult());
-    validateInmemoryResult((InMemoryQueryResult) result.getResult());
+    validateInmemoryResultForTimeoutQuery(target, mp2, mt);
   }
 
+  private void validateInmemoryResultForTimeoutQuery(WebTarget target, FormDataMultiPart mp, MediaType mt) {
+    if (mt.equals(MediaType.APPLICATION_JSON_TYPE)) {
+      String result = target.request(mt).post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE), String.class);
+      assertTrue(result.contains("\"type\" : \"queryHandleWithResultSet\""));
+      assertTrue(result.contains("\"status\" : \"SUCCESSFUL\""));
+      assertTrue(result.contains("\"isResultSetAvailable\" : true"));
+      assertTrue(result.replaceAll("\\W", "").contains(expectedJsonResult().replaceAll("\\W", "")));
+    } else {
+      QueryHandleWithResultSet result = target.request(mt).post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE),
+        new GenericType<LensAPIResult<QueryHandleWithResultSet>>() {
+        }).getData();
+      assertNotNull(result.getQueryHandle());
+      assertNotNull(result.getResult());
+      validateInmemoryResult((InMemoryQueryResult) result.getResult());
+    }
+  }
   /**
    * Test execute with timeout query.
    *
    * @throws IOException          Signals that an I/O exception has occurred.
    * @throws InterruptedException the interrupted exception
    */
-  @Test
-  public void testExecuteWithTimeoutFailingQuery() throws IOException, InterruptedException {
+  @Test(dataProvider = "mediaTypeData")
+  public void testExecuteWithTimeoutFailingQuery(MediaType mt) throws IOException, InterruptedException {
     final WebTarget target = target().path("queryapi/queries");
 
     final FormDataMultiPart mp = new FormDataMultiPart();
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId,
-      MediaType.APPLICATION_XML_TYPE));
+      mt));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(), "select ID from nonexist"));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "execute_with_timeout"));
     // set a timeout value enough for tests
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("timeoutmillis").build(), "300000"));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), new LensConf(),
-      MediaType.APPLICATION_XML_TYPE));
+      mt));
 
-    Response response = target.request().post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE));
+    Response response = target.request(mt).post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE));
     assertEquals(response.getStatus(), BAD_REQUEST.getStatusCode());
   }
 
@@ -1281,7 +1291,7 @@ public class TestQueryService extends LensJerseyTest {
 
     final String query = "select ID from " + TEST_TABLE;
     QueryContext ctx = new QueryContext(query, null, queryConf, conf, queryService.getDrivers());
-    Map<LensDriver, String> driverQueries = new HashMap<LensDriver, String>();
+    Map<LensDriver, String> driverQueries = new HashMap<>();
     for (LensDriver driver : queryService.getDrivers()) {
       driverQueries.put(driver, query);
     }
@@ -1335,20 +1345,20 @@ public class TestQueryService extends LensJerseyTest {
    *
    * @throws InterruptedException the interrupted exception
    */
-  @Test
-  public void testEstimateNativeQuery() throws InterruptedException {
+  @Test(dataProvider = "mediaTypeData")
+  public void testEstimateNativeQuery(MediaType mt) throws InterruptedException {
     final WebTarget target = target().path("queryapi/queries");
 
     // estimate native query
     final FormDataMultiPart mp = new FormDataMultiPart();
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId,
-      MediaType.APPLICATION_XML_TYPE));
+      mt));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(), "select ID from " + TEST_TABLE));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "estimate"));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), new LensConf(),
-      MediaType.APPLICATION_XML_TYPE));
+      mt));
 
-    final QueryCostTO result = target.request()
+    final QueryCostTO result = target.request(mt)
       .post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE),
         new GenericType<LensAPIResult<QueryCostTO>>() {}).getData();
     assertNotNull(result);
@@ -1361,8 +1371,8 @@ public class TestQueryService extends LensJerseyTest {
    * Check if DB static jars get passed to Hive driver
    * @throws Exception
    */
-  @Test
-  public void testHiveDriverGetsDBJars() throws Exception {
+  @Test(dataProvider = "mediaTypeData")
+  public void testHiveDriverGetsDBJars(MediaType mt) throws Exception {
     // Set DB to a db with static jars
     HiveSessionService sessionService = LensServices.get().getService(SessionService.NAME);
 
@@ -1385,7 +1395,7 @@ public class TestQueryService extends LensJerseyTest {
     try {
       // First execute query on the session with db should load jars from DB
       LensServerTestUtil.createTable(tableInDBWithJars, target(), sessionHandle, "(ID INT, IDSTR STRING) "
-        + "ROW FORMAT SERDE \"DatabaseJarSerde\"");
+        + "ROW FORMAT SERDE \"DatabaseJarSerde\"", mt);
 
       boolean addedToHiveDriver = false;
 
@@ -1404,7 +1414,7 @@ public class TestQueryService extends LensJerseyTest {
       log.info("@@@# database switch test");
       session.setCurrentDatabase(DB_WITH_JARS_2);
       LensServerTestUtil.createTable(tableInDBWithJars + "_2", target(), sessionHandle, "(ID INT, IDSTR STRING) "
-        + "ROW FORMAT SERDE \"DatabaseJarSerde\"");
+        + "ROW FORMAT SERDE \"DatabaseJarSerde\"", mt);
 
       // All db jars should have been added
       assertTrue(session.getDBResources(DB_WITH_JARS_2).isEmpty());
@@ -1423,8 +1433,8 @@ public class TestQueryService extends LensJerseyTest {
     } finally {
       log.info("@@@ TEST_OVER");
       try {
-        LensServerTestUtil.dropTable(tableInDBWithJars, target(), sessionHandle);
-        LensServerTestUtil.dropTable(tableInDBWithJars + "_2", target(), sessionHandle);
+        LensServerTestUtil.dropTable(tableInDBWithJars, target(), sessionHandle, mt);
+        LensServerTestUtil.dropTable(tableInDBWithJars + "_2", target(), sessionHandle, mt);
       } catch (Throwable th) {
         log.error("Exception while dropping table.", th);
       }
@@ -1432,21 +1442,21 @@ public class TestQueryService extends LensJerseyTest {
     }
   }
 
-  @Test
-  public void testRewriteFailure() {
+  @Test(dataProvider = "mediaTypeData")
+  public void testRewriteFailure(MediaType mt) {
     final WebTarget target = target().path("queryapi/queries");
 
     // estimate cube query which fails semantic analysis
     final FormDataMultiPart mp = new FormDataMultiPart();
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId,
-      MediaType.APPLICATION_XML_TYPE));
+      mt));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(),
       "cube sdfelect ID from cube_nonexist"));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "estimate"));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), new LensConf(),
-      MediaType.APPLICATION_XML_TYPE));
+      mt));
 
-    final Response response = target.request()
+    final Response response = target.request(mt)
       .post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE));
 
 
@@ -1480,36 +1490,37 @@ public class TestQueryService extends LensJerseyTest {
     }
   }
 
-  @Test
-  public void testNonSelectQueriesWithPersistResult() throws InterruptedException {
+  @Test(dataProvider = "mediaTypeData")
+  public void testNonSelectQueriesWithPersistResult(MediaType mt) throws InterruptedException {
     LensConf conf = new LensConf();
     conf.addProperty(LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, "true");
     String tblName = "testNonSelectQueriesWithPersistResult";
-    LensServerTestUtil.dropTableWithConf(tblName, target(), lensSessionId, conf);
+    LensServerTestUtil.dropTableWithConf(tblName, target(), lensSessionId, conf, mt);
     conf.addProperty(LensConfConstants.QUERY_PERSISTENT_RESULT_SET, "true");
-    LensServerTestUtil.dropTableWithConf(tblName, target(), lensSessionId, conf);
+    LensServerTestUtil.dropTableWithConf(tblName, target(), lensSessionId, conf, mt);
     conf.addProperty(LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, "false");
-    LensServerTestUtil.dropTableWithConf(tblName, target(), lensSessionId, conf);
+    LensServerTestUtil.dropTableWithConf(tblName, target(), lensSessionId, conf, mt);
     conf.addProperty(LensConfConstants.QUERY_PERSISTENT_RESULT_SET, "false");
-    LensServerTestUtil.dropTableWithConf(tblName, target(), lensSessionId, conf);
+    LensServerTestUtil.dropTableWithConf(tblName, target(), lensSessionId, conf, mt);
   }
 
-  @Test
-  public void testEstimateGauges() {
+  @Test(dataProvider = "mediaTypeData")
+  public void testEstimateGauges(MediaType mt) {
     final WebTarget target = target().path("queryapi/queries");
 
     LensConf conf = new LensConf();
-    conf.addProperty(LensConfConstants.QUERY_METRIC_UNIQUE_ID_CONF_KEY, "TestQueryService-testEstimateGauges");
+    String gaugeKey = "TestQueryService-testEstimateGauges" + mt.getSubtype();
+    conf.addProperty(LensConfConstants.QUERY_METRIC_UNIQUE_ID_CONF_KEY, gaugeKey);
     // estimate native query
     final FormDataMultiPart mp = new FormDataMultiPart();
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId,
-      MediaType.APPLICATION_XML_TYPE));
+      mt));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(), "select ID from " + TEST_TABLE));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "estimate"));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), conf,
-      MediaType.APPLICATION_XML_TYPE));
+      mt));
 
-    final QueryCostTO queryCostTO = target.request()
+    final QueryCostTO queryCostTO = target.request(mt)
       .post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE),
         new GenericType<LensAPIResult<QueryCostTO>>() {
         }).getData();
@@ -1518,34 +1529,34 @@ public class TestQueryService extends LensJerseyTest {
     MetricRegistry reg = LensMetricsRegistry.getStaticRegistry();
 
     assertTrue(reg.getGauges().keySet().containsAll(Arrays.asList(
-      "lens.MethodMetricGauge.TestQueryService-testEstimateGauges-DRIVER_SELECTION",
-      "lens.MethodMetricGauge.TestQueryService-testEstimateGauges-hive/hive1-CUBE_REWRITE",
-      "lens.MethodMetricGauge.TestQueryService-testEstimateGauges-hive/hive1-DRIVER_ESTIMATE",
-      "lens.MethodMetricGauge.TestQueryService-testEstimateGauges-hive/hive1-RewriteUtil-rewriteQuery",
-      "lens.MethodMetricGauge.TestQueryService-testEstimateGauges-hive/hive2-CUBE_REWRITE",
-      "lens.MethodMetricGauge.TestQueryService-testEstimateGauges-hive/hive2-DRIVER_ESTIMATE",
-      "lens.MethodMetricGauge.TestQueryService-testEstimateGauges-hive/hive2-RewriteUtil-rewriteQuery",
-      "lens.MethodMetricGauge.TestQueryService-testEstimateGauges-jdbc/jdbc1-CUBE_REWRITE",
-      "lens.MethodMetricGauge.TestQueryService-testEstimateGauges-jdbc/jdbc1-DRIVER_ESTIMATE",
-      "lens.MethodMetricGauge.TestQueryService-testEstimateGauges-jdbc/jdbc1-RewriteUtil-rewriteQuery",
-      "lens.MethodMetricGauge.TestQueryService-testEstimateGauges-PARALLEL_ESTIMATE")),
+      "lens.MethodMetricGauge." + gaugeKey + "-DRIVER_SELECTION",
+      "lens.MethodMetricGauge." + gaugeKey + "-hive/hive1-CUBE_REWRITE",
+      "lens.MethodMetricGauge." + gaugeKey + "-hive/hive1-DRIVER_ESTIMATE",
+      "lens.MethodMetricGauge." + gaugeKey + "-hive/hive1-RewriteUtil-rewriteQuery",
+      "lens.MethodMetricGauge." + gaugeKey + "-hive/hive2-CUBE_REWRITE",
+      "lens.MethodMetricGauge." + gaugeKey + "-hive/hive2-DRIVER_ESTIMATE",
+      "lens.MethodMetricGauge." + gaugeKey + "-hive/hive2-RewriteUtil-rewriteQuery",
+      "lens.MethodMetricGauge." + gaugeKey + "-jdbc/jdbc1-CUBE_REWRITE",
+      "lens.MethodMetricGauge." + gaugeKey + "-jdbc/jdbc1-DRIVER_ESTIMATE",
+      "lens.MethodMetricGauge." + gaugeKey + "-jdbc/jdbc1-RewriteUtil-rewriteQuery",
+      "lens.MethodMetricGauge." + gaugeKey + "-PARALLEL_ESTIMATE")),
       reg.getGauges().keySet().toString());
   }
 
-  @Test
-  public void testQueryRejection() throws InterruptedException, IOException {
+  @Test(dataProvider = "mediaTypeData")
+  public void testQueryRejection(MediaType mt) throws InterruptedException, IOException {
     final WebTarget target = target().path("queryapi/queries");
 
     final FormDataMultiPart mp = new FormDataMultiPart();
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId,
-      MediaType.APPLICATION_XML_TYPE));
+      mt));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(), "blah select ID from "
       + TEST_TABLE));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "execute"));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), new LensConf(),
-      MediaType.APPLICATION_XML_TYPE));
+      mt));
 
-    Response response = target.request().post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE));
+    Response response = target.request(mt).post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE));
     assertEquals(response.getStatus(), 400);
   }
 
@@ -1555,29 +1566,29 @@ public class TestQueryService extends LensJerseyTest {
    * @throws InterruptedException the interrupted exception
    * @throws IOException          Signals that an I/O exception has occurred.
    */
-  @Test
-  public void testQueryPurger() throws InterruptedException, IOException {
+  @Test(dataProvider = "mediaTypeData")
+  public void testQueryPurger(MediaType mt) throws InterruptedException, IOException {
     waitForPurge();
     LensConf conf = getLensConf(LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, "false");
     // test post execute op
     LensQuery ctx1 = executeAndWaitForQueryToFinish(target(), lensSessionId,
       "select ID, IDSTR from " + TEST_TABLE,
-      Optional.of(conf), Optional.of(Status.SUCCESSFUL));
+      Optional.of(conf), Optional.of(Status.SUCCESSFUL), mt);
     LensQuery ctx2 = executeAndWaitForQueryToFinish(target(), lensSessionId,
       "select ID, IDSTR from " + TEST_TABLE,
-      Optional.of(conf), Optional.of(Status.SUCCESSFUL));
+      Optional.of(conf), Optional.of(Status.SUCCESSFUL), mt);
     LensQuery ctx3 = executeAndWaitForQueryToFinish(target(), lensSessionId,
       "select ID, IDSTR from " + TEST_TABLE,
-      Optional.of(conf), Optional.of(Status.SUCCESSFUL));
+      Optional.of(conf), Optional.of(Status.SUCCESSFUL), mt);
     waitForPurge(3, queryService.finishedQueries);
     assertEquals(queryService.finishedQueries.size(), 3);
-    getLensQueryResult(target(), lensSessionId, ctx3.getQueryHandle());
+    getLensQueryResultAsString(target(), lensSessionId, ctx3.getQueryHandle(), mt);
     waitForPurge(2, queryService.finishedQueries);
     assertTrue(queryService.finishedQueries.size() == 2);
-    getLensQueryResult(target(), lensSessionId, ctx2.getQueryHandle());
+    getLensQueryResultAsString(target(), lensSessionId, ctx2.getQueryHandle(), mt);
     waitForPurge(1, queryService.finishedQueries);
     assertTrue(queryService.finishedQueries.size() == 1);
-    getLensQueryResult(target(), lensSessionId, ctx1.getQueryHandle());
+    getLensQueryResultAsString(target(), lensSessionId, ctx1.getQueryHandle(), mt);
   }
 
   /**
@@ -1585,19 +1596,19 @@ public class TestQueryService extends LensJerseyTest {
    *
    * @throws Exception
    */
-  @Test
-  public void testSessionClose() throws Exception {
+  @Test(dataProvider = "mediaTypeData")
+  public void testSessionClose(MediaType mt) throws Exception {
     // Query with group by, will run long enough to close the session before finish
     String query = "select ID, IDSTR, count(*) from " + TEST_TABLE + " group by ID, IDSTR";
     SessionService sessionService = LensServices.get().getService(HiveSessionService.NAME);
-    Map<String, String> sessionconf = new HashMap<String, String>();
+    Map<String, String> sessionconf = new HashMap<>();
     LensSessionHandle sessionHandle = sessionService.openSession("foo", "bar", "default", sessionconf);
     LensConf conf = getLensConf(LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, "true");
     QueryHandle qHandle =
-      executeAndGetHandle(target(), Optional.of(sessionHandle), Optional.of(query), Optional.of(conf));
+      executeAndGetHandle(target(), Optional.of(sessionHandle), Optional.of(query), Optional.of(conf), mt);
     sessionService.closeSession(sessionHandle);
     sessionHandle = sessionService.openSession("foo", "bar", "default", sessionconf);
-    waitForQueryToFinish(target(), sessionHandle, qHandle, Status.SUCCESSFUL);
+    waitForQueryToFinish(target(), sessionHandle, qHandle, Status.SUCCESSFUL, mt);
   }
 
   @AfterMethod

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-server/src/test/java/org/apache/lens/server/query/TestResultFormatting.java
----------------------------------------------------------------------
diff --git a/lens-server/src/test/java/org/apache/lens/server/query/TestResultFormatting.java b/lens-server/src/test/java/org/apache/lens/server/query/TestResultFormatting.java
index 30d1e34..6db990e 100644
--- a/lens-server/src/test/java/org/apache/lens/server/query/TestResultFormatting.java
+++ b/lens-server/src/test/java/org/apache/lens/server/query/TestResultFormatting.java
@@ -49,11 +49,9 @@ import org.apache.lens.server.common.TestResourceFile;
 
 import org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe;
 
-import org.glassfish.jersey.client.ClientConfig;
 import org.glassfish.jersey.media.multipart.FormDataBodyPart;
 import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
 import org.glassfish.jersey.media.multipart.FormDataMultiPart;
-import org.glassfish.jersey.media.multipart.MultiPartFeature;
 import org.testng.annotations.AfterTest;
 import org.testng.annotations.BeforeTest;
 import org.testng.annotations.Test;
@@ -84,8 +82,8 @@ public class TestResultFormatting extends LensJerseyTest {
     queryService = LensServices.get().getService(QueryExecutionService.NAME);
     lensSessionId = queryService.openSession("foo", "bar", new HashMap<String, String>());
     createTable(testTable, target(), lensSessionId,
-      "(ID INT, IDSTR STRING, IDARR ARRAY<INT>, IDSTRARR ARRAY<STRING>)");
-    loadDataFromClasspath(testTable, TestResourceFile.TEST_DATA2_FILE.getValue(), target(), lensSessionId);
+      "(ID INT, IDSTR STRING, IDARR ARRAY<INT>, IDSTRARR ARRAY<STRING>)", defaultMT);
+    loadDataFromClasspath(testTable, TestResourceFile.TEST_DATA2_FILE.getValue(), target(), lensSessionId, defaultMT);
   }
 
   /*
@@ -95,7 +93,7 @@ public class TestResultFormatting extends LensJerseyTest {
    */
   @AfterTest
   public void tearDown() throws Exception {
-    dropTable(testTable, target(), lensSessionId);
+    dropTable(testTable, target(), lensSessionId, defaultMT);
     queryService.closeSession(lensSessionId);
     super.tearDown();
   }
@@ -110,16 +108,6 @@ public class TestResultFormatting extends LensJerseyTest {
     return new QueryApp();
   }
 
-  /*
-   * (non-Javadoc)
-   *
-   * @see org.glassfish.jersey.test.JerseyTest#configureClient(org.glassfish.jersey.client.ClientConfig)
-   */
-  @Override
-  protected void configureClient(ClientConfig config) {
-    config.register(MultiPartFeature.class);
-  }
-
   /** The test table. */
   private static String testTable = "RESULT_TEST_TABLE";
 
@@ -131,15 +119,15 @@ public class TestResultFormatting extends LensJerseyTest {
    * @throws InterruptedException the interrupted exception
    * @throws IOException          Signals that an I/O exception has occurred.
    */
-  @Test
-  public void testResultFormatterInMemoryResult() throws InterruptedException, IOException {
+  @Test(dataProvider = "mediaTypeData")
+  public void testResultFormatterInMemoryResult(MediaType mt) throws InterruptedException, IOException {
     LensConf conf = new LensConf();
     conf.addProperty(LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, "false");
     conf.addProperty(LensConfConstants.QUERY_OUTPUT_SERDE, LazySimpleSerDe.class.getCanonicalName());
-    testResultFormatter(conf, QueryStatus.Status.SUCCESSFUL, false, null);
+    testResultFormatter(conf, QueryStatus.Status.SUCCESSFUL, false, null, mt);
 
     queryService.conf.set(LensConfConstants.RESULT_FS_READ_URL, "filereadurl://");
-    testResultFormatter(conf, QueryStatus.Status.SUCCESSFUL, false, "filereadurl://");
+    testResultFormatter(conf, QueryStatus.Status.SUCCESSFUL, false, "filereadurl://", mt);
     queryService.conf.unset(LensConfConstants.RESULT_FS_READ_URL);
   }
 
@@ -151,14 +139,14 @@ public class TestResultFormatting extends LensJerseyTest {
    * @throws InterruptedException the interrupted exception
    * @throws IOException          Signals that an I/O exception has occurred.
    */
-  @Test
-  public void testResultFormatterHDFSpersistentResult() throws InterruptedException, IOException {
+  @Test(dataProvider = "mediaTypeData")
+  public void testResultFormatterHDFSpersistentResult(MediaType mt) throws InterruptedException, IOException {
     LensConf conf = new LensConf();
     conf.addProperty(LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, "true");
-    testResultFormatter(conf, QueryStatus.Status.SUCCESSFUL, false, null);
+    testResultFormatter(conf, QueryStatus.Status.SUCCESSFUL, false, null, mt);
 
     queryService.conf.set(LensConfConstants.RESULT_FS_READ_URL, "filereadurl://");
-    testResultFormatter(conf, QueryStatus.Status.SUCCESSFUL, false, "filereadurl://");
+    testResultFormatter(conf, QueryStatus.Status.SUCCESSFUL, false, "filereadurl://", mt);
     queryService.conf.unset(LensConfConstants.RESULT_FS_READ_URL);
   }
 
@@ -168,12 +156,12 @@ public class TestResultFormatting extends LensJerseyTest {
    * @throws InterruptedException the interrupted exception
    * @throws IOException          Signals that an I/O exception has occurred.
    */
-  @Test
-  public void testPersistentResultWithMaxSize() throws InterruptedException, IOException {
+  @Test(dataProvider = "mediaTypeData")
+  public void testPersistentResultWithMaxSize(MediaType mt) throws InterruptedException, IOException {
     LensConf conf = new LensConf();
     conf.addProperty(LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, "true");
     conf.addProperty(LensConfConstants.RESULT_FORMAT_SIZE_THRESHOLD, "1");
-    testResultFormatter(conf, QueryStatus.Status.SUCCESSFUL, true, null);
+    testResultFormatter(conf, QueryStatus.Status.SUCCESSFUL, true, null, mt);
   }
 
   /**
@@ -182,12 +170,12 @@ public class TestResultFormatting extends LensJerseyTest {
    * @throws InterruptedException the interrupted exception
    * @throws IOException          Signals that an I/O exception has occurred.
    */
-  @Test
-  public void testResultFormatterFailure() throws InterruptedException, IOException {
+  @Test(dataProvider = "mediaTypeData")
+  public void testResultFormatterFailure(MediaType mt) throws InterruptedException, IOException {
     LensConf conf = new LensConf();
     conf.addProperty(LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, "false");
     conf.addProperty(LensConfConstants.QUERY_OUTPUT_SERDE, "NonexistentSerde.class");
-    testResultFormatter(conf, QueryStatus.Status.FAILED, false, null);
+    testResultFormatter(conf, QueryStatus.Status.FAILED, false, null, mt);
   }
 
   // test with execute async post with result formatter, get query, get results
@@ -202,33 +190,31 @@ public class TestResultFormatting extends LensJerseyTest {
    * @throws InterruptedException the interrupted exception
    * @throws IOException          Signals that an I/O exception has occurred.
    */
-  private void testResultFormatter(LensConf conf, Status status, boolean isDir, String reDirectUrl)
+  private void testResultFormatter(LensConf conf, Status status, boolean isDir, String reDirectUrl, MediaType mt)
     throws InterruptedException, IOException {
     // test post execute op
     final WebTarget target = target().path("queryapi/queries");
 
     final FormDataMultiPart mp = new FormDataMultiPart();
     conf.addProperty(LensConfConstants.QUERY_PERSISTENT_RESULT_SET, "true");
-    mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId,
-      MediaType.APPLICATION_XML_TYPE));
+    mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId, mt));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(),
       "select ID, IDSTR, IDARR, IDSTRARR from " + testTable));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "execute"));
-    mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), conf,
-      MediaType.APPLICATION_XML_TYPE));
-    QueryHandle handle = target.request()
+    mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), conf, mt));
+    QueryHandle handle = target.request(mt)
       .post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE),
         new GenericType<LensAPIResult<QueryHandle>>() {}).getData();
 
     assertNotNull(handle);
 
     // Get query
-    LensQuery ctx = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request()
+    LensQuery ctx = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request(mt)
       .get(LensQuery.class);
     // wait till the query finishes
     QueryStatus stat = ctx.getStatus();
     while (!stat.finished()) {
-      ctx = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request().get(LensQuery.class);
+      ctx = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request(mt).get(LensQuery.class);
       stat = ctx.getStatus();
       Thread.sleep(1000);
     }
@@ -257,7 +243,7 @@ public class TestResultFormatting extends LensJerseyTest {
       // fetch results
       TestQueryService.validatePersistedResult(handle, target(), lensSessionId, new String[][]{
         {"ID", "INT"}, {"IDSTR", "STRING"}, {"IDARR", "ARRAY"}, {"IDSTRARR", "ARRAY"},
-      }, isDir);
+      }, isDir, mt);
       if (!isDir) {
         TestQueryService.validateHttpEndPoint(target(), lensSessionId, handle, reDirectUrl);
       }

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-server/src/test/java/org/apache/lens/server/query/save/TestSavedQueryService.java
----------------------------------------------------------------------
diff --git a/lens-server/src/test/java/org/apache/lens/server/query/save/TestSavedQueryService.java b/lens-server/src/test/java/org/apache/lens/server/query/save/TestSavedQueryService.java
index 7c6ce49..70e2dbc 100644
--- a/lens-server/src/test/java/org/apache/lens/server/query/save/TestSavedQueryService.java
+++ b/lens-server/src/test/java/org/apache/lens/server/query/save/TestSavedQueryService.java
@@ -42,8 +42,6 @@ import org.apache.lens.server.api.query.save.SavedQueryService;
 import org.apache.lens.server.error.LensExceptionMapper;
 import org.apache.lens.server.query.QueryExecutionServiceImpl;
 
-import org.glassfish.jersey.client.ClientConfig;
-import org.glassfish.jersey.media.multipart.MultiPartFeature;
 import org.testng.annotations.AfterTest;
 import org.testng.annotations.BeforeTest;
 import org.testng.annotations.Test;
@@ -112,12 +110,6 @@ public class TestSavedQueryService extends LensJerseyTest {
     return new SavedQueryTestApp();
   }
 
-  @Override
-  protected void configureClient(ClientConfig config) {
-    config.register(MultiPartFeature.class);
-    config.register(LensJAXBContextResolver.class);
-  }
-
   @Test
   public void testResource() throws InterruptedException {
     assertEquals(


[7/7] lens git commit: LENS-920 : Fix issues in producing and consuming json for all api

Posted by am...@apache.org.
LENS-920 : Fix issues in producing and consuming json for all api


Project: http://git-wip-us.apache.org/repos/asf/lens/repo
Commit: http://git-wip-us.apache.org/repos/asf/lens/commit/d559ef2e
Tree: http://git-wip-us.apache.org/repos/asf/lens/tree/d559ef2e
Diff: http://git-wip-us.apache.org/repos/asf/lens/diff/d559ef2e

Branch: refs/heads/master
Commit: d559ef2e524ee6c28d45b35cca827fd507b15665
Parents: a5091fe
Author: Amareshwari Sriramadasu <am...@apache.org>
Authored: Tue Feb 2 18:50:28 2016 +0530
Committer: Amareshwari Sriramadasu <am...@apache.org>
Committed: Tue Feb 2 18:50:28 2016 +0530

----------------------------------------------------------------------
 lens-api/pom.xml                                |   8 +
 .../java/org/apache/lens/api/APIResult.java     |  29 +-
 .../main/java/org/apache/lens/api/LensConf.java |   2 +-
 .../org/apache/lens/api/LensSessionHandle.java  |   3 +
 .../main/java/org/apache/lens/api/Priority.java |   5 +
 .../java/org/apache/lens/api/UUIDAdapter.java   |  50 ++
 .../apache/lens/api/query/QueryCostType.java    |   5 +
 .../org/apache/lens/api/query/QueryHandle.java  |   4 +
 .../lens/api/query/QueryPrepareHandle.java      |   4 +
 .../lens/api/query/QueryResultSetMetadata.java  |   2 +
 .../org/apache/lens/api/query/QueryStatus.java  |   4 +
 .../apache/lens/api/query/ResultColumnType.java |   2 +
 .../lens/api/query/SchedulerJobHandle.java      |   4 +
 .../api/query/SchedulerJobInstanceHandle.java   |   4 +
 .../org/apache/lens/api/result/QueryCostTO.java |   2 +-
 .../MoxyJsonConfigurationContextResolver.java   |  38 +
 lens-api/src/main/resources/cube-0.1.xsd        |  12 +-
 .../apache/lens/cli/LensCliApplicationTest.java |   2 +-
 .../cli/TestLensDimensionTableCommands.java     |   2 +-
 .../resources/cube_with_no_weight_facts.xml     |  16 +-
 .../resources/dim-local-storage-element.xml     |   2 +-
 lens-cli/src/test/resources/dim_table.xml       |  10 +-
 lens-cli/src/test/resources/dim_table2.xml      |   8 +-
 .../resources/fact-local-storage-element.xml    |   2 +-
 lens-cli/src/test/resources/fact1.xml           |  10 +-
 .../src/test/resources/fact_without_weight.xml  |  10 +-
 .../src/test/resources/lens-client-site.xml     |   4 +-
 lens-cli/src/test/resources/logback.xml         |  49 ++
 lens-cli/src/test/resources/sample-cube.xml     |  18 +-
 lens-cli/src/test/resources/test-detail.xml     |   4 +-
 lens-cli/src/test/resources/test-dimension.xml  |  16 +-
 .../org/apache/lens/client/LensConnection.java  |   5 +-
 .../apache/lens/client/LensMetadataClient.java  | 196 ++---
 .../org/apache/lens/client/LensStatement.java   |  34 +-
 .../apache/lens/examples/SampleMetastore.java   |   3 +
 lens-examples/src/main/resources/city.xml       |   8 +-
 .../src/main/resources/city_subset.xml          |   4 +-
 lens-examples/src/main/resources/city_table.xml |  10 +-
 lens-examples/src/main/resources/customer.xml   |  14 +-
 .../src/main/resources/customer_table.xml       |  14 +-
 lens-examples/src/main/resources/dim_table.xml  |  10 +-
 lens-examples/src/main/resources/dim_table2.xml |   8 +-
 lens-examples/src/main/resources/dim_table3.xml |   8 +-
 lens-examples/src/main/resources/dim_table4.xml |  10 +-
 lens-examples/src/main/resources/fact1.xml      |  10 +-
 lens-examples/src/main/resources/fact2.xml      |  12 +-
 lens-examples/src/main/resources/product.xml    |  16 +-
 .../src/main/resources/product_db_table.xml     |  14 +-
 .../src/main/resources/product_table.xml        |  16 +-
 lens-examples/src/main/resources/rawfact.xml    |  16 +-
 .../resources/sales-aggr-continuous-fact.xml    |  26 +-
 .../src/main/resources/sales-aggr-fact1.xml     |  38 +-
 .../src/main/resources/sales-aggr-fact2.xml     |  28 +-
 lens-examples/src/main/resources/sales-cube.xml |  54 +-
 .../src/main/resources/sales-raw-fact.xml       |  40 +-
 .../src/main/resources/sample-cube.xml          |  16 +-
 .../main/resources/sample-db-only-dimension.xml |   8 +-
 .../src/main/resources/sample-dimension.xml     |   8 +-
 .../src/main/resources/sample-dimension2.xml    |   6 +-
 .../java/org/apache/lens/ml/server/MLApp.java   |   5 +
 .../java/org/apache/lens/ml/TestMLRunner.java   |   8 -
 .../server/api/driver/InMemoryResultSet.java    |   2 +-
 lens-server/pom.xml                             |   9 -
 .../java/org/apache/lens/server/BaseApp.java    |  53 ++
 .../java/org/apache/lens/server/LensServer.java |   1 -
 .../apache/lens/server/ServerModeFilter.java    |  15 +-
 .../metastore/CubeMetastoreServiceImpl.java     |  24 +-
 .../apache/lens/server/metastore/JAXBUtils.java |  10 +-
 .../lens/server/metastore/MetastoreApp.java     |  29 +-
 .../server/metastore/MetastoreResource.java     |  20 +-
 .../org/apache/lens/server/query/QueryApp.java  |  24 +-
 .../lens/server/query/QueryServiceResource.java |   4 +-
 .../lens/server/query/save/SavedQueryApp.java   |  22 +-
 .../server/query/save/SavedQueryResource.java   |   4 +-
 .../lens/server/scheduler/SchedulerApp.java     |  22 +-
 .../apache/lens/server/session/SessionApp.java  |  23 +-
 .../lens/server/session/SessionResource.java    |   2 +-
 .../java/org/apache/lens/server/ui/UIApp.java   |  20 +-
 .../src/main/resources/lensserver-default.xml   |  12 +-
 .../server/LensAllApplicationJerseyTest.java    |  16 +-
 .../org/apache/lens/server/LensJerseyTest.java  |  37 +-
 .../apache/lens/server/LensServerTestUtil.java  |  49 +-
 .../apache/lens/server/TestLensApplication.java |  13 +-
 .../org/apache/lens/server/TestServerMode.java  |   3 +-
 .../apache/lens/server/TestServerRestart.java   |  71 +-
 .../server/common/FormDataMultiPartFactory.java |  55 +-
 .../lens/server/common/RestAPITestUtil.java     | 157 ++--
 .../server/healthcheck/TestHealthChecks.java    |  20 +-
 .../server/metastore/TestMetastoreService.java  | 799 ++++++++++---------
 .../metastore/TestMetastoreServiceJSON.java     |  28 -
 .../metrics/TestResourceMethodMetrics.java      |  18 +-
 .../server/query/QueryAPIErrorResponseTest.java |  96 +--
 .../apache/lens/server/query/TestLensDAO.java   |  15 +-
 .../lens/server/query/TestQueryConstraints.java |  35 +-
 .../server/query/TestQueryEndEmailNotifier.java |  65 +-
 .../lens/server/query/TestQueryService.java     | 493 ++++++------
 .../lens/server/query/TestResultFormatting.java |  62 +-
 .../query/save/TestSavedQueryService.java       |   8 -
 .../server/session/TestSessionResource.java     | 157 ++--
 .../lens/server/ui/TestSessionUIResource.java   |  12 -
 pom.xml                                         |  17 +-
 src/site/apt/admin/config.apt                   | 128 +--
 102 files changed, 1858 insertions(+), 1768 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-api/pom.xml
----------------------------------------------------------------------
diff --git a/lens-api/pom.xml b/lens-api/pom.xml
index 8aa2f67..1704b62 100644
--- a/lens-api/pom.xml
+++ b/lens-api/pom.xml
@@ -65,6 +65,14 @@
       <groupId>org.jvnet.jaxb2_commons</groupId>
       <artifactId>jaxb2-basics-runtime</artifactId>
     </dependency>
+    <dependency>
+      <groupId>org.glassfish.jersey.media</groupId>
+      <artifactId>jersey-media-jaxb</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.glassfish.jersey.media</groupId>
+      <artifactId>jersey-media-moxy</artifactId>
+    </dependency>
   </dependencies>
   <build>
     <plugins>

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-api/src/main/java/org/apache/lens/api/APIResult.java
----------------------------------------------------------------------
diff --git a/lens-api/src/main/java/org/apache/lens/api/APIResult.java b/lens-api/src/main/java/org/apache/lens/api/APIResult.java
index 0cdee0d..f50d3ea 100644
--- a/lens-api/src/main/java/org/apache/lens/api/APIResult.java
+++ b/lens-api/src/main/java/org/apache/lens/api/APIResult.java
@@ -28,21 +28,24 @@ import javax.xml.bind.annotation.*;
 import org.apache.lens.api.jaxb.LensJAXBContext;
 
 import lombok.AccessLevel;
+import lombok.AllArgsConstructor;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 
 /**
  * APIResult is the output returned by all the APIs; status-SUCCEEDED or FAILED message- detailed message.
  */
-@XmlRootElement(name = "result")
+@XmlRootElement
 @XmlAccessorType(XmlAccessType.FIELD)
+/*
+ * Instantiates a new API result with values
+ */
+@AllArgsConstructor
 /**
  * Instantiates a new API result.
  */
 @NoArgsConstructor(access = AccessLevel.PROTECTED)
 public class APIResult {
-
-  private static final APIResult SUCCESS = new APIResult(Status.SUCCEEDED, "");
   /**
    * The status.
    */
@@ -73,6 +76,8 @@ public class APIResult {
   /**
    * API Result status.
    */
+  @XmlType
+  @XmlEnum
   public enum Status {
 
     /**
@@ -89,23 +94,6 @@ public class APIResult {
     FAILED
   }
 
-  /**
-   * Instantiates a new API result.
-   *
-   * @param status  the status
-   * @param message the message
-   */
-  public APIResult(Status status, String message) {
-    super();
-    this.status = status;
-    this.message = message;
-  }
-
-  /*
-   * (non-Javadoc)
-   *
-   * @see java.lang.Object#toString()
-   */
   @Override
   public String toString() {
     try {
@@ -117,6 +105,7 @@ public class APIResult {
       return e.getMessage();
     }
   }
+  private static final APIResult SUCCESS = new APIResult(Status.SUCCEEDED, "");
 
   public static APIResult partial(int actual, int expected) {
     return new APIResult(Status.PARTIAL, actual + " out of " + expected);

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-api/src/main/java/org/apache/lens/api/LensConf.java
----------------------------------------------------------------------
diff --git a/lens-api/src/main/java/org/apache/lens/api/LensConf.java b/lens-api/src/main/java/org/apache/lens/api/LensConf.java
index ff965d6..67d6461 100644
--- a/lens-api/src/main/java/org/apache/lens/api/LensConf.java
+++ b/lens-api/src/main/java/org/apache/lens/api/LensConf.java
@@ -51,7 +51,7 @@ public class LensConf implements Serializable {
    */
   @XmlElementWrapper
   @Getter
-  private final Map<String, String> properties = new HashMap<String, String>();
+  private final Map<String, String> properties = new HashMap<>();
 
   /**
    * Adds the property.

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-api/src/main/java/org/apache/lens/api/LensSessionHandle.java
----------------------------------------------------------------------
diff --git a/lens-api/src/main/java/org/apache/lens/api/LensSessionHandle.java b/lens-api/src/main/java/org/apache/lens/api/LensSessionHandle.java
index d4327a6..dc9142d 100644
--- a/lens-api/src/main/java/org/apache/lens/api/LensSessionHandle.java
+++ b/lens-api/src/main/java/org/apache/lens/api/LensSessionHandle.java
@@ -31,6 +31,7 @@ import javax.xml.bind.Marshaller;
 import javax.xml.bind.Unmarshaller;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 
 import org.apache.lens.api.jaxb.LensJAXBContext;
 
@@ -63,6 +64,7 @@ public class LensSessionHandle {
    */
   @XmlElement
   @Getter
+  @XmlJavaTypeAdapter(UUIDAdapter.class)
   private UUID publicId;
 
   /**
@@ -70,6 +72,7 @@ public class LensSessionHandle {
    */
   @XmlElement
   @Getter
+  @XmlJavaTypeAdapter(UUIDAdapter.class)
   private UUID secretId;
 
   /**

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-api/src/main/java/org/apache/lens/api/Priority.java
----------------------------------------------------------------------
diff --git a/lens-api/src/main/java/org/apache/lens/api/Priority.java b/lens-api/src/main/java/org/apache/lens/api/Priority.java
index 0e5a65d..364f892 100644
--- a/lens-api/src/main/java/org/apache/lens/api/Priority.java
+++ b/lens-api/src/main/java/org/apache/lens/api/Priority.java
@@ -21,9 +21,14 @@
  */
 package org.apache.lens.api;
 
+import javax.xml.bind.annotation.XmlEnum;
+import javax.xml.bind.annotation.XmlType;
+
 /**
  * The Enum Priority.
  */
+@XmlEnum
+@XmlType
 public enum Priority {
 
   /**

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-api/src/main/java/org/apache/lens/api/UUIDAdapter.java
----------------------------------------------------------------------
diff --git a/lens-api/src/main/java/org/apache/lens/api/UUIDAdapter.java b/lens-api/src/main/java/org/apache/lens/api/UUIDAdapter.java
new file mode 100644
index 0000000..9d6fa77
--- /dev/null
+++ b/lens-api/src/main/java/org/apache/lens/api/UUIDAdapter.java
@@ -0,0 +1,50 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/*
+ *
+ */
+package org.apache.lens.api;
+
+import java.util.UUID;
+
+import javax.xml.bind.annotation.adapters.XmlAdapter;
+
+public class UUIDAdapter extends XmlAdapter<String, UUID> {
+
+  @Override
+  public UUID unmarshal(String s) {
+    if (null == s) {
+      return null;
+    }
+    try {
+      return UUID.fromString(s);
+    } catch (IllegalArgumentException e) {
+      return null;
+    }
+  }
+
+  @Override
+  public String marshal(UUID uuid) {
+    if (uuid == null) {
+      return null;
+    }
+    return uuid.toString();
+
+  }
+}

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-api/src/main/java/org/apache/lens/api/query/QueryCostType.java
----------------------------------------------------------------------
diff --git a/lens-api/src/main/java/org/apache/lens/api/query/QueryCostType.java b/lens-api/src/main/java/org/apache/lens/api/query/QueryCostType.java
index 1485e1d..37eda42 100644
--- a/lens-api/src/main/java/org/apache/lens/api/query/QueryCostType.java
+++ b/lens-api/src/main/java/org/apache/lens/api/query/QueryCostType.java
@@ -21,6 +21,11 @@
  */
 package org.apache.lens.api.query;
 
+import javax.xml.bind.annotation.XmlEnum;
+import javax.xml.bind.annotation.XmlType;
+
+@XmlType
+@XmlEnum
 public enum QueryCostType {
   LOW, MEDIUM, HIGH
 }

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-api/src/main/java/org/apache/lens/api/query/QueryHandle.java
----------------------------------------------------------------------
diff --git a/lens-api/src/main/java/org/apache/lens/api/query/QueryHandle.java b/lens-api/src/main/java/org/apache/lens/api/query/QueryHandle.java
index 9f20184..2d4c706 100644
--- a/lens-api/src/main/java/org/apache/lens/api/query/QueryHandle.java
+++ b/lens-api/src/main/java/org/apache/lens/api/query/QueryHandle.java
@@ -26,6 +26,9 @@ import java.util.UUID;
 
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+
+import org.apache.lens.api.UUIDAdapter;
 
 import org.apache.commons.lang.StringUtils;
 
@@ -64,6 +67,7 @@ public class QueryHandle extends QuerySubmitResult implements Serializable {
    */
   @XmlElement
   @Getter
+  @XmlJavaTypeAdapter(UUIDAdapter.class)
   private UUID handleId;
 
   /**

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-api/src/main/java/org/apache/lens/api/query/QueryPrepareHandle.java
----------------------------------------------------------------------
diff --git a/lens-api/src/main/java/org/apache/lens/api/query/QueryPrepareHandle.java b/lens-api/src/main/java/org/apache/lens/api/query/QueryPrepareHandle.java
index 756287e..38e87b1 100644
--- a/lens-api/src/main/java/org/apache/lens/api/query/QueryPrepareHandle.java
+++ b/lens-api/src/main/java/org/apache/lens/api/query/QueryPrepareHandle.java
@@ -25,6 +25,9 @@ import java.util.UUID;
 
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+
+import org.apache.lens.api.UUIDAdapter;
 
 import lombok.*;
 
@@ -56,6 +59,7 @@ public class QueryPrepareHandle extends QuerySubmitResult {
    */
   @XmlElement
   @Getter
+  @XmlJavaTypeAdapter(UUIDAdapter.class)
   private UUID prepareHandleId;
 
   /**

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-api/src/main/java/org/apache/lens/api/query/QueryResultSetMetadata.java
----------------------------------------------------------------------
diff --git a/lens-api/src/main/java/org/apache/lens/api/query/QueryResultSetMetadata.java b/lens-api/src/main/java/org/apache/lens/api/query/QueryResultSetMetadata.java
index 28d9710..22c61cf 100644
--- a/lens-api/src/main/java/org/apache/lens/api/query/QueryResultSetMetadata.java
+++ b/lens-api/src/main/java/org/apache/lens/api/query/QueryResultSetMetadata.java
@@ -23,6 +23,7 @@ package org.apache.lens.api.query;
 
 import java.util.List;
 
+import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlElementWrapper;
 import javax.xml.bind.annotation.XmlRootElement;
 
@@ -52,6 +53,7 @@ public class QueryResultSetMetadata {
    * The columns.
    */
   @XmlElementWrapper
+  @XmlElement
   @Getter
   private List<ResultColumn> columns;
 }

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-api/src/main/java/org/apache/lens/api/query/QueryStatus.java
----------------------------------------------------------------------
diff --git a/lens-api/src/main/java/org/apache/lens/api/query/QueryStatus.java b/lens-api/src/main/java/org/apache/lens/api/query/QueryStatus.java
index 44fd97e..915dac7 100644
--- a/lens-api/src/main/java/org/apache/lens/api/query/QueryStatus.java
+++ b/lens-api/src/main/java/org/apache/lens/api/query/QueryStatus.java
@@ -24,7 +24,9 @@ package org.apache.lens.api.query;
 import java.io.Serializable;
 
 import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlEnum;
 import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
 
 import org.apache.lens.api.result.LensErrorTO;
 
@@ -67,6 +69,8 @@ public class QueryStatus implements Serializable {
   /**
    * The Enum Status.
    */
+  @XmlType
+  @XmlEnum
   public enum Status {
 
     /**

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-api/src/main/java/org/apache/lens/api/query/ResultColumnType.java
----------------------------------------------------------------------
diff --git a/lens-api/src/main/java/org/apache/lens/api/query/ResultColumnType.java b/lens-api/src/main/java/org/apache/lens/api/query/ResultColumnType.java
index d0c21a7..c71d02e 100644
--- a/lens-api/src/main/java/org/apache/lens/api/query/ResultColumnType.java
+++ b/lens-api/src/main/java/org/apache/lens/api/query/ResultColumnType.java
@@ -21,12 +21,14 @@
  */
 package org.apache.lens.api.query;
 
+import javax.xml.bind.annotation.XmlEnum;
 import javax.xml.bind.annotation.XmlRootElement;
 
 /**
  * The Enum ResultColumnType.
  */
 @XmlRootElement
+@XmlEnum
 public enum ResultColumnType {
 
   /**

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-api/src/main/java/org/apache/lens/api/query/SchedulerJobHandle.java
----------------------------------------------------------------------
diff --git a/lens-api/src/main/java/org/apache/lens/api/query/SchedulerJobHandle.java b/lens-api/src/main/java/org/apache/lens/api/query/SchedulerJobHandle.java
index aa4dc13..4a2baba 100644
--- a/lens-api/src/main/java/org/apache/lens/api/query/SchedulerJobHandle.java
+++ b/lens-api/src/main/java/org/apache/lens/api/query/SchedulerJobHandle.java
@@ -23,6 +23,9 @@ import java.util.UUID;
 
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+
+import org.apache.lens.api.UUIDAdapter;
 
 import org.apache.commons.lang.StringUtils;
 
@@ -51,6 +54,7 @@ public class SchedulerJobHandle implements Serializable {
    */
   @XmlElement
   @Getter
+  @XmlJavaTypeAdapter(UUIDAdapter.class)
   private UUID handleId;
 
   /**

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-api/src/main/java/org/apache/lens/api/query/SchedulerJobInstanceHandle.java
----------------------------------------------------------------------
diff --git a/lens-api/src/main/java/org/apache/lens/api/query/SchedulerJobInstanceHandle.java b/lens-api/src/main/java/org/apache/lens/api/query/SchedulerJobInstanceHandle.java
index c124a38..f19d3f0 100644
--- a/lens-api/src/main/java/org/apache/lens/api/query/SchedulerJobInstanceHandle.java
+++ b/lens-api/src/main/java/org/apache/lens/api/query/SchedulerJobInstanceHandle.java
@@ -23,6 +23,9 @@ import java.util.UUID;
 
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+
+import org.apache.lens.api.UUIDAdapter;
 
 import org.apache.commons.lang.StringUtils;
 
@@ -51,6 +54,7 @@ public class SchedulerJobInstanceHandle implements Serializable {
    */
   @XmlElement
   @Getter
+  @XmlJavaTypeAdapter(UUIDAdapter.class)
   private UUID handleId;
 
   /**

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-api/src/main/java/org/apache/lens/api/result/QueryCostTO.java
----------------------------------------------------------------------
diff --git a/lens-api/src/main/java/org/apache/lens/api/result/QueryCostTO.java b/lens-api/src/main/java/org/apache/lens/api/result/QueryCostTO.java
index a247e3c..266a4b7 100644
--- a/lens-api/src/main/java/org/apache/lens/api/result/QueryCostTO.java
+++ b/lens-api/src/main/java/org/apache/lens/api/result/QueryCostTO.java
@@ -70,6 +70,6 @@ public class QueryCostTO extends QuerySubmitResult implements Serializable {
    */
   @XmlElement
   @Getter
-  private QueryCostType type;
+  private QueryCostType costType;
 
 }

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-api/src/main/java/org/apache/lens/api/util/MoxyJsonConfigurationContextResolver.java
----------------------------------------------------------------------
diff --git a/lens-api/src/main/java/org/apache/lens/api/util/MoxyJsonConfigurationContextResolver.java b/lens-api/src/main/java/org/apache/lens/api/util/MoxyJsonConfigurationContextResolver.java
new file mode 100644
index 0000000..6e5b73e
--- /dev/null
+++ b/lens-api/src/main/java/org/apache/lens/api/util/MoxyJsonConfigurationContextResolver.java
@@ -0,0 +1,38 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.lens.api.util;
+
+import javax.ws.rs.ext.ContextResolver;
+
+import org.eclipse.persistence.jaxb.MarshallerProperties;
+import org.glassfish.jersey.moxy.json.MoxyJsonConfig;
+
+public final class MoxyJsonConfigurationContextResolver implements ContextResolver<MoxyJsonConfig> {
+
+  @Override
+  public MoxyJsonConfig getContext(final Class<?> type) {
+    final MoxyJsonConfig configuration = new MoxyJsonConfig();
+    configuration.setIncludeRoot(true);
+    configuration.setFormattedOutput(true);
+    configuration.setMarshalEmptyCollections(false);
+    configuration.marshallerProperty(MarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true);
+    configuration.unmarshallerProperty(MarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true);
+    return configuration;
+  }
+}

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-api/src/main/resources/cube-0.1.xsd
----------------------------------------------------------------------
diff --git a/lens-api/src/main/resources/cube-0.1.xsd b/lens-api/src/main/resources/cube-0.1.xsd
index d195b08..0f4dbea 100644
--- a/lens-api/src/main/resources/cube-0.1.xsd
+++ b/lens-api/src/main/resources/cube-0.1.xsd
@@ -225,7 +225,7 @@
     </xs:annotation>
     <xs:complexContent>
       <xs:extension base="x_field">
-        <xs:attribute type="x_measure_type" name="type" use="required"/>
+        <xs:attribute type="x_measure_type" name="_type" use="required"/>
         <xs:attribute type="xs:string" name="default_aggr">
           <xs:annotation>
             <xs:documentation>
@@ -323,7 +323,7 @@
           </xs:annotation>
           <xs:element type="x_expr_spec" name="expr_spec" maxOccurs="unbounded" minOccurs="1"/>
         </xs:sequence>
-        <xs:attribute type="xs:string" name="type" use="required">
+        <xs:attribute type="xs:string" name="_type" use="required">
           <xs:annotation>
             <xs:documentation>
               The type indicating what the evaluation of expression will produce. Allowed types are BOOLEAN, TINYINT,
@@ -424,7 +424,7 @@
             </xs:annotation>
           </xs:element>
         </xs:sequence>
-        <xs:attribute type="xs:string" name="type">
+        <xs:attribute type="xs:string" name="_type">
           <xs:annotation>
             <xs:documentation>
               The type indicating what the evaluation of expression will produce. Allowed types are BOOLEAN,TINYINT,
@@ -689,7 +689,7 @@
       </xs:documentation>
     </xs:annotation>
     <xs:attribute name="name" type="xs:string" use="required"/>
-    <xs:attribute type="xs:string" name="type" use="required">
+    <xs:attribute type="xs:string" name="_type" use="required">
       <xs:annotation>
         <xs:documentation>
           The type indicating what the evaluation of expression will produce. Allowed types are BOOLEAN, TINYINT,
@@ -1006,7 +1006,7 @@
       </xs:documentation>
     </xs:annotation>
     <xs:sequence>
-      <xs:element name="storage_table" minOccurs="1" maxOccurs="unbounded" type="x_storage_table_element"/>
+      <xs:element name="storage_table" minOccurs="0" maxOccurs="unbounded" type="x_storage_table_element"/>
     </xs:sequence>
   </xs:complexType>
 
@@ -1264,7 +1264,7 @@
         </xs:documentation>
       </xs:annotation>
     </xs:attribute>
-    <xs:attribute name="owner" type="xs:string" use="required">
+    <xs:attribute name="owner" type="xs:string" use="optional">
       <xs:annotation>
         <xs:documentation>
           Owner of the table.

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-cli/src/test/java/org/apache/lens/cli/LensCliApplicationTest.java
----------------------------------------------------------------------
diff --git a/lens-cli/src/test/java/org/apache/lens/cli/LensCliApplicationTest.java b/lens-cli/src/test/java/org/apache/lens/cli/LensCliApplicationTest.java
index 8647ac3..8312335 100644
--- a/lens-cli/src/test/java/org/apache/lens/cli/LensCliApplicationTest.java
+++ b/lens-cli/src/test/java/org/apache/lens/cli/LensCliApplicationTest.java
@@ -32,7 +32,7 @@ import org.testng.annotations.BeforeTest;
  */
 public class LensCliApplicationTest extends LensAllApplicationJerseyTest {
   public static final String SUCCESS_MESSAGE = "<?xml version=\"1.0\" encoding=\"utf-8\" "
-    + "standalone=\"yes\"?><result><status>succeeded</status><message></message></result>";
+    + "standalone=\"yes\"?><apiresult><status>succeeded</status><message></message></apiresult>";
 
   @Override
   protected int getTestPort() {

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-cli/src/test/java/org/apache/lens/cli/TestLensDimensionTableCommands.java
----------------------------------------------------------------------
diff --git a/lens-cli/src/test/java/org/apache/lens/cli/TestLensDimensionTableCommands.java b/lens-cli/src/test/java/org/apache/lens/cli/TestLensDimensionTableCommands.java
index 30f4ec1..bf92044 100644
--- a/lens-cli/src/test/java/org/apache/lens/cli/TestLensDimensionTableCommands.java
+++ b/lens-cli/src/test/java/org/apache/lens/cli/TestLensDimensionTableCommands.java
@@ -214,7 +214,7 @@ public class TestLensDimensionTableCommands extends LensCliApplicationTest {
     URL resource = TestLensDimensionTableCommands.class.getClassLoader().getResource("dim-local-storage-element.xml");
     command.addNewDimStorage("dim_table2", new File(resource.toURI()));
     result = command.getDimStorages("dim_table2");
-    assertEquals(DIM_LOCAL, result);
+    assertEquals(result, DIM_LOCAL);
 
     result = command.getStorageFromDim("dim_table2", DIM_LOCAL);
     String partString = "DAILY";

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-cli/src/test/resources/cube_with_no_weight_facts.xml
----------------------------------------------------------------------
diff --git a/lens-cli/src/test/resources/cube_with_no_weight_facts.xml b/lens-cli/src/test/resources/cube_with_no_weight_facts.xml
index 13736b2..4673ca4 100644
--- a/lens-cli/src/test/resources/cube_with_no_weight_facts.xml
+++ b/lens-cli/src/test/resources/cube_with_no_weight_facts.xml
@@ -22,18 +22,18 @@
 <x_base_cube name="cube_with_no_weight_facts" xmlns="uri:lens:cube:0.1"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="uri:lens:cube:0.1 cube-0.1.xsd ">
     <measures>
-        <measure name="measure1" type="BIGINT" />
-        <measure name="measure2" type="INT" default_aggr="SUM" />
-        <measure name="measure3" type="FLOAT" default_aggr="MAX" start_time='2013-12-12T00:00:00' />
-        <measure name="measure4" type="DOUBLE" default_aggr="MIN" />
+        <measure name="measure1" _type="BIGINT" />
+        <measure name="measure2" _type="INT" default_aggr="SUM" />
+        <measure name="measure3" _type="FLOAT" default_aggr="MAX" start_time='2013-12-12T00:00:00' />
+        <measure name="measure4" _type="DOUBLE" default_aggr="MIN" />
     </measures>
     <dim_attributes>
-        <dim_attribute name="dim1" type="INT" />
-        <dim_attribute name="dim2" type="INT" start_time='2013-12-01T00:00:00' />
-        <dim_attribute name="dim3" type="INT"/>
+        <dim_attribute name="dim1" _type="INT" />
+        <dim_attribute name="dim2" _type="INT" start_time='2013-12-01T00:00:00' />
+        <dim_attribute name="dim3" _type="INT"/>
     </dim_attributes>
     <expressions>
-        <expression name="expr_msr5" type="DOUBLE">
+        <expression name="expr_msr5" _type="DOUBLE">
             <expr_spec expr = "measure3 + measure4" end_time='2013-12-12T00:00:00'/>
             <expr_spec expr = "measure3 + measure4 + 0.01" start_time='2013-12-12T00:00:00'/>
         </expression>

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-cli/src/test/resources/dim-local-storage-element.xml
----------------------------------------------------------------------
diff --git a/lens-cli/src/test/resources/dim-local-storage-element.xml b/lens-cli/src/test/resources/dim-local-storage-element.xml
index 6503261..ad557f9 100644
--- a/lens-cli/src/test/resources/dim-local-storage-element.xml
+++ b/lens-cli/src/test/resources/dim-local-storage-element.xml
@@ -27,7 +27,7 @@
   <storage_name>dim_local</storage_name>
   <table_desc external="true" field_delimiter="," table_location="${project.build.directory}/metastore/examples/local">
     <part_cols>
-      <column comment="Time column" name="dt" type="STRING"/>
+      <column comment="Time column" name="dt" _type="STRING"/>
     </part_cols>
     <time_part_cols>dt</time_part_cols>
   </table_desc>

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-cli/src/test/resources/dim_table.xml
----------------------------------------------------------------------
diff --git a/lens-cli/src/test/resources/dim_table.xml b/lens-cli/src/test/resources/dim_table.xml
index 3bc9600..eb4ddfc 100644
--- a/lens-cli/src/test/resources/dim_table.xml
+++ b/lens-cli/src/test/resources/dim_table.xml
@@ -22,10 +22,10 @@
 <x_dimension_table dimension_name="test_dim" table_name="dim_table" weight="100.0" xmlns="uri:lens:cube:0.1"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="uri:lens:cube:0.1 cube-0.1.xsd ">
   <columns>
-    <column comment="ID" name="id" type="INT"/>
-    <column comment="name" name="name" type="STRING"/>
-    <column comment="more details" name="detail" type="STRING"/>
-    <column comment="d2 ID" name="d2id" type="INT"/>
+    <column comment="ID" name="id" _type="INT"/>
+    <column comment="name" name="name" _type="STRING"/>
+    <column comment="more details" name="detail" _type="STRING"/>
+    <column comment="d2 ID" name="d2id" _type="INT"/>
   </columns>
   <properties>
     <property name="dim1.prop" value="d1"/>
@@ -39,7 +39,7 @@
       <table_desc external="true" field_delimiter=","
         table_location="${project.build.directory}/metastore/examples/local">
         <part_cols>
-          <column comment="Time column" name="dt" type="STRING"/>
+          <column comment="Time column" name="dt" _type="STRING"/>
         </part_cols>
         <time_part_cols>dt</time_part_cols>
       </table_desc>

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-cli/src/test/resources/dim_table2.xml
----------------------------------------------------------------------
diff --git a/lens-cli/src/test/resources/dim_table2.xml b/lens-cli/src/test/resources/dim_table2.xml
index 4c3f7d9..8440e28 100644
--- a/lens-cli/src/test/resources/dim_table2.xml
+++ b/lens-cli/src/test/resources/dim_table2.xml
@@ -22,9 +22,9 @@
 <x_dimension_table dimension_name="test_dim" table_name="dim_table2" weight="100.0" xmlns="uri:lens:cube:0.1"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="uri:lens:cube:0.1 cube-0.1.xsd ">
   <columns>
-    <column comment="ID" name="id" type="INT"/>
-    <column comment="name" name="name" type="STRING"/>
-    <column comment="more details for dim2" name="detail2" type="STRING"/>
+    <column comment="ID" name="id" _type="INT"/>
+    <column comment="name" name="name" _type="STRING"/>
+    <column comment="more details for dim2" name="detail2" _type="STRING"/>
   </columns>
 
   <properties>
@@ -39,7 +39,7 @@
       <table_desc external="true" field_delimiter=","
         table_location="${project.build.directory}/metastore/examples/dim1">
         <part_cols>
-          <column comment="Time column" name="dt" type="STRING"/>
+          <column comment="Time column" name="dt" _type="STRING"/>
         </part_cols>
         <time_part_cols>dt</time_part_cols>
       </table_desc>

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-cli/src/test/resources/fact-local-storage-element.xml
----------------------------------------------------------------------
diff --git a/lens-cli/src/test/resources/fact-local-storage-element.xml b/lens-cli/src/test/resources/fact-local-storage-element.xml
index 6f30a1c..15a847b 100644
--- a/lens-cli/src/test/resources/fact-local-storage-element.xml
+++ b/lens-cli/src/test/resources/fact-local-storage-element.xml
@@ -28,7 +28,7 @@
   <storage_name>fact_local</storage_name>
   <table_desc external="true" field_delimiter="," table_location="${project.build.directory}/metastore/examples/local">
     <part_cols>
-      <column comment="Time column" name="dt" type="STRING"/>
+      <column comment="Time column" name="dt" _type="STRING"/>
     </part_cols>
     <time_part_cols>dt</time_part_cols>
   </table_desc>

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-cli/src/test/resources/fact1.xml
----------------------------------------------------------------------
diff --git a/lens-cli/src/test/resources/fact1.xml b/lens-cli/src/test/resources/fact1.xml
index f6d1f9c..b18a393 100644
--- a/lens-cli/src/test/resources/fact1.xml
+++ b/lens-cli/src/test/resources/fact1.xml
@@ -22,10 +22,10 @@
 <x_fact_table cube_name="sample_cube" name="fact1" weight="100.0" xmlns="uri:lens:cube:0.1"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="uri:lens:cube:0.1 cube-0.1.xsd ">
   <columns>
-    <column comment="" name="dim1" type="INT"/>
-    <column comment="" name="measure1" type="BIGINT"/>
-    <column comment="" name="measure2" type="INT"/>
-    <column comment="" name="measure3" type="FLOAT"/>
+    <column comment="" name="dim1" _type="INT"/>
+    <column comment="" name="measure1" _type="BIGINT"/>
+    <column comment="" name="measure2" _type="INT"/>
+    <column comment="" name="measure3" _type="FLOAT"/>
   </columns>
   <properties>
     <property name="fact1.prop" value="f1"/>
@@ -42,7 +42,7 @@
       <table_desc external="true" field_delimiter=","
         table_location="${project.build.directory}/metastore/examples/fact1_local">
         <part_cols>
-          <column comment="Time column" name="dt" type="STRING"/>
+          <column comment="Time column" name="dt" _type="STRING"/>
         </part_cols>
         <time_part_cols>dt</time_part_cols>
       </table_desc>

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-cli/src/test/resources/fact_without_weight.xml
----------------------------------------------------------------------
diff --git a/lens-cli/src/test/resources/fact_without_weight.xml b/lens-cli/src/test/resources/fact_without_weight.xml
index 8371b0b..0c124b2 100644
--- a/lens-cli/src/test/resources/fact_without_weight.xml
+++ b/lens-cli/src/test/resources/fact_without_weight.xml
@@ -22,10 +22,10 @@
 <x_fact_table cube_name="cube_with_no_weight_facts" name="fact_without_wt" xmlns="uri:lens:cube:0.1"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="uri:lens:cube:0.1 cube-0.1.xsd ">
   <columns>
-    <column comment="" name="dim1" type="INT"/>
-    <column comment="" name="measure1" type="BIGINT"/>
-    <column comment="" name="measure2" type="INT"/>
-    <column comment="" name="measure3" type="FLOAT"/>
+    <column comment="" name="dim1" _type="INT"/>
+    <column comment="" name="measure1" _type="BIGINT"/>
+    <column comment="" name="measure2" _type="INT"/>
+    <column comment="" name="measure3" _type="FLOAT"/>
   </columns>
   <properties>
     <property name="fact_without_wt.prop" value="f1"/>
@@ -42,7 +42,7 @@
       <table_desc external="true" field_delimiter=","
         table_location="${project.build.directory}/metastore/examples/fact_local_without_wt">
         <part_cols>
-          <column comment="Time column" name="dt" type="STRING"/>
+          <column comment="Time column" name="dt" _type="STRING"/>
         </part_cols>
         <time_part_cols>dt</time_part_cols>
       </table_desc>

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-cli/src/test/resources/lens-client-site.xml
----------------------------------------------------------------------
diff --git a/lens-cli/src/test/resources/lens-client-site.xml b/lens-cli/src/test/resources/lens-client-site.xml
index e500bda..bf1443d 100644
--- a/lens-cli/src/test/resources/lens-client-site.xml
+++ b/lens-cli/src/test/resources/lens-client-site.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
 <!--
 
   Licensed to the Apache Software Foundation (ASF) under one
@@ -19,8 +19,6 @@
   under the License.
 
 -->
-<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
-
 <configuration>
 
   <property>

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-cli/src/test/resources/logback.xml
----------------------------------------------------------------------
diff --git a/lens-cli/src/test/resources/logback.xml b/lens-cli/src/test/resources/logback.xml
new file mode 100644
index 0000000..57cf4a4
--- /dev/null
+++ b/lens-cli/src/test/resources/logback.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements. See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership. The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License. You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied. See the License for the
+  specific language governing permissions and limitations
+  under the License.
+
+-->
+<configuration>
+  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+    <encoder>
+      <pattern>%d{dd MMM yyyy HH:mm:ss,SSS} [%X{logSegregationId}] [%t] %-5p %c - %m%n</pattern>
+    </encoder>
+    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+      <level>ERROR</level>
+    </filter>
+  </appender>
+  <appender name="TEST_LOG_FILE" class="ch.qos.logback.core.FileAppender">
+    <file>target/test.log</file>
+    <encoder>
+      <pattern>%d{dd MMM yyyy HH:mm:ss,SSS} %X{logSegregationId} [%t] %-5p %c - %m%n</pattern>
+    </encoder>
+    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+      <level>INFO</level>
+    </filter>
+  </appender>
+  <logger name="org.apache.lens.client" additivity="false" level="DEBUG">
+    <appender-ref ref="STDOUT"/>
+    <appender-ref ref="TEST_LOG_FILE"/>
+  </logger>
+  <root level="INFO">
+    <appender-ref ref="STDOUT"/>
+    <appender-ref ref="TEST_LOG_FILE"/>
+  </root>
+</configuration>
+

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-cli/src/test/resources/sample-cube.xml
----------------------------------------------------------------------
diff --git a/lens-cli/src/test/resources/sample-cube.xml b/lens-cli/src/test/resources/sample-cube.xml
index e3b3284..9bcf177 100644
--- a/lens-cli/src/test/resources/sample-cube.xml
+++ b/lens-cli/src/test/resources/sample-cube.xml
@@ -26,23 +26,23 @@
     <property name="cube.sample_cube.timed.dimensions.list" value="dt" />
   </properties>
   <measures>
-    <measure name="measure1" type="BIGINT" />
-    <measure name="measure2" type="INT" default_aggr="SUM" />
-    <measure name="measure3" type="FLOAT" default_aggr="MAX" start_time='2013-12-12T00:00:00' />
-    <measure name="measure4" type="DOUBLE" default_aggr="MIN" />
+    <measure name="measure1" _type="BIGINT" />
+    <measure name="measure2" _type="INT" default_aggr="SUM" />
+    <measure name="measure3" _type="FLOAT" default_aggr="MAX" start_time='2013-12-12T00:00:00' />
+    <measure name="measure4" _type="DOUBLE" default_aggr="MIN" />
   </measures>
   <dim_attributes>
-    <dim_attribute name="dim1" type="INT" />
-    <dim_attribute name="dim2" type="INT" start_time='2013-12-01T00:00:00' />
-    <dim_attribute name="dim3" type="INT"/>
-    <dim_attribute name="dimDetail" type="string" description="City name to which the customer belongs"
+    <dim_attribute name="dim1" _type="INT" />
+    <dim_attribute name="dim2" _type="INT" start_time='2013-12-01T00:00:00' />
+    <dim_attribute name="dim3" _type="INT"/>
+    <dim_attribute name="dimDetail" _type="string" description="City name to which the customer belongs"
                    display_string="Customer City">
       <chain_ref_column chain_name="testdimchain" ref_col="detail" />
       <chain_ref_column chain_name="testdetailchain" ref_col="name" />
     </dim_attribute>
   </dim_attributes>
   <expressions>
-    <expression name="expr_msr5" type="DOUBLE">
+    <expression name="expr_msr5" _type="DOUBLE">
       <expr_spec expr = "measure3 + measure4" end_time='2013-12-12T00:00:00'/>
       <expr_spec expr = "measure3 + measure4 + 0.01" start_time='2013-12-12T00:00:00'/>
     </expression>

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-cli/src/test/resources/test-detail.xml
----------------------------------------------------------------------
diff --git a/lens-cli/src/test/resources/test-detail.xml b/lens-cli/src/test/resources/test-detail.xml
index bb54354..b51c188 100644
--- a/lens-cli/src/test/resources/test-detail.xml
+++ b/lens-cli/src/test/resources/test-detail.xml
@@ -22,8 +22,8 @@
 <x_dimension name="test_detail" xmlns="uri:lens:cube:0.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="uri:lens:cube:0.1 cube-0.1.xsd ">
   <attributes>
-    <dim_attribute name="id" type="INT" />
-    <dim_attribute name="name" type="STRING" />
+    <dim_attribute name="id" _type="INT" />
+    <dim_attribute name="name" _type="STRING" />
   </attributes>
 
   <properties>

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-cli/src/test/resources/test-dimension.xml
----------------------------------------------------------------------
diff --git a/lens-cli/src/test/resources/test-dimension.xml b/lens-cli/src/test/resources/test-dimension.xml
index 2fa47f1..01de8e6 100644
--- a/lens-cli/src/test/resources/test-dimension.xml
+++ b/lens-cli/src/test/resources/test-dimension.xml
@@ -22,20 +22,20 @@
 <x_dimension name="test_dim" xmlns="uri:lens:cube:0.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="uri:lens:cube:0.1 cube-0.1.xsd ">
   <attributes>
-    <dim_attribute name="id" type="INT" />
-    <dim_attribute name="name" type="STRING" />
-    <dim_attribute name="detail" type="STRING" start_time='2013-12-01T00:00:00' />
-    <dim_attribute name="d2id" type="INT" start_time='2013-12-01T00:00:00'/>
-    <dim_attribute name="inline" type="STRING" >
+    <dim_attribute name="id" _type="INT" />
+    <dim_attribute name="name" _type="STRING" />
+    <dim_attribute name="detail" _type="STRING" start_time='2013-12-01T00:00:00' />
+    <dim_attribute name="d2id" _type="INT" start_time='2013-12-01T00:00:00'/>
+    <dim_attribute name="inline" _type="STRING" >
       <values>A</values>
       <values>B</values>
       <values>C</values>
     </dim_attribute>
     <dim_attribute name="location">
       <hierarchy>
-        <dim_attribute name="zipcode" type="INT" />
-        <dim_attribute name="city" type="STRING" />
-        <dim_attribute name="state" type="STRING" />
+        <dim_attribute name="zipcode" _type="INT" />
+        <dim_attribute name="city" _type="STRING" />
+        <dim_attribute name="state" _type="STRING" />
       </hierarchy>
     </dim_attribute>
   </attributes>

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-client/src/main/java/org/apache/lens/client/LensConnection.java
----------------------------------------------------------------------
diff --git a/lens-client/src/main/java/org/apache/lens/client/LensConnection.java b/lens-client/src/main/java/org/apache/lens/client/LensConnection.java
index 30a7e2c..eeb473a 100644
--- a/lens-client/src/main/java/org/apache/lens/client/LensConnection.java
+++ b/lens-client/src/main/java/org/apache/lens/client/LensConnection.java
@@ -34,12 +34,14 @@ import javax.ws.rs.core.Response;
 import org.apache.lens.api.APIResult;
 import org.apache.lens.api.LensSessionHandle;
 import org.apache.lens.api.StringList;
+import org.apache.lens.api.util.MoxyJsonConfigurationContextResolver;
 import org.apache.lens.client.exceptions.LensClientServerConnectionException;
 
 import org.glassfish.jersey.media.multipart.FormDataBodyPart;
 import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
 import org.glassfish.jersey.media.multipart.FormDataMultiPart;
 import org.glassfish.jersey.media.multipart.MultiPartFeature;
+import org.glassfish.jersey.moxy.json.MoxyJsonFeature;
 
 import lombok.Getter;
 import lombok.extern.slf4j.Slf4j;
@@ -110,7 +112,8 @@ public class LensConnection {
   }
 
   public Client buildClient() {
-    ClientBuilder cb = ClientBuilder.newBuilder().register(MultiPartFeature.class);
+    ClientBuilder cb = ClientBuilder.newBuilder().register(MultiPartFeature.class).register(MoxyJsonFeature.class)
+      .register(MoxyJsonConfigurationContextResolver.class);
     Iterator<Class<?>> itr = params.getRequestFilters().iterator();
     while (itr.hasNext()) {
       cb.register(itr.next());

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-client/src/main/java/org/apache/lens/client/LensMetadataClient.java
----------------------------------------------------------------------
diff --git a/lens-client/src/main/java/org/apache/lens/client/LensMetadataClient.java b/lens-client/src/main/java/org/apache/lens/client/LensMetadataClient.java
index 4dec1a2..07ce41e 100644
--- a/lens-client/src/main/java/org/apache/lens/client/LensMetadataClient.java
+++ b/lens-client/src/main/java/org/apache/lens/client/LensMetadataClient.java
@@ -25,6 +25,7 @@ import java.util.Date;
 import java.util.List;
 
 import javax.ws.rs.client.*;
+import javax.ws.rs.core.GenericEntity;
 import javax.ws.rs.core.GenericType;
 import javax.ws.rs.core.MediaType;
 import javax.xml.bind.*;
@@ -35,8 +36,6 @@ import org.apache.lens.api.StringList;
 import org.apache.lens.api.jaxb.LensJAXBContext;
 import org.apache.lens.api.metastore.*;
 
-import org.glassfish.jersey.media.multipart.*;
-
 import com.google.common.base.Joiner;
 import lombok.extern.slf4j.Slf4j;
 
@@ -87,30 +86,27 @@ public class LensMetadataClient {
 
   public String getCurrentDatabase() {
     WebTarget target = getMetastoreWebTarget();
-    String database = target.path("databases").path("current")
+    return target.path("databases").path("current")
       .queryParam("sessionid", connection.getSessionHandle())
       .request().get(String.class);
-    return database;
   }
 
 
   public APIResult setDatabase(String database) {
     WebTarget target = getMetastoreWebTarget();
-    APIResult result = target.path("databases").path("current")
+    return target.path("databases").path("current")
       .queryParam("sessionid", this.connection.getSessionHandle())
       .request(MediaType.APPLICATION_XML_TYPE)
       .put(Entity.xml(database), APIResult.class);
-    return result;
   }
 
   public APIResult createDatabase(String database, boolean ignoreIfExists) {
     WebTarget target = getMetastoreWebTarget();
-    APIResult result = target.path("databases")
+    return target.path("databases")
       .queryParam("sessionid", this.connection.getSessionHandle())
       .queryParam("ignoreIfExisting", ignoreIfExists)
       .request(MediaType.APPLICATION_XML)
       .post(Entity.xml(database), APIResult.class);
-    return result;
   }
 
   public APIResult createDatabase(String database) {
@@ -156,19 +152,17 @@ public class LensMetadataClient {
 
   public APIResult dropAllCubes() {
     WebTarget target = getMetastoreWebTarget();
-    APIResult result = target.path("cubes")
+    return target.path("cubes")
       .queryParam("sessionid", this.connection.getSessionHandle())
       .request(MediaType.APPLICATION_XML).delete(APIResult.class);
-    return result;
   }
 
   public APIResult createCube(XCube cube) {
     WebTarget target = getMetastoreWebTarget();
-    APIResult result = target.path("cubes")
+    return target.path("cubes")
       .queryParam("sessionid", this.connection.getSessionHandle())
       .request(MediaType.APPLICATION_XML)
-      .post(Entity.xml(objFact.createXCube(cube)), APIResult.class);
-    return result;
+      .post(Entity.xml(new GenericEntity<JAXBElement<XCube>>(objFact.createXCube(cube)){}), APIResult.class);
   }
 
   private <T> T readFromXML(String filename) throws JAXBException, IOException {
@@ -194,11 +188,10 @@ public class LensMetadataClient {
 
   public APIResult updateCube(String cubeName, XCube cube) {
     WebTarget target = getMetastoreWebTarget();
-    APIResult result = target.path("cubes").path(cubeName)
+    return target.path("cubes").path(cubeName)
       .queryParam("sessionid", this.connection.getSessionHandle())
       .request(MediaType.APPLICATION_XML)
-      .put(Entity.xml(objFact.createXCube(cube)), APIResult.class);
-    return result;
+      .put(Entity.xml(new GenericEntity<JAXBElement<XCube>>(objFact.createXCube(cube)){}), APIResult.class);
   }
 
   public APIResult updateCube(String cubeName, String cubeSpec) {
@@ -239,10 +232,9 @@ public class LensMetadataClient {
 
   public APIResult dropCube(String cubeName) {
     WebTarget target = getMetastoreWebTarget();
-    APIResult result = target.path("cubes").path(cubeName)
+    return target.path("cubes").path(cubeName)
       .queryParam("sessionid", this.connection.getSessionHandle())
       .request(MediaType.APPLICATION_XML).delete(APIResult.class);
-    return result;
   }
 
   public List<String> getAllDimensions() {
@@ -255,19 +247,18 @@ public class LensMetadataClient {
 
   public APIResult dropAllDimensions() {
     WebTarget target = getMetastoreWebTarget();
-    APIResult result = target.path("dimensions")
+    return target.path("dimensions")
       .queryParam("sessionid", this.connection.getSessionHandle())
       .request(MediaType.APPLICATION_XML).delete(APIResult.class);
-    return result;
   }
 
   public APIResult createDimension(XDimension dimension) {
     WebTarget target = getMetastoreWebTarget();
-    APIResult result = target.path("dimensions")
+    return target.path("dimensions")
       .queryParam("sessionid", this.connection.getSessionHandle())
       .request(MediaType.APPLICATION_XML)
-      .post(Entity.xml(objFact.createXDimension(dimension)), APIResult.class);
-    return result;
+      .post(Entity.xml(new GenericEntity<JAXBElement<XDimension>>(objFact.createXDimension(dimension)){}),
+        APIResult.class);
   }
 
   public APIResult createDimension(String dimSpec) {
@@ -280,11 +271,11 @@ public class LensMetadataClient {
 
   public APIResult updateDimension(String dimName, XDimension dimension) {
     WebTarget target = getMetastoreWebTarget();
-    APIResult result = target.path("dimensions").path(dimName)
+    return target.path("dimensions").path(dimName)
       .queryParam("sessionid", this.connection.getSessionHandle())
       .request(MediaType.APPLICATION_XML)
-      .put(Entity.xml(objFact.createXDimension(dimension)), APIResult.class);
-    return result;
+      .put(Entity.xml(new GenericEntity<JAXBElement<XDimension>>(objFact.createXDimension(dimension)){}),
+        APIResult.class);
   }
 
   public APIResult updateDimension(String dimName, String dimSpec) {
@@ -306,10 +297,9 @@ public class LensMetadataClient {
 
   public APIResult dropDimension(String dimName) {
     WebTarget target = getMetastoreWebTarget();
-    APIResult result = target.path("dimensions").path(dimName)
+    return target.path("dimensions").path(dimName)
       .queryParam("sessionid", this.connection.getSessionHandle())
       .request(MediaType.APPLICATION_XML).delete(APIResult.class);
-    return result;
   }
 
   public List<String> getAllStorages() {
@@ -323,11 +313,10 @@ public class LensMetadataClient {
 
   public APIResult createNewStorage(XStorage storage) {
     WebTarget target = getMetastoreWebTarget();
-    APIResult result = target.path("storages")
+    return target.path("storages")
       .queryParam("sessionid", this.connection.getSessionHandle())
       .request(MediaType.APPLICATION_XML)
-      .post(Entity.xml(objFact.createXStorage(storage)), APIResult.class);
-    return result;
+      .post(Entity.xml(new GenericEntity<JAXBElement<XStorage>>(objFact.createXStorage(storage)){}), APIResult.class);
   }
 
 
@@ -341,20 +330,18 @@ public class LensMetadataClient {
 
   public APIResult dropAllStorages() {
     WebTarget target = getMetastoreWebTarget();
-    APIResult result = target.path("storages")
+    return target.path("storages")
       .queryParam("sessionid", this.connection.getSessionHandle())
       .request(MediaType.APPLICATION_XML)
       .delete(APIResult.class);
-    return result;
   }
 
   public APIResult updateStorage(String storageName, XStorage storage) {
     WebTarget target = getMetastoreWebTarget();
-    APIResult result = target.path("storages").path(storageName)
+    return target.path("storages").path(storageName)
       .queryParam("sessionid", this.connection.getSessionHandle())
       .request(MediaType.APPLICATION_XML)
-      .put(Entity.xml(objFact.createXStorage(storage)), APIResult.class);
-    return result;
+      .put(Entity.xml(new GenericEntity<JAXBElement<XStorage>>(objFact.createXStorage(storage)){}), APIResult.class);
   }
 
   public APIResult updateStorage(String storageName, String storage) {
@@ -377,11 +364,10 @@ public class LensMetadataClient {
 
   public APIResult dropStorage(String storageName) {
     WebTarget target = getMetastoreWebTarget();
-    APIResult result = target.path("storages").path(storageName)
+    return target.path("storages").path(storageName)
       .queryParam("sessionid", this.connection.getSessionHandle())
       .request(MediaType.APPLICATION_XML)
       .delete(APIResult.class);
-    return result;
   }
 
   public List<String> getAllFactTables(String cubeName) {
@@ -411,12 +397,11 @@ public class LensMetadataClient {
 
   public APIResult deleteAllFactTables(boolean cascade) {
     WebTarget target = getMetastoreWebTarget();
-    APIResult result = target.path("facts")
+    return target.path("facts")
       .queryParam("sessionid", this.connection.getSessionHandle())
       .queryParam("cascade", cascade)
       .request(MediaType.APPLICATION_XML)
       .delete(APIResult.class);
-    return result;
   }
 
 
@@ -432,17 +417,10 @@ public class LensMetadataClient {
 
   public APIResult createFactTable(XFactTable f) {
     WebTarget target = getMetastoreWebTarget();
-    FormDataMultiPart mp = new FormDataMultiPart();
-    mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid")
-      .build(), this.connection.getSessionHandle(), MediaType.APPLICATION_XML_TYPE));
-    mp.bodyPart(new FormDataBodyPart(
-      FormDataContentDisposition.name("fact").fileName("fact").build(),
-      objFact.createXFactTable(f), MediaType.APPLICATION_XML_TYPE));
-    APIResult result = target.path("facts")
-      .request(MediaType.APPLICATION_XML_TYPE)
-      .post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE),
-        APIResult.class);
-    return result;
+    return target.path("facts")
+      .queryParam("sessionid", this.connection.getSessionHandle())
+      .request(MediaType.APPLICATION_XML)
+      .post(Entity.xml(new GenericEntity<JAXBElement<XFactTable>>(objFact.createXFactTable(f)){}), APIResult.class);
   }
 
   public APIResult createFactTable(String factSpec) {
@@ -455,11 +433,10 @@ public class LensMetadataClient {
 
   public APIResult updateFactTable(String factName, XFactTable table) {
     WebTarget target = getMetastoreWebTarget();
-    APIResult result = target.path("facts").path(factName)
+    return target.path("facts").path(factName)
       .queryParam("sessionid", this.connection.getSessionHandle())
       .request(MediaType.APPLICATION_XML_TYPE)
-      .put(Entity.xml(objFact.createXFactTable(table)), APIResult.class);
-    return result;
+      .put(Entity.xml(new GenericEntity<JAXBElement<XFactTable>>(objFact.createXFactTable(table)){}), APIResult.class);
   }
 
   public APIResult updateFactTable(String factName, String table) {
@@ -472,12 +449,11 @@ public class LensMetadataClient {
 
   public APIResult dropFactTable(String factName, boolean cascade) {
     WebTarget target = getMetastoreWebTarget();
-    APIResult result = target.path("facts").path(factName)
+    return target.path("facts").path(factName)
       .queryParam("sessionid", this.connection.getSessionHandle())
       .queryParam("cascade", cascade)
       .request(MediaType.APPLICATION_XML)
       .delete(APIResult.class);
-    return result;
   }
 
   public APIResult dropFactTable(String factName) {
@@ -495,20 +471,19 @@ public class LensMetadataClient {
 
   public APIResult dropAllStoragesOfFactTable(String factName) {
     WebTarget target = getMetastoreWebTarget();
-    APIResult result = target.path("facts").path(factName).path("storages")
+    return target.path("facts").path(factName).path("storages")
       .queryParam("sessionid", this.connection.getSessionHandle())
       .request(MediaType.APPLICATION_XML)
       .delete(APIResult.class);
-    return result;
   }
 
   public APIResult addStorageToFactTable(String factname, XStorageTableElement storage) {
     WebTarget target = getMetastoreWebTarget();
-    APIResult result = target.path("facts").path(factname).path("storages")
+    return target.path("facts").path(factname).path("storages")
       .queryParam("sessionid", this.connection.getSessionHandle())
       .request(MediaType.APPLICATION_XML)
-      .post(Entity.xml(objFact.createXStorageTableElement(storage)), APIResult.class);
-    return result;
+      .post(Entity.xml(new GenericEntity<JAXBElement<XStorageTableElement>>(
+        objFact.createXStorageTableElement(storage)){}), APIResult.class);
   }
 
   public APIResult addStorageToFactTable(String factname, String storageSpec) {
@@ -521,11 +496,10 @@ public class LensMetadataClient {
 
   public APIResult dropStorageFromFactTable(String factName, String storageName) {
     WebTarget target = getMetastoreWebTarget();
-    APIResult result = target.path("facts").path(factName).path("storages").path(storageName)
+    return target.path("facts").path(factName).path("storages").path(storageName)
       .queryParam("sessionid", this.connection.getSessionHandle())
       .request(MediaType.APPLICATION_XML)
       .delete(APIResult.class);
-    return result;
   }
 
   public XStorageTableElement getStorageOfFactTable(String factName, String storageName) {
@@ -557,13 +531,12 @@ public class LensMetadataClient {
 
   public APIResult dropPartitionsOfFactTable(String factName, String storage, String filter) {
     WebTarget target = getMetastoreWebTarget();
-    APIResult result = target.path("facts").path(factName)
+    return target.path("facts").path(factName)
       .path("storages").path(storage).path("partitions")
       .queryParam("sessionid", this.connection.getSessionHandle())
       .queryParam("filter", filter)
       .request(MediaType.APPLICATION_XML)
       .delete(APIResult.class);
-    return result;
   }
 
   public APIResult dropPartitionsOfFactTable(String factName, String storage) {
@@ -575,13 +548,12 @@ public class LensMetadataClient {
     String values = Joiner.on(",").skipNulls().join(partitions);
 
     WebTarget target = getMetastoreWebTarget();
-    APIResult result = target.path("facts").path(factName)
+    return target.path("facts").path(factName)
       .path("storages").path(storage).path("partitions")
       .queryParam("sessionid", this.connection.getSessionHandle())
       .queryParam("values", values)
       .request(MediaType.APPLICATION_XML)
       .delete(APIResult.class);
-    return result;
   }
 
 
@@ -610,18 +582,11 @@ public class LensMetadataClient {
 
   public APIResult createDimensionTable(XDimensionTable table) {
     WebTarget target = getMetastoreWebTarget();
-
-    FormDataMultiPart mp = new FormDataMultiPart();
-    mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(),
-      this.connection.getSessionHandle(), MediaType.APPLICATION_XML_TYPE));
-    mp.bodyPart(new FormDataBodyPart(
-      FormDataContentDisposition.name("dimensionTable").fileName("dimtable").build(),
-      objFact.createXDimensionTable(table), MediaType.APPLICATION_XML_TYPE));
-
-    APIResult result = target.path("dimtables")
+    return target.path("dimtables")
+      .queryParam("sessionid", this.connection.getSessionHandle())
       .request(MediaType.APPLICATION_XML)
-      .post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE), APIResult.class);
-    return result;
+      .post(Entity.xml(new GenericEntity<JAXBElement<XDimensionTable>>(objFact.createXDimensionTable(table)){}),
+        APIResult.class);
   }
 
   public APIResult createDimensionTable(String tableXml) {
@@ -636,11 +601,11 @@ public class LensMetadataClient {
   public APIResult updateDimensionTable(XDimensionTable table) {
     String dimTableName = table.getTableName();
     WebTarget target = getMetastoreWebTarget();
-    APIResult result = target.path("dimtables").path(dimTableName)
+    return target.path("dimtables").path(dimTableName)
       .queryParam("sessionid", this.connection.getSessionHandle())
       .request(MediaType.APPLICATION_XML)
-      .put(Entity.xml(objFact.createXDimensionTable(table)), APIResult.class);
-    return result;
+      .put(Entity.xml(new GenericEntity<JAXBElement<XDimensionTable>>(objFact.createXDimensionTable(table)){}),
+        APIResult.class);
   }
 
   public APIResult updateDimensionTable(String dimTblName, String dimSpec) {
@@ -655,12 +620,11 @@ public class LensMetadataClient {
 
   public APIResult dropDimensionTable(String table, boolean cascade) {
     WebTarget target = getMetastoreWebTarget();
-    APIResult result = target.path("dimtables").path(table)
+    return target.path("dimtables").path(table)
       .queryParam("sessionid", this.connection.getSessionHandle())
       .queryParam("cascade", cascade)
       .request(MediaType.APPLICATION_XML)
       .delete(APIResult.class);
-    return result;
   }
 
   public APIResult dropDimensionTable(String table) {
@@ -689,11 +653,11 @@ public class LensMetadataClient {
 
   public APIResult addStorageToDimTable(String dimTblName, XStorageTableElement table) {
     WebTarget target = getMetastoreWebTarget();
-    APIResult result = target.path("dimtables").path(dimTblName).path("storages")
+    return target.path("dimtables").path(dimTblName).path("storages")
       .queryParam("sessionid", this.connection.getSessionHandle())
       .request(MediaType.APPLICATION_XML)
-      .post(Entity.xml(objFact.createXStorageTableElement(table)), APIResult.class);
-    return result;
+      .post(Entity.xml(new GenericEntity<JAXBElement<XStorageTableElement>>(
+        objFact.createXStorageTableElement(table)){}), APIResult.class);
   }
 
   public APIResult addStorageToDimTable(String dimTblName, String table) {
@@ -717,22 +681,20 @@ public class LensMetadataClient {
 
   public APIResult dropAllStoragesOfDimension(String dimTblName) {
     WebTarget target = getMetastoreWebTarget();
-    APIResult result = target.path("dimtables").path(dimTblName).path("storages")
+    return target.path("dimtables").path(dimTblName).path("storages")
       .queryParam("sessionid", this.connection.getSessionHandle())
       .request(MediaType.APPLICATION_XML)
       .delete(APIResult.class);
-    return result;
   }
 
 
   public APIResult dropStoragesOfDimensionTable(String dimTblName, String storage) {
     WebTarget target = getMetastoreWebTarget();
-    APIResult result = target.path("dimtables").path(dimTblName)
+    return target.path("dimtables").path(dimTblName)
       .path("storages").path(storage)
       .queryParam("sessionid", this.connection.getSessionHandle())
       .request(MediaType.APPLICATION_XML)
       .delete(APIResult.class);
-    return result;
   }
 
   public List<XPartition> getAllPartitionsOfDimensionTable(String dimTblName, String storage,
@@ -755,13 +717,12 @@ public class LensMetadataClient {
   public APIResult dropAllPartitionsOfDimensionTable(String dimTblName, String storage,
     String filter) {
     WebTarget target = getMetastoreWebTarget();
-    APIResult result = target.path("dimtables").path(dimTblName)
+    return target.path("dimtables").path(dimTblName)
       .path("storages").path(storage).path("partitions")
       .queryParam("sessionid", this.connection.getSessionHandle())
       .queryParam("filter", filter)
       .request(MediaType.APPLICATION_XML)
       .delete(APIResult.class);
-    return result;
   }
 
   public APIResult dropAllPartitionsOfDimensionTable(String dimTblName, String storage) {
@@ -772,24 +733,23 @@ public class LensMetadataClient {
     List<String> vals) {
     String values = Joiner.on(",").skipNulls().join(vals);
     WebTarget target = getMetastoreWebTarget();
-    APIResult result = target.path("dimtables").path(dimTblName)
+    return target.path("dimtables").path(dimTblName)
       .path("storages").path(storage).path("partitions")
       .queryParam("sessionid", this.connection.getSessionHandle())
       .queryParam("values", values)
       .request(MediaType.APPLICATION_XML)
       .delete(APIResult.class);
-    return result;
   }
 
   public APIResult addPartitionToDimensionTable(String dimTblName, String storage,
     XPartition partition) {
     WebTarget target = getMetastoreWebTarget();
-    APIResult result = target.path("dimtables").path(dimTblName)
+    return target.path("dimtables").path(dimTblName)
       .path("storages").path(storage).path("partition")
       .queryParam("sessionid", this.connection.getSessionHandle())
       .request(MediaType.APPLICATION_XML)
-      .post(Entity.xml(objFact.createXPartition(partition)), APIResult.class);
-    return result;
+      .post(Entity.xml(new GenericEntity<JAXBElement<XPartition>>(objFact.createXPartition(partition)){}),
+        APIResult.class);
   }
 
   public APIResult addPartitionToDimensionTable(String dimTblName, String storage,
@@ -804,12 +764,12 @@ public class LensMetadataClient {
   public APIResult addPartitionsToDimensionTable(String dimTblName, String storage,
     XPartitionList partitions) {
     WebTarget target = getMetastoreWebTarget();
-    APIResult result = target.path("dimtables").path(dimTblName)
+    return target.path("dimtables").path(dimTblName)
       .path("storages").path(storage).path("partitions")
       .queryParam("sessionid", this.connection.getSessionHandle())
       .request(MediaType.APPLICATION_XML)
-      .post(Entity.xml(objFact.createXPartitionList(partitions)), APIResult.class);
-    return result;
+      .post(Entity.xml(new GenericEntity<JAXBElement<XPartitionList>>(objFact.createXPartitionList(partitions)){}),
+        APIResult.class);
   }
 
   public APIResult addPartitionsToDimensionTable(String dimTblName, String storage,
@@ -824,12 +784,12 @@ public class LensMetadataClient {
   public APIResult addPartitionToFactTable(String fact, String storage,
     XPartition partition) {
     WebTarget target = getMetastoreWebTarget();
-    APIResult result = target.path("facts").path(fact)
+    return target.path("facts").path(fact)
       .path("storages").path(storage).path("partition")
       .queryParam("sessionid", this.connection.getSessionHandle())
       .request(MediaType.APPLICATION_XML)
-      .post(Entity.xml(objFact.createXPartition(partition)), APIResult.class);
-    return result;
+      .post(Entity.xml(new GenericEntity<JAXBElement<XPartition>>(objFact.createXPartition(partition)){}),
+        APIResult.class);
   }
 
   public APIResult addPartitionToFactTable(String fact, String storage,
@@ -844,12 +804,12 @@ public class LensMetadataClient {
   public APIResult addPartitionsToFactTable(String fact, String storage,
     XPartitionList partitions) {
     WebTarget target = getMetastoreWebTarget();
-    APIResult result = target.path("facts").path(fact)
+    return target.path("facts").path(fact)
       .path("storages").path(storage).path("partitions")
       .queryParam("sessionid", this.connection.getSessionHandle())
       .request(MediaType.APPLICATION_XML)
-      .post(Entity.xml(objFact.createXPartitionList(partitions)), APIResult.class);
-    return result;
+      .post(Entity.xml(new GenericEntity<JAXBElement<XPartitionList>>(objFact.createXPartitionList(partitions)){}),
+        APIResult.class);
   }
 
   public APIResult addPartitionsToFactTable(String fact, String storage,
@@ -864,12 +824,12 @@ public class LensMetadataClient {
   public APIResult updatePartitionOfDimensionTable(String dimTblName, String storage,
     XPartition partition) {
     WebTarget target = getMetastoreWebTarget();
-    APIResult result = target.path("dimtables").path(dimTblName)
+    return target.path("dimtables").path(dimTblName)
       .path("storages").path(storage).path("partition")
       .queryParam("sessionid", this.connection.getSessionHandle())
       .request(MediaType.APPLICATION_XML)
-      .put(Entity.xml(objFact.createXPartition(partition)), APIResult.class);
-    return result;
+      .put(Entity.xml(new GenericEntity<JAXBElement<XPartition>>(objFact.createXPartition(partition)){}),
+        APIResult.class);
   }
 
   public APIResult updatePartitionOfDimensionTable(String dimTblName, String storage,
@@ -884,12 +844,12 @@ public class LensMetadataClient {
   public APIResult updatePartitionsOfDimensionTable(String dimTblName, String storage,
     XPartitionList partitions) {
     WebTarget target = getMetastoreWebTarget();
-    APIResult result = target.path("dimtables").path(dimTblName)
+    return target.path("dimtables").path(dimTblName)
       .path("storages").path(storage).path("partitions")
       .queryParam("sessionid", this.connection.getSessionHandle())
       .request(MediaType.APPLICATION_XML)
-      .put(Entity.xml(objFact.createXPartitionList(partitions)), APIResult.class);
-    return result;
+      .put(Entity.xml(new GenericEntity<JAXBElement<XPartitionList>>(objFact.createXPartitionList(partitions)){}),
+        APIResult.class);
   }
 
   public APIResult updatePartitionsOfDimensionTable(String dimTblName, String storage,
@@ -904,12 +864,12 @@ public class LensMetadataClient {
   public APIResult updatePartitionOfFactTable(String fact, String storage,
     XPartition partition) {
     WebTarget target = getMetastoreWebTarget();
-    APIResult result = target.path("facts").path(fact)
+    return target.path("facts").path(fact)
       .path("storages").path(storage).path("partition")
       .queryParam("sessionid", this.connection.getSessionHandle())
       .request(MediaType.APPLICATION_XML)
-      .put(Entity.xml(objFact.createXPartition(partition)), APIResult.class);
-    return result;
+      .put(Entity.xml(new GenericEntity<JAXBElement<XPartition>>(objFact.createXPartition(partition)){}),
+        APIResult.class);
   }
 
   public APIResult updatePartitionOfFactTable(String fact, String storage,
@@ -924,12 +884,12 @@ public class LensMetadataClient {
   public APIResult updatePartitionsOfFactTable(String fact, String storage,
     XPartitionList partitions) {
     WebTarget target = getMetastoreWebTarget();
-    APIResult result = target.path("facts").path(fact)
+    return target.path("facts").path(fact)
       .path("storages").path(storage).path("partitions")
       .queryParam("sessionid", this.connection.getSessionHandle())
       .request(MediaType.APPLICATION_XML)
-      .put(Entity.xml(objFact.createXPartitionList(partitions)), APIResult.class);
-    return result;
+      .put(Entity.xml(new GenericEntity<JAXBElement<XPartitionList>>(objFact.createXPartitionList(partitions)){}),
+        APIResult.class);
   }
 
   public APIResult updatePartitionsOfFactTable(String fact, String storage,

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-client/src/main/java/org/apache/lens/client/LensStatement.java
----------------------------------------------------------------------
diff --git a/lens-client/src/main/java/org/apache/lens/client/LensStatement.java b/lens-client/src/main/java/org/apache/lens/client/LensStatement.java
index 8de7708..0009182 100644
--- a/lens-client/src/main/java/org/apache/lens/client/LensStatement.java
+++ b/lens-client/src/main/java/org/apache/lens/client/LensStatement.java
@@ -28,6 +28,7 @@ import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
 import org.apache.lens.api.APIResult;
+import org.apache.lens.api.LensConf;
 import org.apache.lens.api.query.*;
 import org.apache.lens.api.query.QueryStatus.Status;
 
@@ -41,11 +42,13 @@ import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
 import org.glassfish.jersey.media.multipart.FormDataMultiPart;
 
 import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 
 /**
  * Top level class which is used to execute lens queries.
  */
 @RequiredArgsConstructor
+@Slf4j
 public class LensStatement {
 
   /** The connection. */
@@ -125,7 +128,7 @@ public class LensStatement {
    */
   public LensAPIResult<QueryPrepareHandle> prepareQuery(String sql, String queryName) throws LensAPIException {
     if (!connection.isOpen()) {
-      throw new IllegalStateException("Lens Connection has to be " + "established before querying");
+      throw new IllegalStateException("Lens Connection has to be established before querying");
     }
 
     Client client = connection.buildClient();
@@ -151,7 +154,7 @@ public class LensStatement {
    */
   public LensAPIResult<QueryPlan> explainAndPrepare(String sql, String queryName) throws LensAPIException {
     if (!connection.isOpen()) {
-      throw new IllegalStateException("Lens Connection has to be " + "established before querying");
+      throw new IllegalStateException("Lens Connection has to be established before querying");
     }
 
     Client client = connection.buildClient();
@@ -186,6 +189,8 @@ public class LensStatement {
     if (!StringUtils.isBlank(queryName)) {
       mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("queryName").build(), queryName));
     }
+    mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), new LensConf(),
+      MediaType.APPLICATION_XML_TYPE));
     return mp;
   }
 
@@ -260,6 +265,7 @@ public class LensStatement {
         .get(LensQuery.class);
       return query;
     } catch (Exception e) {
+      log.error("Failed to get query status, cause:", e);
       throw new IllegalStateException("Failed to get query status, cause:" + e.getMessage());
     }
   }
@@ -277,7 +283,8 @@ public class LensStatement {
       return target.path(handle.toString()).queryParam("sessionid", connection.getSessionHandle()).request()
         .get(LensPreparedQuery.class);
     } catch (Exception e) {
-      throw new IllegalStateException("Failed to get query status, cause:" + e.getMessage());
+      log.error("Failed to get prepared query, cause:", e);
+      throw new IllegalStateException("Failed to get prepared query, cause:" + e.getMessage());
     }
   }
 
@@ -290,7 +297,7 @@ public class LensStatement {
    */
   private LensAPIResult<QueryHandle> executeQuery(String sql, String queryName) throws LensAPIException {
     if (!connection.isOpen()) {
-      throw new IllegalStateException("Lens Connection has to be " + "established before querying");
+      throw new IllegalStateException("Lens Connection has to be established before querying");
     }
 
     Client client  = connection.buildClient();
@@ -301,7 +308,8 @@ public class LensStatement {
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "execute"));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("queryName").build(), queryName == null ? ""
       : queryName));
-
+    mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), new LensConf(),
+      MediaType.APPLICATION_XML_TYPE));
     WebTarget target = getQueryWebTarget(client);
 
     Response response = target.request().post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE));
@@ -333,7 +341,8 @@ public class LensStatement {
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "execute"));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("queryName").build(), queryName == null ? ""
       : queryName));
-
+    mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), new LensConf(),
+      MediaType.APPLICATION_XML_TYPE));
     QueryHandle handle = target.request()
       .post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE), QueryHandle.class);
 
@@ -358,7 +367,8 @@ public class LensStatement {
       .getSessionHandle(), MediaType.APPLICATION_XML_TYPE));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(), sql));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "explain"));
-
+    mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), new LensConf(),
+      MediaType.APPLICATION_XML_TYPE));
     WebTarget target = getQueryWebTarget(client);
 
     Response response = target.request().post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE));
@@ -432,6 +442,7 @@ public class LensStatement {
       return target.path(query.getQueryHandle().toString()).path("resultsetmetadata")
         .queryParam("sessionid", connection.getSessionHandle()).request().get(QueryResultSetMetadata.class);
     } catch (Exception e) {
+      log.error("Failed to get resultset metadata, cause:", e);
       throw new IllegalStateException("Failed to get resultset metadata, cause:" + e.getMessage());
     }
   }
@@ -452,15 +463,17 @@ public class LensStatement {
    */
   public QueryResult getResultSet(LensQuery query) {
     if (query.getStatus().getStatus() != QueryStatus.Status.SUCCESSFUL) {
-      throw new IllegalArgumentException("Result set metadata " + "can be only queries for successful queries");
+      throw new IllegalArgumentException("Result set metadata can be only queries for successful queries");
     }
     Client client = connection.buildClient();
 
     try {
       WebTarget target = getQueryWebTarget(client);
       return target.path(query.getQueryHandle().toString()).path("resultset")
-        .queryParam("sessionid", connection.getSessionHandle()).request().get(QueryResult.class);
+        .queryParam("sessionid", connection.getSessionHandle()).request(MediaType.APPLICATION_XML_TYPE).get(
+          QueryResult.class);
     } catch (Exception e) {
+      log.error("Failed to get resultset, cause:", e);
       throw new IllegalStateException("Failed to get resultset, cause:" + e.getMessage());
     }
   }
@@ -482,7 +495,8 @@ public class LensStatement {
       return target.path(query.getQueryHandle().toString()).path("httpresultset")
         .queryParam("sessionid", connection.getSessionHandle()).request().get();
     } catch (Exception e) {
-      throw new IllegalStateException("Failed to get resultset, cause:" + e.getMessage());
+      log.error("Failed to get http resultset, cause:", e);
+      throw new IllegalStateException("Failed to get http resultset, cause:" + e.getMessage());
     }
   }
 

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-examples/src/main/java/org/apache/lens/examples/SampleMetastore.java
----------------------------------------------------------------------
diff --git a/lens-examples/src/main/java/org/apache/lens/examples/SampleMetastore.java b/lens-examples/src/main/java/org/apache/lens/examples/SampleMetastore.java
index 1fbd358..b6385d4 100644
--- a/lens-examples/src/main/java/org/apache/lens/examples/SampleMetastore.java
+++ b/lens-examples/src/main/java/org/apache/lens/examples/SampleMetastore.java
@@ -185,6 +185,9 @@ public class SampleMetastore {
       if (metastore.retCode != 0) {
         System.exit(metastore.retCode);
       }
+    } catch (Throwable th) {
+      log.error("Error during creating sample metastore", th);
+      throw th;
     } finally {
       if (metastore != null) {
         metastore.close();

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-examples/src/main/resources/city.xml
----------------------------------------------------------------------
diff --git a/lens-examples/src/main/resources/city.xml b/lens-examples/src/main/resources/city.xml
index 1a89a2a..fe89ca7 100644
--- a/lens-examples/src/main/resources/city.xml
+++ b/lens-examples/src/main/resources/city.xml
@@ -22,10 +22,10 @@
 <x_dimension name="city" xmlns="uri:lens:cube:0.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="uri:lens:cube:0.1 cube-0.1.xsd ">
   <attributes>
-    <dim_attribute name="id" type="INT"/>
-    <dim_attribute name="name" type="STRING"/>
-    <dim_attribute name="POI" type="ARRAY&lt;STRING&gt;" description="Point of interests"/>
-    <dim_attribute name="population" type="BIGINT" />
+    <dim_attribute name="id" _type="INT"/>
+    <dim_attribute name="name" _type="STRING"/>
+    <dim_attribute name="POI" _type="ARRAY&lt;STRING&gt;" description="Point of interests"/>
+    <dim_attribute name="population" _type="BIGINT" />
   </attributes>
   <properties>
     <property name="dimension.city.timed.dimension" value="dt"/>

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-examples/src/main/resources/city_subset.xml
----------------------------------------------------------------------
diff --git a/lens-examples/src/main/resources/city_subset.xml b/lens-examples/src/main/resources/city_subset.xml
index 18c7847..e39e5c3 100644
--- a/lens-examples/src/main/resources/city_subset.xml
+++ b/lens-examples/src/main/resources/city_subset.xml
@@ -22,8 +22,8 @@
 <x_dimension_table dimension_name="city" table_name="city_subset" weight="100.0" xmlns="uri:lens:cube:0.1"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="uri:lens:cube:0.1 cube-0.1.xsd ">
   <columns>
-    <column comment="ID" name="id" type="INT"/>
-    <column comment="name" name="name" type="STRING"/>
+    <column comment="ID" name="id" _type="INT"/>
+    <column comment="name" name="name" _type="STRING"/>
   </columns>
   <storage_tables>
     <storage_table>

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-examples/src/main/resources/city_table.xml
----------------------------------------------------------------------
diff --git a/lens-examples/src/main/resources/city_table.xml b/lens-examples/src/main/resources/city_table.xml
index 27be305..1f9f152 100644
--- a/lens-examples/src/main/resources/city_table.xml
+++ b/lens-examples/src/main/resources/city_table.xml
@@ -22,10 +22,10 @@
 <x_dimension_table dimension_name="city" table_name="city_table" weight="10.0" xmlns="uri:lens:cube:0.1"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="uri:lens:cube:0.1 cube-0.1.xsd ">
   <columns>
-    <column comment="ID" name="id" type="INT"/>
-    <column comment="name" name="name" type="STRING"/>
-    <column comment="Point of interests" name="POI" type="ARRAY&lt;STRING&gt;"/>
-    <column comment="city population" name="population" type="BIGINT"/>
+    <column comment="ID" name="id" _type="INT"/>
+    <column comment="name" name="name" _type="STRING"/>
+    <column comment="Point of interests" name="POI" _type="ARRAY&lt;STRING&gt;"/>
+    <column comment="city population" name="population" _type="BIGINT"/>
   </columns>
   <properties>
     <property name="city.prop" value="d1"/>
@@ -38,7 +38,7 @@
       <storage_name>local</storage_name>
       <table_desc external="true" field_delimiter="," collection_delimiter=":" table_location="/tmp/examples/city">
         <part_cols>
-          <column comment="Time column" name="dt" type="STRING"/>
+          <column comment="Time column" name="dt" _type="STRING"/>
         </part_cols>
         <time_part_cols>dt</time_part_cols>
       </table_desc>

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-examples/src/main/resources/customer.xml
----------------------------------------------------------------------
diff --git a/lens-examples/src/main/resources/customer.xml b/lens-examples/src/main/resources/customer.xml
index c6182a2..0bb66f6 100644
--- a/lens-examples/src/main/resources/customer.xml
+++ b/lens-examples/src/main/resources/customer.xml
@@ -22,19 +22,19 @@
 <x_dimension name="customer" xmlns="uri:lens:cube:0.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="uri:lens:cube:0.1 cube-0.1.xsd ">
   <attributes>
-    <dim_attribute name="id" type="INT"/>
-    <dim_attribute name="name" type="STRING"/>
-    <dim_attribute name="gender" type="STRING">
+    <dim_attribute name="id" _type="INT"/>
+    <dim_attribute name="name" _type="STRING"/>
+    <dim_attribute name="gender" _type="STRING">
       <values>M</values>
       <values>F</values>
     </dim_attribute>
-    <dim_attribute name="age" type="INT" />
-    <dim_attribute name="city_id" type="INT" />
-    <dim_attribute name="customer_city_name" type="string" description="City name to which the customer belongs"
+    <dim_attribute name="age" _type="INT" />
+    <dim_attribute name="city_id" _type="INT" />
+    <dim_attribute name="customer_city_name" _type="string" description="City name to which the customer belongs"
       display_string="Customer City">
       <chain_ref_column chain_name="customer_city" ref_col="name" />
     </dim_attribute>
-    <dim_attribute name="customer_credit_status" type="STRING" start_time='2015-03-01T00:00:00'/>
+    <dim_attribute name="customer_credit_status" _type="STRING" start_time='2015-03-01T00:00:00'/>
   </attributes>
   <join_chains>
     <join_chain name="customer_city">


[6/7] lens git commit: LENS-920 : Fix issues in producing and consuming json for all api

Posted by am...@apache.org.
http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-examples/src/main/resources/customer_table.xml
----------------------------------------------------------------------
diff --git a/lens-examples/src/main/resources/customer_table.xml b/lens-examples/src/main/resources/customer_table.xml
index af308c2..28067bb 100644
--- a/lens-examples/src/main/resources/customer_table.xml
+++ b/lens-examples/src/main/resources/customer_table.xml
@@ -22,12 +22,12 @@
 <x_dimension_table dimension_name="customer" table_name="customer_table" weight="100.0" xmlns="uri:lens:cube:0.1"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="uri:lens:cube:0.1 cube-0.1.xsd ">
   <columns>
-    <column comment="ID" name="id" type="INT"/>
-    <column comment="name" name="name" type="STRING"/>
-    <column comment="" name="gender" type="STRING"/>
-    <column comment="" name="age" type="INT"/>
-    <column comment="" name="city_id" type="INT"/>
-    <column comment="" name="customer_credit_status" type="STRING"/>
+    <column comment="ID" name="id" _type="INT"/>
+    <column comment="name" name="name" _type="STRING"/>
+    <column comment="" name="gender" _type="STRING"/>
+    <column comment="" name="age" _type="INT"/>
+    <column comment="" name="city_id" _type="INT"/>
+    <column comment="" name="customer_credit_status" _type="STRING"/>
   </columns>
   <properties>
     <property name="dim4.prop" value="d1"/>
@@ -40,7 +40,7 @@
       <storage_name>local</storage_name>
       <table_desc external="true" field_delimiter="," table_location="/tmp/examples/customer">
         <part_cols>
-          <column comment="Time column" name="dt" type="STRING"/>
+          <column comment="Time column" name="dt" _type="STRING"/>
         </part_cols>
         <time_part_cols>dt</time_part_cols>
       </table_desc>

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-examples/src/main/resources/dim_table.xml
----------------------------------------------------------------------
diff --git a/lens-examples/src/main/resources/dim_table.xml b/lens-examples/src/main/resources/dim_table.xml
index 10c9ac0..7659555 100644
--- a/lens-examples/src/main/resources/dim_table.xml
+++ b/lens-examples/src/main/resources/dim_table.xml
@@ -22,10 +22,10 @@
 <x_dimension_table dimension_name="sample_dim" table_name="dim_table" weight="100.0" xmlns="uri:lens:cube:0.1"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="uri:lens:cube:0.1 cube-0.1.xsd ">
   <columns>
-    <column comment="ID" name="id" type="INT"/>
-    <column comment="name" name="name" type="STRING"/>
-    <column comment="more details" name="detail" type="STRING"/>
-    <column comment="d2 ID" name="d2id" type="INT"/>
+    <column comment="ID" name="id" _type="INT"/>
+    <column comment="name" name="name" _type="STRING"/>
+    <column comment="more details" name="detail" _type="STRING"/>
+    <column comment="d2 ID" name="d2id" _type="INT"/>
   </columns>
   <properties>
     <property name="dim1.prop" value="d1"/>
@@ -38,7 +38,7 @@
       <storage_name>local</storage_name>
       <table_desc external="true" field_delimiter="," table_location="/tmp/examples/dim1">
         <part_cols>
-          <column comment="Time column" name="dt" type="STRING"/>
+          <column comment="Time column" name="dt" _type="STRING"/>
         </part_cols>
         <time_part_cols>dt</time_part_cols>
       </table_desc>

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-examples/src/main/resources/dim_table2.xml
----------------------------------------------------------------------
diff --git a/lens-examples/src/main/resources/dim_table2.xml b/lens-examples/src/main/resources/dim_table2.xml
index e72f9c5..3a449c4 100644
--- a/lens-examples/src/main/resources/dim_table2.xml
+++ b/lens-examples/src/main/resources/dim_table2.xml
@@ -22,9 +22,9 @@
 <x_dimension_table dimension_name="sample_dim2" table_name="dim_table2" weight="100.0" xmlns="uri:lens:cube:0.1"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="uri:lens:cube:0.1 cube-0.1.xsd ">
   <columns>
-    <column comment="ID" name="id" type="INT"/>
-    <column comment="name" name="name" type="STRING"/>
-    <column comment="more details for dim2" name="detail2" type="STRING"/>
+    <column comment="ID" name="id" _type="INT"/>
+    <column comment="name" name="name" _type="STRING"/>
+    <column comment="more details for dim2" name="detail2" _type="STRING"/>
   </columns>
   <properties>
     <property name="dim2.prop" value="d2"/>
@@ -37,7 +37,7 @@
       <storage_name>local</storage_name>
       <table_desc external="true" field_delimiter="," table_location="/tmp/examples/dim2">
         <part_cols>
-          <column comment="Time column" name="dt" type="STRING"/>
+          <column comment="Time column" name="dt" _type="STRING"/>
         </part_cols>
         <time_part_cols>dt</time_part_cols>
       </table_desc>

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-examples/src/main/resources/dim_table3.xml
----------------------------------------------------------------------
diff --git a/lens-examples/src/main/resources/dim_table3.xml b/lens-examples/src/main/resources/dim_table3.xml
index 7955426..4f67af8 100644
--- a/lens-examples/src/main/resources/dim_table3.xml
+++ b/lens-examples/src/main/resources/dim_table3.xml
@@ -22,10 +22,10 @@
 <x_dimension_table dimension_name="sample_db_dim" table_name="dim_table3" weight="100.0" xmlns="uri:lens:cube:0.1"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="uri:lens:cube:0.1 cube-0.1.xsd ">
   <columns>
-    <column comment="ID" name="id" type="INT"/>
-    <column comment="name" name="name" type="STRING"/>
-    <column comment="more details" name="detail" type="STRING"/>
-    <column comment="d2 ID" name="d2id" type="INT"/>
+    <column comment="ID" name="id" _type="INT"/>
+    <column comment="name" name="name" _type="STRING"/>
+    <column comment="more details" name="detail" _type="STRING"/>
+    <column comment="d2 ID" name="d2id" _type="INT"/>
   </columns>
   <properties>
     <property name="dim3.prop" value="d1"/>

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-examples/src/main/resources/dim_table4.xml
----------------------------------------------------------------------
diff --git a/lens-examples/src/main/resources/dim_table4.xml b/lens-examples/src/main/resources/dim_table4.xml
index 9de1cd7..56c22b3 100644
--- a/lens-examples/src/main/resources/dim_table4.xml
+++ b/lens-examples/src/main/resources/dim_table4.xml
@@ -22,10 +22,10 @@
 <x_dimension_table dimension_name="sample_dim" table_name="dim_table4" weight="100.0" xmlns="uri:lens:cube:0.1"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="uri:lens:cube:0.1 cube-0.1.xsd ">
   <columns>
-    <column comment="ID" name="id" type="INT"/>
-    <column comment="name" name="name" type="STRING"/>
-    <column comment="more details" name="detail" type="STRING"/>
-    <column comment="d2 ID" name="d2id" type="INT"/>
+    <column comment="ID" name="id" _type="INT"/>
+    <column comment="name" name="name" _type="STRING"/>
+    <column comment="more details" name="detail" _type="STRING"/>
+    <column comment="d2 ID" name="d2id" _type="INT"/>
   </columns>
   <properties>
     <property name="dim4.prop" value="d1"/>
@@ -38,7 +38,7 @@
       <storage_name>local</storage_name>
       <table_desc external="true" field_delimiter="," table_location="/tmp/examples/dim4">
         <part_cols>
-          <column comment="Time column" name="dt" type="STRING"/>
+          <column comment="Time column" name="dt" _type="STRING"/>
         </part_cols>
         <time_part_cols>dt</time_part_cols>
       </table_desc>

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-examples/src/main/resources/fact1.xml
----------------------------------------------------------------------
diff --git a/lens-examples/src/main/resources/fact1.xml b/lens-examples/src/main/resources/fact1.xml
index c934a64..effdfac 100644
--- a/lens-examples/src/main/resources/fact1.xml
+++ b/lens-examples/src/main/resources/fact1.xml
@@ -22,10 +22,10 @@
 <x_fact_table cube_name="sample_cube" name="fact1" weight="100.0" xmlns="uri:lens:cube:0.1"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="uri:lens:cube:0.1 cube-0.1.xsd ">
   <columns>
-    <column comment="" name="dim1" type="INT"/>
-    <column comment="" name="measure2" type="BIGINT"/>
-    <column comment="" name="measure3" type="INT"/>
-    <column comment="" name="measure4" type="FLOAT"/>
+    <column comment="" name="dim1" _type="INT"/>
+    <column comment="" name="measure2" _type="BIGINT"/>
+    <column comment="" name="measure3" _type="INT"/>
+    <column comment="" name="measure4" _type="FLOAT"/>
   </columns>
   <properties>
     <property name="cube.fact.is.aggregated" value="true"/>
@@ -39,7 +39,7 @@
       <storage_name>local</storage_name>
       <table_desc external="true" field_delimiter="," table_location="/tmp/examples/fact1_local">
         <part_cols>
-          <column comment="Time column" name="dt" type="STRING"/>
+          <column comment="Time column" name="dt" _type="STRING"/>
         </part_cols>
         <time_part_cols>dt</time_part_cols>
       </table_desc>

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-examples/src/main/resources/fact2.xml
----------------------------------------------------------------------
diff --git a/lens-examples/src/main/resources/fact2.xml b/lens-examples/src/main/resources/fact2.xml
index 3298fc1..f1633f3 100644
--- a/lens-examples/src/main/resources/fact2.xml
+++ b/lens-examples/src/main/resources/fact2.xml
@@ -22,11 +22,11 @@
 <x_fact_table cube_name="sample_cube" name="fact2" weight="200.0" xmlns="uri:lens:cube:0.1"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="uri:lens:cube:0.1 cube-0.1.xsd ">
   <columns>
-    <column comment="" name="dim1" type="INT"/>
-    <column comment="" name="dim3" type="INT"/>
-    <column comment="" name="measure2" type="INT"/>
-    <column comment="" name="measure3" type="FLOAT"/>
-    <column comment="" name="measure4" type="FLOAT"/>
+    <column comment="" name="dim1" _type="INT"/>
+    <column comment="" name="dim3" _type="INT"/>
+    <column comment="" name="measure2" _type="INT"/>
+    <column comment="" name="measure3" _type="FLOAT"/>
+    <column comment="" name="measure4" _type="FLOAT"/>
   </columns>
   <properties>
     <property name="cube.fact.is.aggregated" value="true"/>
@@ -40,7 +40,7 @@
       <storage_name>local</storage_name>
       <table_desc external="true" field_delimiter="," table_location="/tmp/examples/fact2_local">
         <part_cols>
-          <column comment="Time column" name="dt" type="STRING"/>
+          <column comment="Time column" name="dt" _type="STRING"/>
         </part_cols>
         <time_part_cols>dt</time_part_cols>
       </table_desc>

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-examples/src/main/resources/product.xml
----------------------------------------------------------------------
diff --git a/lens-examples/src/main/resources/product.xml b/lens-examples/src/main/resources/product.xml
index bb91997..2ab07f1 100644
--- a/lens-examples/src/main/resources/product.xml
+++ b/lens-examples/src/main/resources/product.xml
@@ -22,16 +22,16 @@
 <x_dimension name="product" xmlns="uri:lens:cube:0.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="uri:lens:cube:0.1 cube-0.1.xsd ">
   <attributes>
-    <dim_attribute name="id" type="INT"/>
-    <dim_attribute name="SKU_number" type="INT" />
-    <dim_attribute name="description" type="STRING" />
-    <dim_attribute name="color" type="STRING" />
-    <dim_attribute name="weight" type="FLOAT" />
-    <dim_attribute name="category" type="STRING" />
-    <dim_attribute name="manufacturer" type="STRING" />
+    <dim_attribute name="id" _type="INT"/>
+    <dim_attribute name="SKU_number" _type="INT" />
+    <dim_attribute name="description" _type="STRING" />
+    <dim_attribute name="color" _type="STRING" />
+    <dim_attribute name="weight" _type="FLOAT" />
+    <dim_attribute name="category" _type="STRING" />
+    <dim_attribute name="manufacturer" _type="STRING" />
   </attributes>
   <expressions>
-    <expression name="isHeavy" type="boolean">
+    <expression name="isHeavy" _type="boolean">
       <expr_spec expr = "weight > 10" end_time="2015-04-12T00:00:00"/>
       <expr_spec expr = "weight > 50" start_time="2015-04-12T00:00:00"/>
     </expression>

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-examples/src/main/resources/product_db_table.xml
----------------------------------------------------------------------
diff --git a/lens-examples/src/main/resources/product_db_table.xml b/lens-examples/src/main/resources/product_db_table.xml
index 867d37b..dabb008 100644
--- a/lens-examples/src/main/resources/product_db_table.xml
+++ b/lens-examples/src/main/resources/product_db_table.xml
@@ -22,13 +22,13 @@
 <x_dimension_table dimension_name="product" table_name="product_db_table" weight="100.0" xmlns="uri:lens:cube:0.1"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="uri:lens:cube:0.1 cube-0.1.xsd ">
   <columns>
-    <column comment="ID" name="id" type="INT"/>
-    <column comment="SKU_number" name="SKU_number" type="INT"/>
-    <column comment="" name="description" type="STRING"/>
-    <column comment="" name="color" type="STRING"/>
-    <column comment="Category" name="category" type="STRING"/>
-    <column comment="" name="weight" type="FLOAT"/>
-    <column comment="" name="manufacturer" type="STRING"/>
+    <column comment="ID" name="id" _type="INT"/>
+    <column comment="SKU_number" name="SKU_number" _type="INT"/>
+    <column comment="" name="description" _type="STRING"/>
+    <column comment="" name="color" _type="STRING"/>
+    <column comment="Category" name="category" _type="STRING"/>
+    <column comment="" name="weight" _type="FLOAT"/>
+    <column comment="" name="manufacturer" _type="STRING"/>
   </columns>
   <properties>
     <property name="dim4.prop" value="d1"/>

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-examples/src/main/resources/product_table.xml
----------------------------------------------------------------------
diff --git a/lens-examples/src/main/resources/product_table.xml b/lens-examples/src/main/resources/product_table.xml
index 303f3ad..e039c0d 100644
--- a/lens-examples/src/main/resources/product_table.xml
+++ b/lens-examples/src/main/resources/product_table.xml
@@ -22,12 +22,12 @@
 <x_dimension_table dimension_name="product" table_name="product_table" weight="100.0" xmlns="uri:lens:cube:0.1"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="uri:lens:cube:0.1 cube-0.1.xsd ">
   <columns>
-    <column comment="ID" name="id" type="INT"/>
-    <column comment="SKU_number" name="SKU_number" type="INT"/>
-    <column comment="" name="description" type="STRING"/>
-    <column comment="" name="color" type="STRING"/>
-    <column comment="" name="weight" type="FLOAT"/>
-    <column comment="" name="manufacturer" type="STRING"/>
+    <column comment="ID" name="id" _type="INT"/>
+    <column comment="SKU_number" name="SKU_number" _type="INT"/>
+    <column comment="" name="description" _type="STRING"/>
+    <column comment="" name="color" _type="STRING"/>
+    <column comment="" name="weight" _type="FLOAT"/>
+    <column comment="" name="manufacturer" _type="STRING"/>
   </columns>
   <properties>
     <property name="dim4.prop" value="d1"/>
@@ -41,8 +41,8 @@
       <storage_name>local</storage_name>
       <table_desc external="true" field_delimiter="," table_location="/tmp/examples/product">
         <part_cols>
-          <column comment="Time column" name="dt" type="STRING"/>
-          <column comment="Category" name="category" type="STRING"/>
+          <column comment="Time column" name="dt" _type="STRING"/>
+          <column comment="Category" name="category" _type="STRING"/>
         </part_cols>
         <time_part_cols>dt</time_part_cols>
       </table_desc>

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-examples/src/main/resources/rawfact.xml
----------------------------------------------------------------------
diff --git a/lens-examples/src/main/resources/rawfact.xml b/lens-examples/src/main/resources/rawfact.xml
index 8191eb2..65e27b6 100644
--- a/lens-examples/src/main/resources/rawfact.xml
+++ b/lens-examples/src/main/resources/rawfact.xml
@@ -22,13 +22,13 @@
 <x_fact_table cube_name="sample_cube" name="rawfact" weight="500.0" xmlns="uri:lens:cube:0.1"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="uri:lens:cube:0.1 cube-0.1.xsd ">
   <columns>
-    <column comment="" name="dim1" type="INT"/>
-    <column comment="" name="dim2" type="INT"/>
-    <column comment="" name="dim3" type="INT"/>
-    <column comment="" name="measure1" type="BIGINT"/>
-    <column comment="" name="measure2" type="INT"/>
-    <column comment="" name="measure3" type="FLOAT"/>
-    <column comment="" name="measure4" type="FLOAT"/>
+    <column comment="" name="dim1" _type="INT"/>
+    <column comment="" name="dim2" _type="INT"/>
+    <column comment="" name="dim3" _type="INT"/>
+    <column comment="" name="measure1" _type="BIGINT"/>
+    <column comment="" name="measure2" _type="INT"/>
+    <column comment="" name="measure3" _type="FLOAT"/>
+    <column comment="" name="measure4" _type="FLOAT"/>
   </columns>
   <properties>
     <property name="cube.fact.is.aggregated" value="false"/>
@@ -42,7 +42,7 @@
       <storage_name>local</storage_name>
       <table_desc external="true" field_delimiter="," table_location="/tmp/examples/rawfact">
         <part_cols>
-          <column comment="Time column" name="dt" type="STRING"/>
+          <column comment="Time column" name="dt" _type="STRING"/>
         </part_cols>
         <time_part_cols>dt</time_part_cols>
       </table_desc>

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-examples/src/main/resources/sales-aggr-continuous-fact.xml
----------------------------------------------------------------------
diff --git a/lens-examples/src/main/resources/sales-aggr-continuous-fact.xml b/lens-examples/src/main/resources/sales-aggr-continuous-fact.xml
index 781a615..74f1686 100644
--- a/lens-examples/src/main/resources/sales-aggr-continuous-fact.xml
+++ b/lens-examples/src/main/resources/sales-aggr-continuous-fact.xml
@@ -22,19 +22,19 @@
 <x_fact_table cube_name="sales" name="sales_aggr_continuous_fact" weight="50.0" xmlns="uri:lens:cube:0.1"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="uri:lens:cube:0.1 cube-0.1.xsd ">
   <columns>
-    <column comment="" name="order_time" type="TIMESTAMP"/>
-    <column comment="" name="delivery_time" type="TIMESTAMP"/>
-    <column comment="" name="customer_id" type="INT"/>
-    <column comment="" name="product_id" type="INT"/>
-    <column comment="" name="promotion_id" type="INT"/>
-    <column comment="" name="customer_city_id" type="INT"/>
-    <column comment="" name="production_city_id" type="INT"/>
-    <column comment="" name="delivery_city_id" type="INT"/>
-    <column comment="" name="unit_sales" type="BIGINT"/>
-    <column comment="" name="store_sales" type="DOUBLE"/>
-    <column comment="" name="store_cost" type="DOUBLE"/>
-    <column comment="" name="max_line_item_price" type="FLOAT"/>
-    <column comment="" name="max_line_item_discount" type="FLOAT"/>
+    <column comment="" name="order_time" _type="TIMESTAMP"/>
+    <column comment="" name="delivery_time" _type="TIMESTAMP"/>
+    <column comment="" name="customer_id" _type="INT"/>
+    <column comment="" name="product_id" _type="INT"/>
+    <column comment="" name="promotion_id" _type="INT"/>
+    <column comment="" name="customer_city_id" _type="INT"/>
+    <column comment="" name="production_city_id" _type="INT"/>
+    <column comment="" name="delivery_city_id" _type="INT"/>
+    <column comment="" name="unit_sales" _type="BIGINT"/>
+    <column comment="" name="store_sales" _type="DOUBLE"/>
+    <column comment="" name="store_cost" _type="DOUBLE"/>
+    <column comment="" name="max_line_item_price" _type="FLOAT"/>
+    <column comment="" name="max_line_item_discount" _type="FLOAT"/>
   </columns>
   <properties>
     <property name="cube.fact.is.aggregated" value="true"/>

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-examples/src/main/resources/sales-aggr-fact1.xml
----------------------------------------------------------------------
diff --git a/lens-examples/src/main/resources/sales-aggr-fact1.xml b/lens-examples/src/main/resources/sales-aggr-fact1.xml
index 728c775..9ced07b 100644
--- a/lens-examples/src/main/resources/sales-aggr-fact1.xml
+++ b/lens-examples/src/main/resources/sales-aggr-fact1.xml
@@ -22,19 +22,19 @@
 <x_fact_table cube_name="sales" name="sales_aggr_fact1" weight="300.0" xmlns="uri:lens:cube:0.1"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="uri:lens:cube:0.1 cube-0.1.xsd ">
   <columns>
-    <column comment="" name="order_time" type="TIMESTAMP"/>
-    <column comment="" name="delivery_time" type="TIMESTAMP"/>
-    <column comment="" name="customer_id" type="INT"/>
-    <column comment="" name="product_id" type="INT"/>
-    <column comment="" name="promotion_id" type="INT"/>
-    <column comment="" name="customer_city_id" type="INT"/>
-    <column comment="" name="production_city_id" type="INT"/>
-    <column comment="" name="delivery_city_id" type="INT"/>
-    <column comment="" name="unit_sales" type="BIGINT"/>
-    <column comment="" name="store_sales" type="DOUBLE"/>
-    <column comment="" name="store_cost" type="DOUBLE"/>
-    <column comment="" name="max_line_item_price" type="FLOAT"/>
-    <column comment="" name="max_line_item_discount" type="FLOAT"/>
+    <column comment="" name="order_time" _type="TIMESTAMP"/>
+    <column comment="" name="delivery_time" _type="TIMESTAMP"/>
+    <column comment="" name="customer_id" _type="INT"/>
+    <column comment="" name="product_id" _type="INT"/>
+    <column comment="" name="promotion_id" _type="INT"/>
+    <column comment="" name="customer_city_id" _type="INT"/>
+    <column comment="" name="production_city_id" _type="INT"/>
+    <column comment="" name="delivery_city_id" _type="INT"/>
+    <column comment="" name="unit_sales" _type="BIGINT"/>
+    <column comment="" name="store_sales" _type="DOUBLE"/>
+    <column comment="" name="store_cost" _type="DOUBLE"/>
+    <column comment="" name="max_line_item_price" _type="FLOAT"/>
+    <column comment="" name="max_line_item_discount" _type="FLOAT"/>
   </columns>
   <properties>
     <property name="cube.fact.is.aggregated" value="true"/>
@@ -48,9 +48,9 @@
       <storage_name>local</storage_name>
       <table_desc external="true" field_delimiter="," table_location="/tmp/examples/aggrfact1">
         <part_cols>
-          <column comment="Process time partition" name="pt" type="STRING"/>
-          <column comment="Order time partition" name="ot" type="STRING"/>
-          <column comment="Delivery time partition" name="dt" type="STRING"/>
+          <column comment="Process time partition" name="pt" _type="STRING"/>
+          <column comment="Order time partition" name="ot" _type="STRING"/>
+          <column comment="Delivery time partition" name="dt" _type="STRING"/>
         </part_cols>
         <time_part_cols>pt</time_part_cols>
         <time_part_cols>ot</time_part_cols>
@@ -65,9 +65,9 @@
       <table_desc external="true" field_delimiter="," table_location="/tmp/db-storage.db"
         storage_handler_name="org.apache.lens.storage.db.DBStorageHandler">
         <part_cols>
-          <column comment="Process time partition" name="pt" type="STRING"/>
-          <column comment="Order time partition" name="ot" type="STRING"/>
-          <column comment="Delivery time partition" name="dt" type="STRING"/>
+          <column comment="Process time partition" name="pt" _type="STRING"/>
+          <column comment="Order time partition" name="ot" _type="STRING"/>
+          <column comment="Delivery time partition" name="dt" _type="STRING"/>
         </part_cols>
         <table_parameters>
           <property name="lens.metastore.native.db.name" value="default"/>

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-examples/src/main/resources/sales-aggr-fact2.xml
----------------------------------------------------------------------
diff --git a/lens-examples/src/main/resources/sales-aggr-fact2.xml b/lens-examples/src/main/resources/sales-aggr-fact2.xml
index 61edf64..b0038f8 100644
--- a/lens-examples/src/main/resources/sales-aggr-fact2.xml
+++ b/lens-examples/src/main/resources/sales-aggr-fact2.xml
@@ -22,16 +22,16 @@
 <x_fact_table cube_name="sales" name="sales_aggr_fact2" weight="100.0" xmlns="uri:lens:cube:0.1"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="uri:lens:cube:0.1 cube-0.1.xsd ">
   <columns>
-    <column comment="" name="order_time" type="TIMESTAMP"/>
-    <column comment="" name="delivery_time" type="TIMESTAMP"/>
-    <column comment="" name="product_id" type="INT"/>
-    <column comment="" name="promotion_id" type="INT"/>
-    <column comment="" name="customer_city_id" type="INT"/>
-    <column comment="" name="production_city_id" type="INT"/>
-    <column comment="" name="delivery_city_id" type="INT"/>
-    <column comment="" name="unit_sales" type="BIGINT"/>
-    <column comment="" name="store_sales" type="DOUBLE"/>
-    <column comment="" name="store_cost" type="DOUBLE"/>
+    <column comment="" name="order_time" _type="TIMESTAMP"/>
+    <column comment="" name="delivery_time" _type="TIMESTAMP"/>
+    <column comment="" name="product_id" _type="INT"/>
+    <column comment="" name="promotion_id" _type="INT"/>
+    <column comment="" name="customer_city_id" _type="INT"/>
+    <column comment="" name="production_city_id" _type="INT"/>
+    <column comment="" name="delivery_city_id" _type="INT"/>
+    <column comment="" name="unit_sales" _type="BIGINT"/>
+    <column comment="" name="store_sales" _type="DOUBLE"/>
+    <column comment="" name="store_cost" _type="DOUBLE"/>
   </columns>
   <properties>
     <property name="cube.fact.is.aggregated" value="true"/>
@@ -46,7 +46,7 @@
       <storage_name>local</storage_name>
       <table_desc external="true" field_delimiter="," table_location="/tmp/examples/aggrfact2">
         <part_cols>
-          <column comment="Delivery time partition" name="dt" type="STRING"/>
+          <column comment="Delivery time partition" name="dt" _type="STRING"/>
         </part_cols>
         <time_part_cols>dt</time_part_cols>
       </table_desc>
@@ -59,9 +59,9 @@
       <table_desc external="true" field_delimiter="," table_location="/tmp/db-storage.db"
         storage_handler_name="org.apache.lens.storage.db.DBStorageHandler">
         <part_cols>
-          <column comment="Process time partition" name="pt" type="STRING"/>
-          <column comment="Order time partition" name="ot" type="STRING"/>
-          <column comment="Delivery time partition" name="dt" type="STRING"/>
+          <column comment="Process time partition" name="pt" _type="STRING"/>
+          <column comment="Order time partition" name="ot" _type="STRING"/>
+          <column comment="Delivery time partition" name="dt" _type="STRING"/>
         </part_cols>
         <table_parameters>
           <property name="lens.metastore.native.db.name" value="default"/>

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-examples/src/main/resources/sales-cube.xml
----------------------------------------------------------------------
diff --git a/lens-examples/src/main/resources/sales-cube.xml b/lens-examples/src/main/resources/sales-cube.xml
index e9e48ce..e944821 100644
--- a/lens-examples/src/main/resources/sales-cube.xml
+++ b/lens-examples/src/main/resources/sales-cube.xml
@@ -29,57 +29,57 @@
     <!-- means dt-20days <= ot <= dt-1hour -->
   </properties>
   <measures>
-    <measure name="unit_sales" type="BIGINT" default_aggr="SUM" display_string="Unit Sales" format_string="#,###"/>
-    <measure name="store_sales" type="DOUBLE" default_aggr="SUM" display_string="Store Sales" format_string="#,###.##"/>
-    <measure name="store_cost" type="DOUBLE" default_aggr="SUM" display_string="Store Cost" format_string="#,###.00"
+    <measure name="unit_sales" _type="BIGINT" default_aggr="SUM" display_string="Unit Sales" format_string="#,###"/>
+    <measure name="store_sales" _type="DOUBLE" default_aggr="SUM" display_string="Store Sales" format_string="#,###.##"/>
+    <measure name="store_cost" _type="DOUBLE" default_aggr="SUM" display_string="Store Cost" format_string="#,###.00"
      start_time='2015-03-01T00:00:00' />
-    <measure name="line_item_quantity" type="INT" default_aggr="SUM" display_string="Line item quantity"/>
-    <measure name="line_item_product_price" type="FLOAT" default_aggr="SUM" display_string="Line item product price"/>
-    <measure name="line_item_discount_amount" type="FLOAT" default_aggr="SUM" display_string="Line item discount"/>
-    <measure name="line_item_tax" type="FLOAT" default_aggr="SUM" display_string="Line item tax"/>
-    <measure name="max_line_item_price" type="FLOAT" default_aggr="MAX" display_string="Maximum Line item price"/>
-    <measure name="max_line_item_discount" type="FLOAT" default_aggr="MAX"
+    <measure name="line_item_quantity" _type="INT" default_aggr="SUM" display_string="Line item quantity"/>
+    <measure name="line_item_product_price" _type="FLOAT" default_aggr="SUM" display_string="Line item product price"/>
+    <measure name="line_item_discount_amount" _type="FLOAT" default_aggr="SUM" display_string="Line item discount"/>
+    <measure name="line_item_tax" _type="FLOAT" default_aggr="SUM" display_string="Line item tax"/>
+    <measure name="max_line_item_price" _type="FLOAT" default_aggr="MAX" display_string="Maximum Line item price"/>
+    <measure name="max_line_item_discount" _type="FLOAT" default_aggr="MAX"
      display_string="Maximum Line item discount"/>
-    <measure name="rating" type="FLOAT" default_aggr="AVG"
+    <measure name="rating" _type="FLOAT" default_aggr="AVG"
       display_string="Rating"/>
   </measures>
   <dim_attributes>
-    <dim_attribute name="customer_id" type="INT" />
-    <dim_attribute name="product_id" type="INT" />
-    <dim_attribute name="promotion_id" type="INT" />
-    <dim_attribute name="order_id" type="INT" />
-    <dim_attribute name="order_line_number" type="INT" />
-    <dim_attribute name="order_time" type="TIMESTAMP" />
-    <dim_attribute name="delivery_time" type="TIMESTAMP" />
-    <dim_attribute name="customer_city_id" type="INT" start_time='2015-03-01T00:00:00' />
-    <dim_attribute name="production_city_id" type="INT" />
-    <dim_attribute name="delivery_city_id" type="INT" />
-    <dim_attribute name="customer_city_name" type="string" description="City name to which the customer belongs"
+    <dim_attribute name="customer_id" _type="INT" />
+    <dim_attribute name="product_id" _type="INT" />
+    <dim_attribute name="promotion_id" _type="INT" />
+    <dim_attribute name="order_id" _type="INT" />
+    <dim_attribute name="order_line_number" _type="INT" />
+    <dim_attribute name="order_time" _type="TIMESTAMP" />
+    <dim_attribute name="delivery_time" _type="TIMESTAMP" />
+    <dim_attribute name="customer_city_id" _type="INT" start_time='2015-03-01T00:00:00' />
+    <dim_attribute name="production_city_id" _type="INT" />
+    <dim_attribute name="delivery_city_id" _type="INT" />
+    <dim_attribute name="customer_city_name" _type="string" description="City name to which the customer belongs"
                    display_string="Customer City">
       <chain_ref_column chain_name="customer_city" ref_col="name" />
     </dim_attribute>
     <dim_attribute name="production_location">
       <hierarchy>
-      <dim_attribute name="production_city_name" type="STRING" description="City name in which the product was produced"
+      <dim_attribute name="production_city_name" _type="STRING" description="City name in which the product was produced"
                      display_string="Production City">
         <chain_ref_column chain_name="production_city" ref_col="name" />
       </dim_attribute>
-      <dim_attribute name="production_state" type="STRING" description="State name in which the product was produced"
+      <dim_attribute name="production_state" _type="STRING" description="State name in which the product was produced"
                      display_string="Production State"/>
-      <dim_attribute name="production_country" type="STRING" description="Country name in which the product was produced"
+      <dim_attribute name="production_country" _type="STRING" description="Country name in which the product was produced"
                      display_string="Production Country"/>
       </hierarchy>
     </dim_attribute>
-    <dim_attribute name="delivery_city_name" type="STRING" description="City name to which the product was delivered"
+    <dim_attribute name="delivery_city_name" _type="STRING" description="City name to which the product was delivered"
                    display_string="Delivery City">
       <chain_ref_column chain_name="delivery_city" ref_col="name" />
     </dim_attribute>
   </dim_attributes>
   <expressions>
-    <expression name="profit" type="DOUBLE" display_string="Profit">
+    <expression name="profit" _type="DOUBLE" display_string="Profit">
       <expr_spec expr="store_sales - store_cost"/>
     </expression>
-    <expression name="promotion_sales" type="DOUBLE" display_string="Promotion sales">
+    <expression name="promotion_sales" _type="DOUBLE" display_string="Promotion sales">
       <expr_spec expr="sum(case when promotion_id = 0 then 0 else store_sales end)" start_time='2015-04-12T00:00:00'/>
       <expr_spec expr="sum(case when promotion_id = -1 then 0 when promotion_id = -1 then 0 else store_sales end)"
        end_time="2015-04-12T00:00:00"/>

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-examples/src/main/resources/sales-raw-fact.xml
----------------------------------------------------------------------
diff --git a/lens-examples/src/main/resources/sales-raw-fact.xml b/lens-examples/src/main/resources/sales-raw-fact.xml
index 4c2d571..05d925b 100644
--- a/lens-examples/src/main/resources/sales-raw-fact.xml
+++ b/lens-examples/src/main/resources/sales-raw-fact.xml
@@ -22,23 +22,23 @@
 <x_fact_table cube_name="sales" name="sales_raw_fact" weight="500.0" xmlns="uri:lens:cube:0.1"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="uri:lens:cube:0.1 cube-0.1.xsd ">
   <columns>
-    <column comment="" name="order_time" type="TIMESTAMP"/>
-    <column comment="" name="delivery_time" type="TIMESTAMP"/>
-    <column comment="" name="customer_id" type="INT"/>
-    <column comment="" name="product_id" type="INT"/>
-    <column comment="" name="order_id" type="INT"/>
-    <column comment="" name="promotion_id" type="INT"/>
-    <column comment="" name="order_line_number" type="INT"/>
-    <column comment="" name="customer_city_id" type="INT"/>
-    <column comment="" name="production_city_id" type="INT"/>
-    <column comment="" name="delivery_city_id" type="INT"/>
-    <column comment="" name="unit_sales" type="BIGINT"/>
-    <column comment="" name="store_sales" type="DOUBLE"/>
-    <column comment="" name="store_cost" type="DOUBLE"/>
-    <column comment="" name="line_item_quantity" type="INT"/>
-    <column comment="" name="line_item_product_price" type="INT"/>
-    <column comment="" name="line_item_discount_amount" type="INT"/>
-    <column comment="" name="line_item_tax" type="INT"/>
+    <column comment="" name="order_time" _type="TIMESTAMP"/>
+    <column comment="" name="delivery_time" _type="TIMESTAMP"/>
+    <column comment="" name="customer_id" _type="INT"/>
+    <column comment="" name="product_id" _type="INT"/>
+    <column comment="" name="order_id" _type="INT"/>
+    <column comment="" name="promotion_id" _type="INT"/>
+    <column comment="" name="order_line_number" _type="INT"/>
+    <column comment="" name="customer_city_id" _type="INT"/>
+    <column comment="" name="production_city_id" _type="INT"/>
+    <column comment="" name="delivery_city_id" _type="INT"/>
+    <column comment="" name="unit_sales" _type="BIGINT"/>
+    <column comment="" name="store_sales" _type="DOUBLE"/>
+    <column comment="" name="store_cost" _type="DOUBLE"/>
+    <column comment="" name="line_item_quantity" _type="INT"/>
+    <column comment="" name="line_item_product_price" _type="INT"/>
+    <column comment="" name="line_item_discount_amount" _type="INT"/>
+    <column comment="" name="line_item_tax" _type="INT"/>
   </columns>
   <properties>
     <property name="cube.fact.is.aggregated" value="false"/>
@@ -51,9 +51,9 @@
       <storage_name>local</storage_name>
       <table_desc external="true" field_delimiter="," table_location="/tmp/examples/rawfact">
         <part_cols>
-          <column comment="Process time partition" name="pt" type="STRING"/>
-          <column comment="Order time partition" name="ot" type="STRING"/>
-          <column comment="Delivery time partition" name="dt" type="STRING"/>
+          <column comment="Process time partition" name="pt" _type="STRING"/>
+          <column comment="Order time partition" name="ot" _type="STRING"/>
+          <column comment="Delivery time partition" name="dt" _type="STRING"/>
         </part_cols>
         <time_part_cols>pt</time_part_cols>
         <time_part_cols>ot</time_part_cols>

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-examples/src/main/resources/sample-cube.xml
----------------------------------------------------------------------
diff --git a/lens-examples/src/main/resources/sample-cube.xml b/lens-examples/src/main/resources/sample-cube.xml
index 3b5abea..4046e82 100644
--- a/lens-examples/src/main/resources/sample-cube.xml
+++ b/lens-examples/src/main/resources/sample-cube.xml
@@ -25,19 +25,19 @@
     <property name="cube.sample_cube.timed.dimensions.list" value="dt"/>
   </properties>
   <measures>
-    <measure name="measure1" type="BIGINT"/>
-    <measure name="measure2" type="INT" default_aggr="SUM"/>
-    <measure name="measure3" type="FLOAT" default_aggr="MAX" start_time='2013-12-12T00:00:00'/>
-    <measure name="measure4" type="DOUBLE" default_aggr="MIN"/>
+    <measure name="measure1" _type="BIGINT"/>
+    <measure name="measure2" _type="INT" default_aggr="SUM"/>
+    <measure name="measure3" _type="FLOAT" default_aggr="MAX" start_time='2013-12-12T00:00:00'/>
+    <measure name="measure4" _type="DOUBLE" default_aggr="MIN"/>
   </measures>
   <dim_attributes>
-    <dim_attribute name="dim1" type="INT"/>
-    <dim_attribute name="dim2" type="INT" start_time='2013-12-01T00:00:00'/>
-    <dim_attribute name="dim3" type="INT">
+    <dim_attribute name="dim1" _type="INT"/>
+    <dim_attribute name="dim2" _type="INT" start_time='2013-12-01T00:00:00'/>
+    <dim_attribute name="dim3" _type="INT">
     </dim_attribute>
   </dim_attributes>
   <expressions>
-    <expression name="expr_msr5" type="DOUBLE">
+    <expression name="expr_msr5" _type="DOUBLE">
       <expr_spec expr = "measure3 + measure4" start_time='2013-12-12T00:00:00' />
       <expr_spec expr = "measure3 + measure4 + 0.01" end_time='2013-12-12T00:00:00'/>
     </expression>

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-examples/src/main/resources/sample-db-only-dimension.xml
----------------------------------------------------------------------
diff --git a/lens-examples/src/main/resources/sample-db-only-dimension.xml b/lens-examples/src/main/resources/sample-db-only-dimension.xml
index 2e8aa64..809e66e 100644
--- a/lens-examples/src/main/resources/sample-db-only-dimension.xml
+++ b/lens-examples/src/main/resources/sample-db-only-dimension.xml
@@ -22,10 +22,10 @@
 <x_dimension name="sample_db_dim" xmlns="uri:lens:cube:0.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="uri:lens:cube:0.1 cube-0.1.xsd ">
   <attributes>
-    <dim_attribute name="id" type="INT"/>
-    <dim_attribute name="name" type="STRING"/>
-    <dim_attribute name="detail" type="STRING" start_time='2013-12-01T00:00:00'/>
-    <dim_attribute name="d2id" type="INT" start_time='2013-12-01T00:00:00'/>
+    <dim_attribute name="id" _type="INT"/>
+    <dim_attribute name="name" _type="STRING"/>
+    <dim_attribute name="detail" _type="STRING" start_time='2013-12-01T00:00:00'/>
+    <dim_attribute name="d2id" _type="INT" start_time='2013-12-01T00:00:00'/>
   </attributes>
 
   <join_chains>

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-examples/src/main/resources/sample-dimension.xml
----------------------------------------------------------------------
diff --git a/lens-examples/src/main/resources/sample-dimension.xml b/lens-examples/src/main/resources/sample-dimension.xml
index 3c2589c..778a4c4 100644
--- a/lens-examples/src/main/resources/sample-dimension.xml
+++ b/lens-examples/src/main/resources/sample-dimension.xml
@@ -22,10 +22,10 @@
 <x_dimension name="sample_dim" xmlns="uri:lens:cube:0.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="uri:lens:cube:0.1 cube-0.1.xsd ">
   <attributes>
-    <dim_attribute name="id" type="INT"/>
-    <dim_attribute name="name" type="STRING"/>
-    <dim_attribute name="detail" type="STRING" start_time='2013-12-01T00:00:00'/>
-    <dim_attribute name="d2id" type="INT" start_time='2013-12-01T00:00:00'/>
+    <dim_attribute name="id" _type="INT"/>
+    <dim_attribute name="name" _type="STRING"/>
+    <dim_attribute name="detail" _type="STRING" start_time='2013-12-01T00:00:00'/>
+    <dim_attribute name="d2id" _type="INT" start_time='2013-12-01T00:00:00'/>
   </attributes>
 
   <join_chains>

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-examples/src/main/resources/sample-dimension2.xml
----------------------------------------------------------------------
diff --git a/lens-examples/src/main/resources/sample-dimension2.xml b/lens-examples/src/main/resources/sample-dimension2.xml
index 9740507..0f4fad8 100644
--- a/lens-examples/src/main/resources/sample-dimension2.xml
+++ b/lens-examples/src/main/resources/sample-dimension2.xml
@@ -22,9 +22,9 @@
 <x_dimension name="sample_dim2" xmlns="uri:lens:cube:0.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="uri:lens:cube:0.1 cube-0.1.xsd ">
   <attributes>
-    <dim_attribute name="id" type="INT"/>
-    <dim_attribute name="name" type="STRING"/>
-    <dim_attribute name="detail2" type="STRING" start_time='2013-12-01T00:00:00'/>
+    <dim_attribute name="id" _type="INT"/>
+    <dim_attribute name="name" _type="STRING"/>
+    <dim_attribute name="detail2" _type="STRING" start_time='2013-12-01T00:00:00'/>
   </attributes>
   <properties>
     <property name="dimension.sample_dim2.timed.dimension" value="dt"/>

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-ml-lib/src/main/java/org/apache/lens/ml/server/MLApp.java
----------------------------------------------------------------------
diff --git a/lens-ml-lib/src/main/java/org/apache/lens/ml/server/MLApp.java b/lens-ml-lib/src/main/java/org/apache/lens/ml/server/MLApp.java
index e6e3c02..002d420 100644
--- a/lens-ml-lib/src/main/java/org/apache/lens/ml/server/MLApp.java
+++ b/lens-ml-lib/src/main/java/org/apache/lens/ml/server/MLApp.java
@@ -24,8 +24,11 @@ import java.util.Set;
 import javax.ws.rs.ApplicationPath;
 import javax.ws.rs.core.Application;
 
+import org.apache.lens.api.util.MoxyJsonConfigurationContextResolver;
+
 import org.glassfish.jersey.filter.LoggingFilter;
 import org.glassfish.jersey.media.multipart.MultiPartFeature;
+import org.glassfish.jersey.moxy.json.MoxyJsonFeature;
 
 @ApplicationPath("/ml")
 public class MLApp extends Application {
@@ -44,6 +47,8 @@ public class MLApp extends Application {
     classes.add(MLServiceResource.class);
     classes.add(MultiPartFeature.class);
     classes.add(LoggingFilter.class);
+    classes.add(MoxyJsonConfigurationContextResolver.class);
+    classes.add(MoxyJsonFeature.class);
     for (Class<?> cls : additionalClasses) {
       classes.add(cls);
     }

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-ml-lib/src/test/java/org/apache/lens/ml/TestMLRunner.java
----------------------------------------------------------------------
diff --git a/lens-ml-lib/src/test/java/org/apache/lens/ml/TestMLRunner.java b/lens-ml-lib/src/test/java/org/apache/lens/ml/TestMLRunner.java
index ef3d53e..3493709 100644
--- a/lens-ml-lib/src/test/java/org/apache/lens/ml/TestMLRunner.java
+++ b/lens-ml-lib/src/test/java/org/apache/lens/ml/TestMLRunner.java
@@ -39,8 +39,6 @@ import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.metastore.api.Database;
 import org.apache.hadoop.hive.ql.metadata.Hive;
 
-import org.glassfish.jersey.client.ClientConfig;
-import org.glassfish.jersey.media.multipart.MultiPartFeature;
 import org.testng.Assert;
 import org.testng.annotations.AfterTest;
 import org.testng.annotations.BeforeTest;
@@ -48,7 +46,6 @@ import org.testng.annotations.Test;
 
 import lombok.extern.slf4j.Slf4j;
 
-
 @Test
 @Slf4j
 public class TestMLRunner extends LensJerseyTest {
@@ -71,11 +68,6 @@ public class TestMLRunner extends LensJerseyTest {
     return UriBuilder.fromUri("http://localhost/").port(getTestPort()).path("/lensapi").build();
   }
 
-  @Override
-  protected void configureClient(ClientConfig config) {
-    config.register(MultiPartFeature.class);
-  }
-
   @BeforeTest
   public void setUp() throws Exception {
     super.setUp();

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-server-api/src/main/java/org/apache/lens/server/api/driver/InMemoryResultSet.java
----------------------------------------------------------------------
diff --git a/lens-server-api/src/main/java/org/apache/lens/server/api/driver/InMemoryResultSet.java b/lens-server-api/src/main/java/org/apache/lens/server/api/driver/InMemoryResultSet.java
index f6434da..0d64471 100644
--- a/lens-server-api/src/main/java/org/apache/lens/server/api/driver/InMemoryResultSet.java
+++ b/lens-server-api/src/main/java/org/apache/lens/server/api/driver/InMemoryResultSet.java
@@ -80,7 +80,7 @@ public abstract class InMemoryResultSet extends LensResultSet {
    * @see org.apache.lens.server.api.driver.LensResultSet#toQueryResult()
    */
   public InMemoryQueryResult toQueryResult() throws LensException {
-    List<ResultRow> rows = new ArrayList<ResultRow>();
+    List<ResultRow> rows = new ArrayList<>();
     while (hasNext()) {
       rows.add(next());
     }

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-server/pom.xml
----------------------------------------------------------------------
diff --git a/lens-server/pom.xml b/lens-server/pom.xml
index ba91e76..064197d 100644
--- a/lens-server/pom.xml
+++ b/lens-server/pom.xml
@@ -126,19 +126,10 @@
       <artifactId>jersey-media-multipart</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.glassfish.jersey.media</groupId>
-      <artifactId>jersey-media-json-jackson</artifactId>
-    </dependency>
-    <dependency>
       <groupId>javax.xml.bind</groupId>
       <artifactId>jaxb-api</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.glassfish.jersey.media</groupId>
-      <artifactId>jersey-media-moxy</artifactId>
-    </dependency>
-
-    <dependency>
       <groupId>org.glassfish.grizzly</groupId>
       <artifactId>grizzly-framework</artifactId>
     </dependency>

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-server/src/main/java/org/apache/lens/server/BaseApp.java
----------------------------------------------------------------------
diff --git a/lens-server/src/main/java/org/apache/lens/server/BaseApp.java b/lens-server/src/main/java/org/apache/lens/server/BaseApp.java
new file mode 100644
index 0000000..07f6837
--- /dev/null
+++ b/lens-server/src/main/java/org/apache/lens/server/BaseApp.java
@@ -0,0 +1,53 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.lens.server;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.ws.rs.core.Application;
+
+import org.apache.lens.api.jaxb.LensJAXBContextResolver;
+import org.apache.lens.api.util.MoxyJsonConfigurationContextResolver;
+import org.apache.lens.server.error.LensJAXBValidationExceptionMapper;
+
+import org.glassfish.jersey.filter.LoggingFilter;
+import org.glassfish.jersey.media.multipart.MultiPartFeature;
+import org.glassfish.jersey.moxy.json.MoxyJsonFeature;
+
+public abstract class BaseApp extends Application {
+
+  @Override
+  public Set<Class<?>> getClasses() {
+    final Set<Class<?>> classes = new HashSet<>();
+    // register root resource
+    classes.add(getResource());
+    classes.add(MultiPartFeature.class);
+    classes.add(LensJAXBContextResolver.class);
+    classes.add(LensJAXBValidationExceptionMapper.class);
+    classes.add(LensRequestContextInitFilter.class);
+    classes.add(LoggingFilter.class);
+    classes.add(LensApplicationListener.class);
+    classes.add(MoxyJsonConfigurationContextResolver.class);
+    classes.add(MoxyJsonFeature.class);
+    return classes;
+  }
+
+  protected abstract Class getResource();
+}

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-server/src/main/java/org/apache/lens/server/LensServer.java
----------------------------------------------------------------------
diff --git a/lens-server/src/main/java/org/apache/lens/server/LensServer.java b/lens-server/src/main/java/org/apache/lens/server/LensServer.java
index 61eb37f..092ecda 100644
--- a/lens-server/src/main/java/org/apache/lens/server/LensServer.java
+++ b/lens-server/src/main/java/org/apache/lens/server/LensServer.java
@@ -121,7 +121,6 @@ public class LensServer {
 
   private ResourceConfig getUIApp() {
     ResourceConfig uiApp = ResourceConfig.forApplicationClass(UIApp.class);
-    uiApp.register(new LoggingFilter(Logger.getLogger(LensServer.class.getName() + ".ui_request"), true));
     uiApp.setApplicationName("Lens UI");
     return uiApp;
   }

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-server/src/main/java/org/apache/lens/server/ServerModeFilter.java
----------------------------------------------------------------------
diff --git a/lens-server/src/main/java/org/apache/lens/server/ServerModeFilter.java b/lens-server/src/main/java/org/apache/lens/server/ServerModeFilter.java
index 630b95e..e87fe46 100644
--- a/lens-server/src/main/java/org/apache/lens/server/ServerModeFilter.java
+++ b/lens-server/src/main/java/org/apache/lens/server/ServerModeFilter.java
@@ -39,25 +39,28 @@ public class ServerModeFilter implements ContainerRequestFilter {
     switch (LensServices.get().getServiceMode()) {
     case READ_ONLY:
       // Allows all requests on session and only GET everywhere
-      if (!requestContext.getUriInfo().getPath().startsWith("/session")) {
+      if (!requestContext.getUriInfo().getPath().startsWith("session")) {
         if (!requestContext.getMethod().equals("GET")) {
-          throw new NotAllowedException("Server is in readonly mode", "GET", (String[]) null);
+          throw new NotAllowedException("Server is in readonly mode. Request on path:"
+            + requestContext.getUriInfo().getPath(), "GET", (String[]) null);
         }
       }
       break;
     case METASTORE_READONLY:
       // Allows GET on metastore and all other requests
-      if (requestContext.getUriInfo().getPath().startsWith("/metastore")) {
+      if (requestContext.getUriInfo().getPath().startsWith("metastore")) {
         if (!requestContext.getMethod().equals("GET")) {
-          throw new NotAllowedException("Metastore is in readonly mode", "GET", (String[]) null);
+          throw new NotAllowedException("Metastore is in readonly mode. Request on path:"
+            + requestContext.getUriInfo().getPath(), "GET", (String[]) null);
         }
       }
       break;
     case METASTORE_NODROP:
       // Does not allows DROP on metastore, all other request are allowed
-      if (requestContext.getUriInfo().getPath().startsWith("/metastore")) {
+      if (requestContext.getUriInfo().getPath().startsWith("metastore")) {
         if (requestContext.getMethod().equals("DELETE")) {
-          throw new NotAllowedException("Metastore is in nodrop mode", "GET", new String[]{"PUT", "POST"});
+          throw new NotAllowedException("Metastore is in nodrop mode. Request on path:"
+            + requestContext.getUriInfo().getPath(), "GET", new String[]{"PUT", "POST"});
         }
       }
       break;

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-server/src/main/java/org/apache/lens/server/metastore/CubeMetastoreServiceImpl.java
----------------------------------------------------------------------
diff --git a/lens-server/src/main/java/org/apache/lens/server/metastore/CubeMetastoreServiceImpl.java b/lens-server/src/main/java/org/apache/lens/server/metastore/CubeMetastoreServiceImpl.java
index fc67df1..a1acd1a 100644
--- a/lens-server/src/main/java/org/apache/lens/server/metastore/CubeMetastoreServiceImpl.java
+++ b/lens-server/src/main/java/org/apache/lens/server/metastore/CubeMetastoreServiceImpl.java
@@ -701,7 +701,7 @@ public class CubeMetastoreServiceImpl extends BaseLensService implements CubeMet
         storageName);
       List<Partition> parts = client.getPartitionsByFilter(storageTableName, filter);
       List<String> timePartCols = client.getTimePartColNamesOfTable(storageTableName);
-      return xpartitionListFromPartitionList(parts, timePartCols);
+      return xpartitionListFromPartitionList(fact, parts, timePartCols);
     } catch (HiveException exc) {
       throw new LensException(exc);
     } finally {
@@ -737,31 +737,31 @@ public class CubeMetastoreServiceImpl extends BaseLensService implements CubeMet
     }
   }
 
-  private CubeDimensionTable checkDimensionStorage(LensSessionHandle sessionid, String dimension, String storage)
+  private CubeDimensionTable checkDimTableStorage(LensSessionHandle sessionid, String dimTable, String storage)
     throws HiveException, LensException {
     CubeMetastoreClient client = getClient(sessionid);
-    if (!client.isDimensionTable(dimension)) {
-      throw new NotFoundException("Dimension table not found: " + dimension);
+    if (!client.isDimensionTable(dimTable)) {
+      throw new NotFoundException("Dimension table not found: " + dimTable);
     }
-    CubeDimensionTable cdt = client.getDimensionTable(dimension);
+    CubeDimensionTable cdt = client.getDimensionTable(dimTable);
     if (!cdt.getStorages().contains(storage)) {
-      throw new NotFoundException("Storage " + storage + " not found for dimension " + dimension);
+      throw new NotFoundException("Storage " + storage + " not found for dimension table " + dimTable);
     }
     return cdt;
   }
 
   @Override
   public XPartitionList getAllPartitionsOfDimTableStorage(
-    LensSessionHandle sessionid, String dimension, String storageName, String filter)
+    LensSessionHandle sessionid, String dimTable, String storageName, String filter)
     throws LensException {
     try {
       acquire(sessionid);
-      checkDimensionStorage(sessionid, dimension, storageName);
+      checkDimTableStorage(sessionid, dimTable, storageName);
       CubeMetastoreClient client = getClient(sessionid);
-      String storageTableName = MetastoreUtil.getFactOrDimtableStorageTableName(dimension, storageName);
+      String storageTableName = MetastoreUtil.getFactOrDimtableStorageTableName(dimTable, storageName);
       List<Partition> partitions = client.getPartitionsByFilter(storageTableName, filter);
       List<String> timePartCols = client.getTimePartColNamesOfTable(storageTableName);
-      return xpartitionListFromPartitionList(partitions, timePartCols);
+      return xpartitionListFromPartitionList(dimTable, partitions, timePartCols);
     } catch (HiveException exc) {
       throw new LensException(exc);
     } finally {
@@ -774,7 +774,7 @@ public class CubeMetastoreServiceImpl extends BaseLensService implements CubeMet
     String dimTblName, String storageName, XPartition partition) throws LensException {
     try {
       acquire(sessionid);
-      checkDimensionStorage(sessionid, dimTblName, storageName);
+      checkDimTableStorage(sessionid, dimTblName, storageName);
       return getClient(sessionid).addPartition(storagePartSpecFromXPartition(partition), storageName).size();
     } catch (HiveException exc) {
       throw new LensException(exc);
@@ -828,7 +828,7 @@ public class CubeMetastoreServiceImpl extends BaseLensService implements CubeMet
     String dimTblName, String storageName, XPartitionList partitions) throws LensException {
     try {
       acquire(sessionid);
-      checkDimensionStorage(sessionid, dimTblName, storageName);
+      checkDimTableStorage(sessionid, dimTblName, storageName);
       return getClient(sessionid).addPartitions(storagePartSpecListFromXPartitionList(partitions), storageName).size();
     } catch (HiveException exc) {
       throw new LensException(exc);

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-server/src/main/java/org/apache/lens/server/metastore/JAXBUtils.java
----------------------------------------------------------------------
diff --git a/lens-server/src/main/java/org/apache/lens/server/metastore/JAXBUtils.java b/lens-server/src/main/java/org/apache/lens/server/metastore/JAXBUtils.java
index 70323d3..6fd19a0 100644
--- a/lens-server/src/main/java/org/apache/lens/server/metastore/JAXBUtils.java
+++ b/lens-server/src/main/java/org/apache/lens/server/metastore/JAXBUtils.java
@@ -792,20 +792,22 @@ public final class JAXBUtils {
     return nonTimePartSpec;
   }
 
-  public static XPartitionList xpartitionListFromPartitionList(List<Partition> partitions, List<String> timePartCols)
-    throws HiveException {
+  public static XPartitionList xpartitionListFromPartitionList(String cubeTableName, List<Partition> partitions,
+    List<String> timePartCols) throws HiveException {
     XPartitionList xPartitionList = new XPartitionList();
     xPartitionList.getPartition();
     if (partitions != null) {
       for (Partition partition : partitions) {
-        xPartitionList.getPartition().add(xpartitionFromPartition(partition, timePartCols));
+        xPartitionList.getPartition().add(xpartitionFromPartition(cubeTableName, partition, timePartCols));
       }
     }
     return xPartitionList;
   }
 
-  public static XPartition xpartitionFromPartition(Partition p, List<String> timePartCols) throws HiveException {
+  public static XPartition xpartitionFromPartition(String cubeTableName, Partition p, List<String> timePartCols)
+    throws HiveException {
     XPartition xp = new XPartition();
+    xp.setFactOrDimensionTableName(cubeTableName);
     xp.setPartitionParameters(new XProperties());
     xp.setSerdeParameters(new XProperties());
     xp.setName(p.getCompleteName());

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-server/src/main/java/org/apache/lens/server/metastore/MetastoreApp.java
----------------------------------------------------------------------
diff --git a/lens-server/src/main/java/org/apache/lens/server/metastore/MetastoreApp.java b/lens-server/src/main/java/org/apache/lens/server/metastore/MetastoreApp.java
index 520c698..3ea11c1 100644
--- a/lens-server/src/main/java/org/apache/lens/server/metastore/MetastoreApp.java
+++ b/lens-server/src/main/java/org/apache/lens/server/metastore/MetastoreApp.java
@@ -18,34 +18,15 @@
  */
 package org.apache.lens.server.metastore;
 
-
-import java.util.HashSet;
-import java.util.Set;
-
 import javax.ws.rs.ApplicationPath;
-import javax.ws.rs.core.Application;
 
-import org.apache.lens.api.jaxb.LensJAXBContextResolver;
-import org.apache.lens.server.LensApplicationListener;
-import org.apache.lens.server.LensRequestContextInitFilter;
-import org.apache.lens.server.error.LensJAXBValidationExceptionMapper;
-
-import org.glassfish.jersey.filter.LoggingFilter;
-import org.glassfish.jersey.media.multipart.MultiPartFeature;
+import org.apache.lens.server.BaseApp;
 
 @ApplicationPath("/")
-public class MetastoreApp extends Application {
+public class MetastoreApp extends BaseApp {
+
   @Override
-  public Set<Class<?>> getClasses() {
-    final Set<Class<?>> classes = new HashSet<Class<?>>();
-    // register root resource
-    classes.add(MetastoreResource.class);
-    classes.add(LoggingFilter.class);
-    classes.add(MultiPartFeature.class);
-    classes.add(LensApplicationListener.class);
-    classes.add(LensJAXBContextResolver.class);
-    classes.add(LensRequestContextInitFilter.class);
-    classes.add(LensJAXBValidationExceptionMapper.class);
-    return classes;
+  protected Class getResource() {
+    return MetastoreResource.class;
   }
 }

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-server/src/main/java/org/apache/lens/server/metastore/MetastoreResource.java
----------------------------------------------------------------------
diff --git a/lens-server/src/main/java/org/apache/lens/server/metastore/MetastoreResource.java b/lens-server/src/main/java/org/apache/lens/server/metastore/MetastoreResource.java
index fb937c6..e7d545c 100644
--- a/lens-server/src/main/java/org/apache/lens/server/metastore/MetastoreResource.java
+++ b/lens-server/src/main/java/org/apache/lens/server/metastore/MetastoreResource.java
@@ -40,8 +40,6 @@ import org.apache.commons.lang.NotImplementedException;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.hadoop.hive.ql.metadata.HiveException;
 
-import org.glassfish.jersey.media.multipart.FormDataParam;
-
 import com.google.common.collect.Lists;
 import lombok.extern.slf4j.Slf4j;
 
@@ -850,11 +848,9 @@ public class MetastoreResource {
    * @return {@link APIResult} with state {@link Status#SUCCEEDED}, if create was successful. {@link APIResult} with
    * state {@link Status#FAILED}, if create has failed
    */
-  @Consumes({MediaType.MULTIPART_FORM_DATA})
   @POST
   @Path("/facts")
-  public APIResult createFactTable(@FormDataParam("sessionid") LensSessionHandle sessionid,
-    @FormDataParam("fact") XFactTable fact)
+  public APIResult createFactTable(@QueryParam("sessionid") LensSessionHandle sessionid, XFactTable fact)
     throws LensException {
     checkSessionId(sessionid);
     try {
@@ -1093,6 +1089,8 @@ public class MetastoreResource {
     XPartition partition) {
     checkSessionId(sessionid);
     checkNonNullArgs("Partition is null", partition);
+    checkNonNullArgs("Partition elements are null", partition.getFactOrDimensionTableName(),
+      partition.getUpdatePeriod());
     try {
       return successOrPartialOrFailure(getSvc().addPartitionToFactStorage(sessionid, factName, storage, partition), 1);
     } catch (LensException exc) {
@@ -1121,6 +1119,8 @@ public class MetastoreResource {
     XPartition partition) {
     checkSessionId(sessionid);
     checkNonNullArgs("Partition is null", partition);
+    checkNonNullArgs("Partition elements are null", partition.getFactOrDimensionTableName(),
+      partition.getUpdatePeriod());
     try {
       getSvc().updatePartition(sessionid, factName, storage, partition);
     } catch (LensException exc) {
@@ -1239,8 +1239,8 @@ public class MetastoreResource {
    */
   @POST
   @Path("/dimtables")
-  public APIResult createDimensionTable(@FormDataParam("sessionid") LensSessionHandle sessionid,
-    @FormDataParam("dimensionTable") XDimensionTable dimensionTable) {
+  public APIResult createDimensionTable(@QueryParam("sessionid") LensSessionHandle sessionid,
+                                        XDimensionTable dimensionTable) {
     checkSessionId(sessionid);
     try {
       getSvc().createDimensionTable(sessionid, dimensionTable);
@@ -1514,6 +1514,8 @@ public class MetastoreResource {
     XPartition partition) {
     checkSessionId(sessionid);
     checkNonNullArgs("Partition is null", partition);
+    checkNonNullArgs("Partition elements are null", partition.getFactOrDimensionTableName(),
+      partition.getUpdatePeriod());
     try {
       return successOrPartialOrFailure(getSvc().addPartitionToDimStorage(sessionid, dimTableName, storage, partition),
         1);
@@ -1538,10 +1540,12 @@ public class MetastoreResource {
   @Path("/dimtables/{dimTableName}/storages/{storage}/partition")
   public APIResult updatePartitionOfDimStorage(@QueryParam("sessionid") LensSessionHandle sessionid,
     @PathParam("dimTableName") String dimTableName,
-    @PathParam("storage") String storage,
+                                               @PathParam("storage") String storage,
     XPartition partition) {
     checkSessionId(sessionid);
     checkNonNullArgs("Partition is null", partition);
+    checkNonNullArgs("Partition elements are null", partition.getFactOrDimensionTableName(),
+      partition.getUpdatePeriod());
     try {
       getSvc().updatePartition(sessionid, dimTableName, storage, partition);
     } catch (LensException exc) {

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-server/src/main/java/org/apache/lens/server/query/QueryApp.java
----------------------------------------------------------------------
diff --git a/lens-server/src/main/java/org/apache/lens/server/query/QueryApp.java b/lens-server/src/main/java/org/apache/lens/server/query/QueryApp.java
index 9db034a..9126268 100644
--- a/lens-server/src/main/java/org/apache/lens/server/query/QueryApp.java
+++ b/lens-server/src/main/java/org/apache/lens/server/query/QueryApp.java
@@ -18,32 +18,18 @@
  */
 package org.apache.lens.server.query;
 
-import java.util.HashSet;
-import java.util.Set;
-
 import javax.ws.rs.ApplicationPath;
-import javax.ws.rs.core.Application;
-
-import org.apache.lens.server.LensApplicationListener;
-import org.apache.lens.server.LensRequestContextInitFilter;
 
-import org.glassfish.jersey.filter.LoggingFilter;
-import org.glassfish.jersey.media.multipart.MultiPartFeature;
+import org.apache.lens.server.BaseApp;
 
 /**
  * The Class QueryApp.
  */
 @ApplicationPath("/queryapi")
-public class QueryApp extends Application {
+public class QueryApp extends BaseApp {
+
   @Override
-  public Set<Class<?>> getClasses() {
-    final Set<Class<?>> classes = new HashSet<Class<?>>();
-    // register root resource
-    classes.add(QueryServiceResource.class);
-    classes.add(MultiPartFeature.class);
-    classes.add(LensRequestContextInitFilter.class);
-    classes.add(LoggingFilter.class);
-    classes.add(LensApplicationListener.class);
-    return classes;
+  protected Class getResource() {
+    return QueryServiceResource.class;
   }
 }

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-server/src/main/java/org/apache/lens/server/query/QueryServiceResource.java
----------------------------------------------------------------------
diff --git a/lens-server/src/main/java/org/apache/lens/server/query/QueryServiceResource.java b/lens-server/src/main/java/org/apache/lens/server/query/QueryServiceResource.java
index bb4cfd2..6e1a709 100644
--- a/lens-server/src/main/java/org/apache/lens/server/query/QueryServiceResource.java
+++ b/lens-server/src/main/java/org/apache/lens/server/query/QueryServiceResource.java
@@ -207,7 +207,7 @@ public class QueryServiceResource {
   @Consumes({MediaType.MULTIPART_FORM_DATA})
   @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN})
   @MultiPurposeResource(formParamName = "operation")
-  public LensAPIResult<? extends QuerySubmitResult> query(@FormDataParam("sessionid") LensSessionHandle sessionid,
+  public LensAPIResult<QuerySubmitResult> query(@FormDataParam("sessionid") LensSessionHandle sessionid,
       @FormDataParam("query") String query, @FormDataParam("operation") String operation,
       @FormDataParam("conf") LensConf conf, @DefaultValue("30000") @FormDataParam("timeoutmillis") Long timeoutmillis,
       @DefaultValue("") @FormDataParam("queryName") String queryName) throws LensException {
@@ -351,7 +351,7 @@ public class QueryServiceResource {
   @Consumes({MediaType.MULTIPART_FORM_DATA})
   @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN})
   @MultiPurposeResource(formParamName = "operation")
-  public LensAPIResult<? extends QuerySubmitResult> prepareQuery(
+  public LensAPIResult<QuerySubmitResult> prepareQuery(
       @FormDataParam("sessionid") LensSessionHandle sessionid, @FormDataParam("query") String query,
       @DefaultValue("") @FormDataParam("operation") String operation, @FormDataParam("conf") LensConf conf,
       @DefaultValue("") @FormDataParam("queryName") String queryName) throws LensException {

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-server/src/main/java/org/apache/lens/server/query/save/SavedQueryApp.java
----------------------------------------------------------------------
diff --git a/lens-server/src/main/java/org/apache/lens/server/query/save/SavedQueryApp.java b/lens-server/src/main/java/org/apache/lens/server/query/save/SavedQueryApp.java
index e55ed13..494df08 100644
--- a/lens-server/src/main/java/org/apache/lens/server/query/save/SavedQueryApp.java
+++ b/lens-server/src/main/java/org/apache/lens/server/query/save/SavedQueryApp.java
@@ -18,31 +18,17 @@
  */
 package org.apache.lens.server.query.save;
 
-import java.util.HashSet;
-import java.util.Set;
-
 import javax.ws.rs.ApplicationPath;
-import javax.ws.rs.core.Application;
-
-import org.apache.lens.server.LensApplicationListener;
-import org.apache.lens.server.LensRequestContextInitFilter;
 
-import org.glassfish.jersey.filter.LoggingFilter;
-import org.glassfish.jersey.media.multipart.MultiPartFeature;
+import org.apache.lens.server.BaseApp;
 
 /**
  * The Class SavedQueryApp.
  */
 @ApplicationPath("/savedquery")
-public class SavedQueryApp extends Application {
+public class SavedQueryApp extends BaseApp {
   @Override
-  public Set<Class<?>> getClasses() {
-    final Set<Class<?>> classes = new HashSet<Class<?>>();
-    classes.add(SavedQueryResource.class);
-    classes.add(MultiPartFeature.class);
-    classes.add(LensRequestContextInitFilter.class);
-    classes.add(LoggingFilter.class);
-    classes.add(LensApplicationListener.class);
-    return classes;
+  protected Class getResource() {
+    return SavedQueryResource.class;
   }
 }

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-server/src/main/java/org/apache/lens/server/query/save/SavedQueryResource.java
----------------------------------------------------------------------
diff --git a/lens-server/src/main/java/org/apache/lens/server/query/save/SavedQueryResource.java b/lens-server/src/main/java/org/apache/lens/server/query/save/SavedQueryResource.java
index 5c247be..02541c5 100644
--- a/lens-server/src/main/java/org/apache/lens/server/query/save/SavedQueryResource.java
+++ b/lens-server/src/main/java/org/apache/lens/server/query/save/SavedQueryResource.java
@@ -35,7 +35,7 @@ import javax.ws.rs.core.UriInfo;
 import org.apache.lens.api.LensConf;
 import org.apache.lens.api.LensSessionHandle;
 import org.apache.lens.api.error.ErrorCollection;
-import org.apache.lens.api.query.QuerySubmitResult;
+import org.apache.lens.api.query.QueryHandle;
 import org.apache.lens.api.query.save.ListResponse;
 import org.apache.lens.api.query.save.ParameterParserResponse;
 import org.apache.lens.api.query.save.ResourceModifiedResponse;
@@ -253,7 +253,7 @@ public class SavedQueryResource {
   @POST
   @Path("/savedqueries/{id}")
   @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN})
-  public LensAPIResult<? extends QuerySubmitResult> run(
+  public LensAPIResult<QueryHandle> run(
     @PathParam("id") long id,
     @Context UriInfo info,
     @FormDataParam("sessionid") LensSessionHandle sessionid,

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-server/src/main/java/org/apache/lens/server/scheduler/SchedulerApp.java
----------------------------------------------------------------------
diff --git a/lens-server/src/main/java/org/apache/lens/server/scheduler/SchedulerApp.java b/lens-server/src/main/java/org/apache/lens/server/scheduler/SchedulerApp.java
index 0ea8544..91bc54f 100644
--- a/lens-server/src/main/java/org/apache/lens/server/scheduler/SchedulerApp.java
+++ b/lens-server/src/main/java/org/apache/lens/server/scheduler/SchedulerApp.java
@@ -18,28 +18,18 @@
  */
 package org.apache.lens.server.scheduler;
 
-import java.util.HashSet;
-import java.util.Set;
-
 import javax.ws.rs.ApplicationPath;
-import javax.ws.rs.core.Application;
-
-import org.apache.lens.server.LensApplicationListener;
 
-import org.glassfish.jersey.filter.LoggingFilter;
+import org.apache.lens.server.BaseApp;
 
 /**
  * The Class SchedulerApp.
  */
-@ApplicationPath("/queryscheduler")
-public class SchedulerApp extends Application {
+@ApplicationPath("/scheduler")
+public class SchedulerApp extends BaseApp {
+
   @Override
-  public Set<Class<?>> getClasses() {
-    final Set<Class<?>> classes = new HashSet<Class<?>>();
-    // register root resource
-    classes.add(ScheduleResource.class);
-    classes.add(LensApplicationListener.class);
-    classes.add(LoggingFilter.class);
-    return classes;
+  protected Class getResource() {
+    return ScheduleResource.class;
   }
 }

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-server/src/main/java/org/apache/lens/server/session/SessionApp.java
----------------------------------------------------------------------
diff --git a/lens-server/src/main/java/org/apache/lens/server/session/SessionApp.java b/lens-server/src/main/java/org/apache/lens/server/session/SessionApp.java
index a499968..a56bc89 100644
--- a/lens-server/src/main/java/org/apache/lens/server/session/SessionApp.java
+++ b/lens-server/src/main/java/org/apache/lens/server/session/SessionApp.java
@@ -18,31 +18,18 @@
  */
 package org.apache.lens.server.session;
 
-import java.util.HashSet;
-import java.util.Set;
-
 import javax.ws.rs.ApplicationPath;
-import javax.ws.rs.core.Application;
-
-import org.apache.lens.server.LensApplicationListener;
-
-import org.glassfish.jersey.filter.LoggingFilter;
-import org.glassfish.jersey.media.multipart.MultiPartFeature;
 
+import org.apache.lens.server.BaseApp;
 /**
  * The Class SessionApp.
  */
 @ApplicationPath("/session")
-public class SessionApp extends Application {
+public class SessionApp extends BaseApp {
+
   @Override
-  public Set<Class<?>> getClasses() {
-    final Set<Class<?>> classes = new HashSet<Class<?>>();
-    // register root resource
-    classes.add(SessionResource.class);
-    classes.add(MultiPartFeature.class);
-    classes.add(LoggingFilter.class);
-    classes.add(LensApplicationListener.class);
-    return classes;
+  protected Class getResource() {
+    return SessionResource.class;
   }
 
 }

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-server/src/main/java/org/apache/lens/server/session/SessionResource.java
----------------------------------------------------------------------
diff --git a/lens-server/src/main/java/org/apache/lens/server/session/SessionResource.java b/lens-server/src/main/java/org/apache/lens/server/session/SessionResource.java
index 3ba5edd..ac77418 100644
--- a/lens-server/src/main/java/org/apache/lens/server/session/SessionResource.java
+++ b/lens-server/src/main/java/org/apache/lens/server/session/SessionResource.java
@@ -45,7 +45,7 @@ import lombok.extern.slf4j.Slf4j;
  * <p></p>
  * This provides api for all things in session.
  */
-@Path("/session")
+@Path("session")
 @Slf4j
 public class SessionResource {
 

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-server/src/main/java/org/apache/lens/server/ui/UIApp.java
----------------------------------------------------------------------
diff --git a/lens-server/src/main/java/org/apache/lens/server/ui/UIApp.java b/lens-server/src/main/java/org/apache/lens/server/ui/UIApp.java
index c22a1aa..de4ce33 100644
--- a/lens-server/src/main/java/org/apache/lens/server/ui/UIApp.java
+++ b/lens-server/src/main/java/org/apache/lens/server/ui/UIApp.java
@@ -18,32 +18,28 @@
  */
 package org.apache.lens.server.ui;
 
-import java.util.HashSet;
 import java.util.Set;
 
 import javax.ws.rs.ApplicationPath;
-import javax.ws.rs.core.Application;
 
-import org.apache.lens.server.AuthenticationFilter;
-import org.apache.lens.server.LensApplicationListener;
-
-import org.glassfish.jersey.media.multipart.MultiPartFeature;
+import org.apache.lens.server.BaseApp;
 
 /**
  * The Class UIApp.
  */
 @ApplicationPath("/ui")
-public class UIApp extends Application {
+public class UIApp extends BaseApp {
+
+  @Override
+  protected Class getResource() {
+    return StaticFileResource.class;
+  }
 
   public Set<Class<?>> getClasses() {
-    final Set<Class<?>> classes = new HashSet<Class<?>>();
-    classes.add(StaticFileResource.class);
+    final Set<Class<?>> classes = super.getClasses();
     classes.add(QueryServiceUIResource.class);
     classes.add(SessionUIResource.class);
     classes.add(MetastoreUIResource.class);
-    classes.add(MultiPartFeature.class);
-    classes.add(AuthenticationFilter.class);
-    classes.add(LensApplicationListener.class);
     return classes;
   }
 

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-server/src/main/resources/lensserver-default.xml
----------------------------------------------------------------------
diff --git a/lens-server/src/main/resources/lensserver-default.xml b/lens-server/src/main/resources/lensserver-default.xml
index 881c159..a711d03 100644
--- a/lens-server/src/main/resources/lensserver-default.xml
+++ b/lens-server/src/main/resources/lensserver-default.xml
@@ -455,7 +455,7 @@
 
   <property>
     <name>lens.server.ws.featurenames</name>
-    <value>multipart</value>
+    <value>multipart,moxyjson,moxyjsonconfigresovler</value>
     <description>These JAX-RS Feature(s) would be started in the specified order when lens-server starts up
     </description>
   </property>
@@ -467,6 +467,16 @@
   </property>
 
   <property>
+    <name>lens.server.moxyjson.ws.feature.impl</name>
+    <value>org.glassfish.jersey.moxy.json.MoxyJsonFeature</value>
+    <description>Enable Moxy json feature </description>
+  </property>
+  <property>
+    <name>lens.server.moxyjsonconfigresovler.ws.feature.impl</name>
+    <value>org.apache.lens.api.util.MoxyJsonConfigurationContextResolver</value>
+    <description>Moxy json configuration resolver</description>
+  </property>
+  <property>
     <name>lens.server.ws.filternames</name>
     <value>authentication,consistentState,serverMode</value>
     <description>These JAX-RS filters would be started in the specified order when lens-server starts up</description>

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-server/src/test/java/org/apache/lens/server/LensAllApplicationJerseyTest.java
----------------------------------------------------------------------
diff --git a/lens-server/src/test/java/org/apache/lens/server/LensAllApplicationJerseyTest.java b/lens-server/src/test/java/org/apache/lens/server/LensAllApplicationJerseyTest.java
index 56a3b75..a3e0a19 100644
--- a/lens-server/src/test/java/org/apache/lens/server/LensAllApplicationJerseyTest.java
+++ b/lens-server/src/test/java/org/apache/lens/server/LensAllApplicationJerseyTest.java
@@ -20,8 +20,7 @@ package org.apache.lens.server;
 
 import javax.ws.rs.core.Application;
 
-import org.glassfish.jersey.client.ClientConfig;
-import org.glassfish.jersey.media.multipart.MultiPartFeature;
+import org.glassfish.jersey.test.TestProperties;
 
 /**
  * The Class LensAllApplicationJerseyTest.
@@ -35,17 +34,8 @@ public abstract class LensAllApplicationJerseyTest extends LensJerseyTest {
      */
   @Override
   protected Application configure() {
+    enable(TestProperties.LOG_TRAFFIC);
+    enable(TestProperties.DUMP_ENTITY);
     return new LensApplication();
   }
-
-  /*
-   * (non-Javadoc)
-   *
-   * @see org.glassfish.jersey.test.JerseyTest#configureClient(org.glassfish.jersey.client.ClientConfig)
-   */
-  @Override
-  protected void configureClient(ClientConfig config) {
-    config.register(MultiPartFeature.class);
-  }
-
 }

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-server/src/test/java/org/apache/lens/server/LensJerseyTest.java
----------------------------------------------------------------------
diff --git a/lens-server/src/test/java/org/apache/lens/server/LensJerseyTest.java b/lens-server/src/test/java/org/apache/lens/server/LensJerseyTest.java
index 8f52ddd..a00a86b 100644
--- a/lens-server/src/test/java/org/apache/lens/server/LensJerseyTest.java
+++ b/lens-server/src/test/java/org/apache/lens/server/LensJerseyTest.java
@@ -30,8 +30,12 @@ import java.net.URI;
 import java.util.List;
 import java.util.concurrent.ConcurrentLinkedQueue;
 
+import javax.ws.rs.client.Entity;
+import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.UriBuilder;
 
+import org.apache.lens.api.jaxb.LensJAXBContextResolver;
+import org.apache.lens.api.util.MoxyJsonConfigurationContextResolver;
 import org.apache.lens.driver.hive.TestRemoteHiveDriver;
 import org.apache.lens.server.api.LensConfConstants;
 import org.apache.lens.server.api.metrics.LensMetricsUtil;
@@ -44,9 +48,13 @@ import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hive.service.Service;
 import org.apache.hive.service.Service.STATE;
 
+import org.glassfish.jersey.client.ClientConfig;
+import org.glassfish.jersey.media.multipart.MultiPartFeature;
+import org.glassfish.jersey.moxy.json.MoxyJsonFeature;
 import org.glassfish.jersey.test.JerseyTest;
 import org.testng.annotations.AfterSuite;
 import org.testng.annotations.BeforeSuite;
+import org.testng.annotations.DataProvider;
 
 import com.google.common.collect.Lists;
 
@@ -59,6 +67,7 @@ import lombok.extern.slf4j.Slf4j;
 public abstract class LensJerseyTest extends JerseyTest {
 
   private int port = -1;
+  protected MediaType defaultMT = MediaType.APPLICATION_XML_TYPE;
 
   private final LogSegregationContext logSegregationContext = new MappedDiagnosticLogSegregationContext();
 
@@ -79,7 +88,7 @@ public abstract class LensJerseyTest extends JerseyTest {
     super.tearDown();
   }
   protected int getTestPort() {
-    if (!isPortAlreadyFound()) {
+    if (isPortAlreadyFound()) {
       return port;
     }
     ServerSocket socket = null;
@@ -109,6 +118,14 @@ public abstract class LensJerseyTest extends JerseyTest {
     return UriBuilder.fromUri(getUri()).path("lens-server").build();
   }
 
+  @Override
+  protected void configureClient(ClientConfig config) {
+    config.register(MultiPartFeature.class);
+    config.register(MoxyJsonFeature.class);
+    config.register(MoxyJsonConfigurationContextResolver.class);
+    config.register(LensJAXBContextResolver.class);
+  }
+
   public HiveConf getServerConf() {
     return LensServerConf.getHiveConf();
   }
@@ -213,6 +230,7 @@ public abstract class LensJerseyTest extends JerseyTest {
     LensServices.get().start();
     System.out.println("Lens services restarted!");
   }
+
   public static void waitForPurge(int allowUnpurgable,
     ConcurrentLinkedQueue<QueryExecutionServiceImpl.FinishedQuery> finishedQueries) throws InterruptedException {
     List<QueryExecutionServiceImpl.FinishedQuery> unPurgable = Lists.newArrayList();
@@ -228,4 +246,21 @@ public abstract class LensJerseyTest extends JerseyTest {
       Thread.sleep(5000);
     }
   }
+
+  @DataProvider(name = "mediaTypeData")
+  public Object[][] mediaTypeData() {
+    return new Object[][] {
+      {MediaType.APPLICATION_XML_TYPE},
+      {MediaType.APPLICATION_JSON_TYPE},
+    };
+  }
+
+  public static Entity getEntityForString(String o, MediaType mt) {
+    if (mt.equals(MediaType.APPLICATION_JSON_TYPE)) {
+      return Entity.json(o);
+    } else if (mt.equals(MediaType.APPLICATION_XML_TYPE)) {
+      return Entity.xml(o);
+    }
+    return null;
+  }
 }


[5/7] lens git commit: LENS-920 : Fix issues in producing and consuming json for all api

Posted by am...@apache.org.
http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-server/src/test/java/org/apache/lens/server/LensServerTestUtil.java
----------------------------------------------------------------------
diff --git a/lens-server/src/test/java/org/apache/lens/server/LensServerTestUtil.java b/lens-server/src/test/java/org/apache/lens/server/LensServerTestUtil.java
index 94dd394..ddca12f 100644
--- a/lens-server/src/test/java/org/apache/lens/server/LensServerTestUtil.java
+++ b/lens-server/src/test/java/org/apache/lens/server/LensServerTestUtil.java
@@ -75,7 +75,8 @@ public final class LensServerTestUtil {
    * @param schemaStr     the schema string, with surrounding parenthesis.
    * @throws InterruptedException the interrupted exception
    */
-  public static void createTable(String tblName, WebTarget parent, LensSessionHandle lensSessionId, String schemaStr)
+  public static void createTable(String tblName, WebTarget parent, LensSessionHandle lensSessionId, String schemaStr,
+    MediaType mt)
     throws InterruptedException {
     LensConf conf = new LensConf();
     conf.addProperty(LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, "false");
@@ -85,21 +86,21 @@ public final class LensServerTestUtil {
     String createTable = "CREATE TABLE IF NOT EXISTS " + tblName + schemaStr;
 
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId,
-      MediaType.APPLICATION_XML_TYPE));
+      mt));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(), createTable));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "execute"));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), conf,
-      MediaType.APPLICATION_XML_TYPE));
+      mt));
 
-    final QueryHandle handle = target.request()
+    final QueryHandle handle = target.request(mt)
         .post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE),
             new GenericType<LensAPIResult<QueryHandle>>() {}).getData();
     // wait till the query finishes
-    LensQuery ctx = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request()
+    LensQuery ctx = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request(mt)
       .get(LensQuery.class);
     QueryStatus stat = ctx.getStatus();
     while (!stat.finished()) {
-      ctx = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request().get(LensQuery.class);
+      ctx = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request(mt).get(LensQuery.class);
       stat = ctx.getStatus();
       Thread.sleep(1000);
     }
@@ -112,13 +113,13 @@ public final class LensServerTestUtil {
     assertTrue(ctx.getFinishTime() > 0, debugHelpMsg);
   }
 
-  public static void createTable(String tblName, WebTarget parent, LensSessionHandle lensSessionId)
+  public static void createTable(String tblName, WebTarget parent, LensSessionHandle lensSessionId, MediaType mt)
     throws InterruptedException {
-    createTable(tblName, parent, lensSessionId, "(ID INT, IDSTR STRING)");
+    createTable(tblName, parent, lensSessionId, "(ID INT, IDSTR STRING)", mt);
   }
 
   public static void loadData(String tblName, final String testDataFile, WebTarget parent,
-      LensSessionHandle lensSessionId) throws InterruptedException {
+      LensSessionHandle lensSessionId, MediaType mt) throws InterruptedException {
     LensConf conf = new LensConf();
     conf.addProperty(LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, "false");
     final WebTarget target = parent.path("queryapi/queries");
@@ -127,21 +128,21 @@ public final class LensServerTestUtil {
     String dataLoad = "LOAD DATA LOCAL INPATH '" + testDataFile + "' OVERWRITE INTO TABLE " + tblName;
 
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId,
-        MediaType.APPLICATION_XML_TYPE));
+        mt));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(), dataLoad));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "execute"));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), conf,
-        MediaType.APPLICATION_XML_TYPE));
+        mt));
 
-    final QueryHandle handle = target.request().post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE),
+    final QueryHandle handle = target.request(mt).post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE),
         new GenericType<LensAPIResult<QueryHandle>>() {}).getData();
 
     // wait till the query finishes
-    LensQuery ctx = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request()
+    LensQuery ctx = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request(mt)
         .get(LensQuery.class);
     QueryStatus stat = ctx.getStatus();
     while (!stat.finished()) {
-      ctx = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request().get(LensQuery.class);
+      ctx = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request(mt).get(LensQuery.class);
       stat = ctx.getStatus();
       Thread.sleep(1000);
     }
@@ -157,10 +158,10 @@ public final class LensServerTestUtil {
    * @throws InterruptedException the interrupted exception
    */
   public static void loadDataFromClasspath(String tblName, final String testDataFile, WebTarget parent,
-      LensSessionHandle lensSessionId) throws InterruptedException {
+      LensSessionHandle lensSessionId, MediaType mt) throws InterruptedException {
 
     String absolutePath = LensServerTestUtil.class.getClassLoader().getResource(testDataFile).getPath();
-    loadData(tblName, absolutePath, parent, lensSessionId);
+    loadData(tblName, absolutePath, parent, lensSessionId, mt);
   }
 
   /**
@@ -171,11 +172,11 @@ public final class LensServerTestUtil {
    * @param lensSessionId the lens session id
    * @throws InterruptedException the interrupted exception
    */
-  public static void dropTable(String tblName, WebTarget parent, LensSessionHandle lensSessionId)
+  public static void dropTable(String tblName, WebTarget parent, LensSessionHandle lensSessionId, MediaType mt)
     throws InterruptedException {
     LensConf conf = new LensConf();
     conf.addProperty(LensConfConstants.QUERY_PERSISTENT_RESULT_INDRIVER, "false");
-    dropTableWithConf(tblName, parent, lensSessionId, conf);
+    dropTableWithConf(tblName, parent, lensSessionId, conf, mt);
   }
 
   /**
@@ -189,28 +190,28 @@ public final class LensServerTestUtil {
    * @throws InterruptedException
    */
   public static void dropTableWithConf(String tblName, WebTarget parent, LensSessionHandle lensSessionId,
-    LensConf conf) throws InterruptedException {
+    LensConf conf, MediaType mt) throws InterruptedException {
     final WebTarget target = parent.path("queryapi/queries");
 
     final FormDataMultiPart mp = new FormDataMultiPart();
     String createTable = "DROP TABLE IF EXISTS " + tblName;
 
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId,
-      MediaType.APPLICATION_XML_TYPE));
+      mt));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(), createTable));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "execute"));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), conf,
-      MediaType.APPLICATION_XML_TYPE));
+      mt));
 
-    final QueryHandle handle = target.request().post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE),
+    final QueryHandle handle = target.request(mt).post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE),
         new GenericType<LensAPIResult<QueryHandle>>() {}).getData();
 
     // wait till the query finishes
-    LensQuery ctx = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request()
+    LensQuery ctx = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request(mt)
       .get(LensQuery.class);
     QueryStatus stat = ctx.getStatus();
     while (!stat.finished()) {
-      ctx = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request().get(LensQuery.class);
+      ctx = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request(mt).get(LensQuery.class);
       stat = ctx.getStatus();
       Thread.sleep(1000);
     }

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-server/src/test/java/org/apache/lens/server/TestLensApplication.java
----------------------------------------------------------------------
diff --git a/lens-server/src/test/java/org/apache/lens/server/TestLensApplication.java b/lens-server/src/test/java/org/apache/lens/server/TestLensApplication.java
index 4f9f4d2..6636346 100644
--- a/lens-server/src/test/java/org/apache/lens/server/TestLensApplication.java
+++ b/lens-server/src/test/java/org/apache/lens/server/TestLensApplication.java
@@ -23,7 +23,6 @@ import static org.testng.Assert.assertEquals;
 import java.util.List;
 
 import javax.ws.rs.client.WebTarget;
-import javax.ws.rs.core.Application;
 import javax.ws.rs.core.Response;
 
 import org.apache.lens.server.api.metrics.MetricsService;
@@ -39,17 +38,7 @@ import com.codahale.metrics.ScheduledReporter;
  * The Class TestLensApplication.
  */
 @Test(alwaysRun = true, groups = "unit-test")
-public class TestLensApplication extends LensJerseyTest {
-
-  /*
-   * (non-Javadoc)
-   *
-   * @see org.glassfish.jersey.test.JerseyTest#configure()
-   */
-  @Override
-  protected Application configure() {
-    return new LensApplication();
-  }
+public class TestLensApplication extends LensAllApplicationJerseyTest {
 
   /**
    * Setup.

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-server/src/test/java/org/apache/lens/server/TestServerMode.java
----------------------------------------------------------------------
diff --git a/lens-server/src/test/java/org/apache/lens/server/TestServerMode.java b/lens-server/src/test/java/org/apache/lens/server/TestServerMode.java
index 75f21e1..caf968a 100644
--- a/lens-server/src/test/java/org/apache/lens/server/TestServerMode.java
+++ b/lens-server/src/test/java/org/apache/lens/server/TestServerMode.java
@@ -61,7 +61,8 @@ public class TestServerMode extends LensAllApplicationJerseyTest {
   @BeforeTest
   public void setUp() throws Exception {
     super.setUp();
-    LensServerTestUtil.createTable("test_table", target(), RestAPITestUtil.openFooBarSession(target()));
+    LensServerTestUtil.createTable("test_table", target(), RestAPITestUtil.openFooBarSession(target(), defaultMT),
+      defaultMT);
   }
 
   /*

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-server/src/test/java/org/apache/lens/server/TestServerRestart.java
----------------------------------------------------------------------
diff --git a/lens-server/src/test/java/org/apache/lens/server/TestServerRestart.java b/lens-server/src/test/java/org/apache/lens/server/TestServerRestart.java
index 877200f..0f55d9e 100644
--- a/lens-server/src/test/java/org/apache/lens/server/TestServerRestart.java
+++ b/lens-server/src/test/java/org/apache/lens/server/TestServerRestart.java
@@ -142,14 +142,14 @@ public class TestServerRestart extends LensAllApplicationJerseyTest {
     createRestartTestDataFile();
 
     // Create a test table
-    createTable("test_server_restart", target(), lensSessionId);
-    loadData("test_server_restart", TestResourceFile.TEST_DATA_FILE.getValue(), target(), lensSessionId);
+    createTable("test_server_restart", target(), lensSessionId, defaultMT);
+    loadData("test_server_restart", TestResourceFile.TEST_DATA_FILE.getValue(), target(), lensSessionId, defaultMT);
     log.info("Loaded data");
 
     // test post execute op
     final WebTarget target = target().path("queryapi/queries");
 
-    List<QueryHandle> launchedQueries = new ArrayList<QueryHandle>();
+    List<QueryHandle> launchedQueries = new ArrayList<>();
     final int NUM_QUERIES = 10;
 
     boolean killed = false;
@@ -168,19 +168,18 @@ public class TestServerRestart extends LensAllApplicationJerseyTest {
 
       final FormDataMultiPart mp = new FormDataMultiPart();
       mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId,
-        MediaType.APPLICATION_XML_TYPE));
+        defaultMT));
       mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(),
         "select COUNT(ID) from test_server_restart"));
       mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "execute"));
       mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(),
-        new LensConf(), MediaType.APPLICATION_XML_TYPE));
-      final QueryHandle handle = target.request().post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE),
+        new LensConf(), defaultMT));
+      final QueryHandle handle = target.request(defaultMT).post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE),
         new GenericType<LensAPIResult<QueryHandle>>() {}).getData();
 
       Assert.assertNotNull(handle);
-      LensQuery ctx = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request()
+      LensQuery ctx = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request(defaultMT)
         .get(LensQuery.class);
-      QueryStatus stat = ctx.getStatus();
       log.info("{} submitted query {} state: {}", i, handle, ctx.getStatus().getStatus());
       launchedQueries.add(handle);
     }
@@ -196,18 +195,19 @@ public class TestServerRestart extends LensAllApplicationJerseyTest {
     for (QueryHandle handle : launchedQueries) {
       log.info("Polling query {}", handle);
       try {
-        LensQuery ctx = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request()
+        LensQuery ctx = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request(defaultMT)
           .get(LensQuery.class);
         QueryStatus stat = ctx.getStatus();
         while (!stat.finished()) {
           log.info("Polling query {} Status:{}", handle, stat);
-          ctx = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request().get(LensQuery.class);
+          ctx = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request(defaultMT)
+            .get(LensQuery.class);
           stat = ctx.getStatus();
           Thread.sleep(1000);
         }
         assertEquals(ctx.getStatus().getStatus(), QueryStatus.Status.SUCCESSFUL, "Expected to be successful " + handle);
         PersistentQueryResult resultset = target.path(handle.toString()).path("resultset")
-          .queryParam("sessionid", lensSessionId).request().get(PersistentQueryResult.class);
+          .queryParam("sessionid", lensSessionId).request(defaultMT).get(PersistentQueryResult.class);
         List<String> rows = TestQueryService.readResultSet(resultset, handle, true);
         assertEquals(rows.size(), 1);
         assertEquals(rows.get(0), "" + NROWS);
@@ -218,7 +218,7 @@ public class TestServerRestart extends LensAllApplicationJerseyTest {
       }
     }
     log.info("End server restart test");
-    LensServerTestUtil.dropTable("test_server_restart", target(), lensSessionId);
+    LensServerTestUtil.dropTable("test_server_restart", target(), lensSessionId, defaultMT);
     queryService.closeSession(lensSessionId);
   }
 
@@ -249,9 +249,9 @@ public class TestServerRestart extends LensAllApplicationJerseyTest {
     log.info("@@ Added resource {}", dataFile.toURI());
 
     // Create a test table
-    createTable("test_hive_server_restart", target(), lensSessionId);
+    createTable("test_hive_server_restart", target(), lensSessionId, defaultMT);
     loadData("test_hive_server_restart", TestResourceFile.TEST_DATA_FILE.getValue(), target(),
-      lensSessionId);
+      lensSessionId, defaultMT);
     log.info("Loaded data");
 
     log.info("Hive Server restart test");
@@ -261,24 +261,25 @@ public class TestServerRestart extends LensAllApplicationJerseyTest {
     // Submit query, restart HS2, submit another query
     FormDataMultiPart mp = new FormDataMultiPart();
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionId,
-      MediaType.APPLICATION_XML_TYPE));
+      defaultMT));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("query").build(),
       "select COUNT(ID) from test_hive_server_restart"));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("operation").build(), "execute"));
     mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("conf").fileName("conf").build(), new LensConf(),
-      MediaType.APPLICATION_XML_TYPE));
-    QueryHandle handle = target.request()
+      defaultMT));
+    QueryHandle handle = target.request(defaultMT)
       .post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE),
         new GenericType<LensAPIResult<QueryHandle>>() {}).getData();
 
     Assert.assertNotNull(handle);
 
     // wait for query to move out of QUEUED state
-    LensQuery ctx = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request()
+    LensQuery ctx = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request(defaultMT)
         .get(LensQuery.class);
     QueryStatus stat = ctx.getStatus();
     while (stat.queued()) {
-      ctx = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request().get(LensQuery.class);
+      ctx = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request(defaultMT)
+        .get(LensQuery.class);
       stat = ctx.getStatus();
       Thread.sleep(1000);
     }
@@ -312,12 +313,13 @@ public class TestServerRestart extends LensAllApplicationJerseyTest {
     verifyParamOnRestart(lensSessionId);
 
     // Poll for first query, we should not get any exception
-    ctx = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request()
+    ctx = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request(defaultMT)
       .get(LensQuery.class);
     stat = ctx.getStatus();
     while (!stat.finished()) {
       log.info("Polling query {} Status:{}", handle, stat);
-      ctx = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request().get(LensQuery.class);
+      ctx = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request(defaultMT)
+        .get(LensQuery.class);
       stat = ctx.getStatus();
       Thread.sleep(1000);
     }
@@ -332,18 +334,19 @@ public class TestServerRestart extends LensAllApplicationJerseyTest {
     final String query = "select COUNT(ID) from test_hive_server_restart";
     Response response = null;
     while (response == null || response.getStatus() == Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()) {
-      response = execute(target(), Optional.of(lensSessionId), Optional.of(query));
+      response = execute(target(), Optional.of(lensSessionId), Optional.of(query), defaultMT);
       Thread.sleep(1000);
     }
 
     handle = response.readEntity(new GenericType<LensAPIResult<QueryHandle>>() {}).getData();
 
     // Poll for second query, this should finish successfully
-    ctx = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request().get(LensQuery.class);
+    ctx = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request(defaultMT).get(LensQuery.class);
     stat = ctx.getStatus();
     while (!stat.finished()) {
       log.info("Post restart polling query {} Status:{}", handle, stat);
-      ctx = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request().get(LensQuery.class);
+      ctx = target.path(handle.toString()).queryParam("sessionid", lensSessionId).request(defaultMT)
+        .get(LensQuery.class);
       stat = ctx.getStatus();
       Thread.sleep(1000);
     }
@@ -364,7 +367,7 @@ public class TestServerRestart extends LensAllApplicationJerseyTest {
     // "Expected to be successful " + handle);
 
     log.info("End hive server restart test");
-    LensServerTestUtil.dropTable("test_hive_server_restart", target(), lensSessionId);
+    LensServerTestUtil.dropTable("test_hive_server_restart", target(), lensSessionId, defaultMT);
     queryService.closeSession(lensSessionId);
   }
 
@@ -383,9 +386,9 @@ public class TestServerRestart extends LensAllApplicationJerseyTest {
     sessionForm.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("username").build(), "foo"));
     sessionForm.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("password").build(), "bar"));
     sessionForm.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionconf").fileName("sessionconf")
-      .build(), new LensConf(), MediaType.APPLICATION_XML_TYPE));
+      .build(), new LensConf(), defaultMT));
 
-    final LensSessionHandle restartTestSession = sessionTarget.request().post(
+    final LensSessionHandle restartTestSession = sessionTarget.request(defaultMT).post(
       Entity.entity(sessionForm, MediaType.MULTIPART_FORM_DATA_TYPE), LensSessionHandle.class);
     Assert.assertNotNull(restartTestSession);
 
@@ -396,11 +399,11 @@ public class TestServerRestart extends LensAllApplicationJerseyTest {
     final WebTarget resourcetarget = target().path("session/resources");
     final FormDataMultiPart mp1 = new FormDataMultiPart();
     mp1.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), restartTestSession,
-      MediaType.APPLICATION_XML_TYPE));
+      defaultMT));
     mp1.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("type").build(), "file"));
     mp1.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("path").build(),
       "target/test-classes/lens-site.xml"));
-    APIResult result = resourcetarget.path("add").request()
+    APIResult result = resourcetarget.path("add").request(defaultMT)
       .put(Entity.entity(mp1, MediaType.MULTIPART_FORM_DATA_TYPE), APIResult.class);
     assertEquals(result.getStatus(), Status.SUCCEEDED);
 
@@ -420,18 +423,18 @@ public class TestServerRestart extends LensAllApplicationJerseyTest {
     Assert.assertTrue(resourceEntry.getLocation().contains("target/test-classes/lens-site.xml"));
 
     // close session
-    result = sessionTarget.queryParam("sessionid", restartTestSession).request().delete(APIResult.class);
+    result = sessionTarget.queryParam("sessionid", restartTestSession).request(defaultMT).delete(APIResult.class);
     assertEquals(result.getStatus(), APIResult.Status.SUCCEEDED);
   }
 
   private void setParams(LensSessionHandle lensSessionHandle) {
     FormDataMultiPart setpart = new FormDataMultiPart();
     setpart.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("sessionid").build(), lensSessionHandle,
-      MediaType.APPLICATION_XML_TYPE));
+      defaultMT));
     setpart
       .bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("key").build(), "lens.session.testRestartKey"));
     setpart.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("value").build(), "myvalue"));
-    APIResult result = target().path("session").path("params").request()
+    APIResult result = target().path("session").path("params").request(defaultMT)
       .put(Entity.entity(setpart, MediaType.MULTIPART_FORM_DATA_TYPE), APIResult.class);
     assertEquals(result.getStatus(), APIResult.Status.SUCCEEDED);
   }
@@ -439,10 +442,10 @@ public class TestServerRestart extends LensAllApplicationJerseyTest {
   private void verifyParamOnRestart(LensSessionHandle lensSessionHandle) {
 
     StringList sessionParams = target().path("session").path("params").queryParam("sessionid", lensSessionHandle)
-      .queryParam("verbose", true).queryParam("key", "lens.session.testRestartKey").request().get(StringList.class);
+      .queryParam("verbose", true).queryParam("key", "lens.session.testRestartKey").request(defaultMT)
+      .get(StringList.class);
     System.out.println("Session params:" + sessionParams.getElements());
     assertEquals(sessionParams.getElements().size(), 1);
     Assert.assertTrue(sessionParams.getElements().contains("lens.session.testRestartKey=myvalue"));
-
   }
 }

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-server/src/test/java/org/apache/lens/server/common/FormDataMultiPartFactory.java
----------------------------------------------------------------------
diff --git a/lens-server/src/test/java/org/apache/lens/server/common/FormDataMultiPartFactory.java b/lens-server/src/test/java/org/apache/lens/server/common/FormDataMultiPartFactory.java
index 5301162..9a1d79d 100644
--- a/lens-server/src/test/java/org/apache/lens/server/common/FormDataMultiPartFactory.java
+++ b/lens-server/src/test/java/org/apache/lens/server/common/FormDataMultiPartFactory.java
@@ -41,83 +41,76 @@ public class FormDataMultiPartFactory {
   }
 
   public static FormDataMultiPart createFormDataMultiPartForQuery(final Optional<LensSessionHandle> sessionId,
-      final Optional<String> query, final Optional<String> operation, final LensConf lensConf) {
+      final Optional<String> query, final Optional<String> operation, final LensConf lensConf, MediaType mt) {
 
     final FormDataMultiPart mp = new FormDataMultiPart();
 
     if (sessionId.isPresent()) {
-      mp.bodyPart(getSessionIdFormDataBodyPart(sessionId.get()));
+      mp.bodyPart(getSessionIdFormDataBodyPart(sessionId.get(), mt));
     }
 
     if (query.isPresent()) {
-      mp.bodyPart(getFormDataBodyPart("query", query.get()));
+      mp.bodyPart(getFormDataBodyPart("query", query.get(), mt));
     }
 
     if (operation.isPresent()) {
-      mp.bodyPart(getFormDataBodyPart("operation", operation.get()));
+      mp.bodyPart(getFormDataBodyPart("operation", operation.get(), mt));
     }
 
-    mp.bodyPart(getFormDataBodyPart("conf", "conf", lensConf));
+    mp.bodyPart(getFormDataBodyPart("conf", "conf", lensConf, mt));
     return mp;
   }
 
-  public static FormDataMultiPart createFormDataMultiPartForSession(final Optional<LensSessionHandle> sessionId,
-      final Optional<String> username, final Optional<String> password, final Optional<LensConf> lensConf) {
+  public static FormDataMultiPart createFormDataMultiPartForSession(
+    final Optional<String> username, final Optional<String> password, final Optional<LensConf> lensConf,
+    final MediaType mt) {
 
     final FormDataMultiPart mp = new FormDataMultiPart();
 
-    if (sessionId.isPresent()) {
-      mp.bodyPart(getSessionIdFormDataBodyPart(sessionId.get()));
-    }
-
     if (username.isPresent()) {
-      mp.bodyPart(getFormDataBodyPart("username", username.get()));
+      mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("username").build(), username.get()));
     }
 
     if (password.isPresent()) {
-      mp.bodyPart(getFormDataBodyPart("password", password.get()));
+      mp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("password").build(), password.get()));
     }
 
     if (lensConf.isPresent()) {
-      mp.bodyPart(getFormDataBodyPart("sessionconf", "sessionconf", lensConf.get()));
+      mp.bodyPart(getFormDataBodyPart("sessionconf", "sessionconf", lensConf.get(), mt));
     }
 
     return mp;
   }
 
   public static FormDataMultiPart createFormDataMultiPartForFact(final LensSessionHandle sessionId,
-      final XFactTable xFactTable) {
+      final XFactTable xFactTable, MediaType mt) {
 
     final FormDataMultiPart mp = new FormDataMultiPart();
-    mp.bodyPart(getSessionIdFormDataBodyPart(sessionId));
-    mp.bodyPart(getFormDataBodyPart("fact", "fact", cubeObjectFactory.createXFactTable(xFactTable)));
+    mp.bodyPart(getSessionIdFormDataBodyPart(sessionId, mt));
+    mp.bodyPart(getFormDataBodyPart("fact", "fact", cubeObjectFactory.createXFactTable(xFactTable), mt));
 
     return mp;
   }
 
-  private static FormDataBodyPart getFormDataBodyPart(final String fdContentDispName, final String value) {
+  private static FormDataBodyPart getFormDataBodyPart(final String fdContentDispName, final String value,
+    final MediaType mt) {
     return new FormDataBodyPart(FormDataContentDisposition.name(fdContentDispName).build(), value,
-        MediaType.APPLICATION_XML_TYPE);
+        mt);
   }
 
-  private static FormDataBodyPart getFormDataBodyPart(final String fdContentDispName, final Object entity) {
+  private static FormDataBodyPart getFormDataBodyPart(final String fdContentDispName, final Object entity,
+    final MediaType mt) {
     return new FormDataBodyPart(FormDataContentDisposition.name(fdContentDispName).build(), entity,
-        MediaType.APPLICATION_XML_TYPE);
+        mt);
   }
 
   private static FormDataBodyPart getFormDataBodyPart(final String fdContentDispName, final String fileName,
-      final Object entity) {
+      final Object entity, final MediaType mt) {
     return new FormDataBodyPart(FormDataContentDisposition.name(fdContentDispName).fileName(fileName).build(), entity,
-        MediaType.APPLICATION_XML_TYPE);
-  }
-
-  private static FormDataBodyPart getFormDataBodyPartWithOutEntity(final String fdContentDispName,
-      final String fileName) {
-    return new FormDataBodyPart(FormDataContentDisposition.name(fdContentDispName).fileName(fileName).build(),
-        MediaType.APPLICATION_XML_TYPE);
+        mt);
   }
 
-  private static FormDataBodyPart getSessionIdFormDataBodyPart(final LensSessionHandle sessionId) {
-    return getFormDataBodyPart("sessionid", sessionId);
+  private static FormDataBodyPart getSessionIdFormDataBodyPart(final LensSessionHandle sessionId, MediaType mt) {
+    return getFormDataBodyPart("sessionid", sessionId, mt);
   }
 }

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-server/src/test/java/org/apache/lens/server/common/RestAPITestUtil.java
----------------------------------------------------------------------
diff --git a/lens-server/src/test/java/org/apache/lens/server/common/RestAPITestUtil.java b/lens-server/src/test/java/org/apache/lens/server/common/RestAPITestUtil.java
index 4b25fd0..0e39b52 100644
--- a/lens-server/src/test/java/org/apache/lens/server/common/RestAPITestUtil.java
+++ b/lens-server/src/test/java/org/apache/lens/server/common/RestAPITestUtil.java
@@ -19,7 +19,6 @@
 
 package org.apache.lens.server.common;
 
-import static org.apache.lens.server.common.FormDataMultiPartFactory.createFormDataMultiPartForFact;
 import static org.apache.lens.server.common.FormDataMultiPartFactory.createFormDataMultiPartForSession;
 
 import static org.testng.Assert.assertEquals;
@@ -28,9 +27,11 @@ import static org.testng.Assert.assertNotNull;
 import javax.ws.rs.client.Entity;
 import javax.ws.rs.client.Invocation;
 import javax.ws.rs.client.WebTarget;
+import javax.ws.rs.core.GenericEntity;
 import javax.ws.rs.core.GenericType;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
+import javax.xml.bind.JAXBElement;
 
 import org.apache.lens.api.APIResult;
 import org.apache.lens.api.LensConf;
@@ -38,10 +39,7 @@ import org.apache.lens.api.LensSessionHandle;
 import org.apache.lens.api.metastore.ObjectFactory;
 import org.apache.lens.api.metastore.XCube;
 import org.apache.lens.api.metastore.XFactTable;
-import org.apache.lens.api.query.LensQuery;
-import org.apache.lens.api.query.QueryHandle;
-import org.apache.lens.api.query.QueryResult;
-import org.apache.lens.api.query.QueryStatus;
+import org.apache.lens.api.query.*;
 import org.apache.lens.api.result.LensAPIResult;
 
 import org.glassfish.jersey.media.multipart.FormDataMultiPart;
@@ -56,43 +54,43 @@ public class RestAPITestUtil {
     throw new UnsupportedOperationException();
   }
 
-  public static LensSessionHandle openFooBarSession(final WebTarget target) {
-    return openSession(target, "foo", "bar");
+  public static LensSessionHandle openFooBarSession(final WebTarget target, MediaType mt) {
+    return openSession(target, "foo", "bar", mt);
   }
 
-  public static LensSessionHandle openSession(final WebTarget target, final String userName, final String passwd) {
-    return openSession(target, userName, passwd, new LensConf());
+  public static LensSessionHandle openSession(final WebTarget target, final String userName, final String passwd,
+    MediaType mt) {
+    return openSession(target, userName, passwd, new LensConf(), mt);
   }
 
   public static LensSessionHandle openSession(final WebTarget target, final String userName, final String passwd,
-    final LensConf conf) {
+    final LensConf conf, MediaType mt) {
 
-    final FormDataMultiPart mp = createFormDataMultiPartForSession(Optional.<LensSessionHandle>absent(),
-      Optional.of(userName), Optional.of(passwd), Optional.of(conf));
+    final FormDataMultiPart mp = createFormDataMultiPartForSession(Optional.of(userName), Optional.of(passwd),
+      Optional.of(conf), mt);
 
-    return target.path("session").request().post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE),
+    return target.path("session").request(mt).post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE),
       LensSessionHandle.class);
   }
 
   public static Response estimate(final WebTarget target, final Optional<LensSessionHandle> sessionId,
-    final Optional<String> query) {
-
-    return postQuery(target, sessionId, query, Optional.of("estimate"), Optional.<LensConf>absent());
+    final Optional<String> query, MediaType mt) {
+    return postQuery(target, sessionId, query, Optional.of("estimate"), Optional.<LensConf>absent(), mt);
   }
 
   public static Response execute(final WebTarget target, final Optional<LensSessionHandle> sessionId,
-    final Optional<String> query) {
-    return execute(target, sessionId, query, Optional.<LensConf>absent());
+    final Optional<String> query, MediaType mt) {
+    return execute(target, sessionId, query, Optional.<LensConf>absent(), mt);
   }
 
   public static Response execute(final WebTarget target, final Optional<LensSessionHandle> sessionId,
-    final Optional<String> query, final Optional<LensConf> lensConf) {
-    return postQuery(target, sessionId, query, Optional.of("execute"), lensConf);
+    final Optional<String> query, final Optional<LensConf> lensConf, MediaType mt) {
+    return postQuery(target, sessionId, query, Optional.of("execute"), lensConf, mt);
   }
 
   public static <T> T executeAndGetHandle(final WebTarget target, final Optional<LensSessionHandle> sessionId,
-    final Optional<String> query, final Optional<LensConf> lensConf) {
-    Response resp = postQuery(target, sessionId, query, Optional.of("execute"), lensConf);
+    final Optional<String> query, final Optional<LensConf> lensConf, MediaType mt) {
+    Response resp = postQuery(target, sessionId, query, Optional.of("execute"), lensConf, mt);
     assertEquals(resp.getStatus(), Response.Status.OK.getStatusCode());
     T handle = resp.readEntity(new GenericType<LensAPIResult<T>>() {}).getData();
     assertNotNull(handle);
@@ -100,116 +98,115 @@ public class RestAPITestUtil {
   }
 
   public static Response postQuery(final WebTarget target, final Optional<LensSessionHandle> sessionId,
-    final Optional<String> query, final Optional<String> operation) {
-    return postQuery(target, sessionId, query, operation, Optional.<LensConf>absent());
+                                   final Optional<String> query, final Optional<String> operation, MediaType mt) {
+    return postQuery(target, sessionId, query, operation, Optional.<LensConf>absent(), mt);
   }
 
   public static Response postQuery(final WebTarget target, final Optional<LensSessionHandle> sessionId,
-    final Optional<String> query, final Optional<String> operation, Optional<LensConf> lensConfOptional) {
+    final Optional<String> query, final Optional<String> operation, Optional<LensConf> lensConfOptional, MediaType mt) {
 
     FormDataMultiPart mp = FormDataMultiPartFactory
-      .createFormDataMultiPartForQuery(sessionId, query, operation, lensConfOptional.or(new LensConf()));
+      .createFormDataMultiPartForQuery(sessionId, query, operation, lensConfOptional.or(new LensConf()), mt);
 
-    return target.path("queryapi/queries").request(MediaType.APPLICATION_XML).post(
+    return target.path("queryapi/queries").request(mt).post(
       Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE));
   }
 
   public static LensQuery executeAndWaitForQueryToFinish(WebTarget target, LensSessionHandle lensSessionId,
-    String query, Optional<LensConf> conf, Optional<QueryStatus.Status> statusOptional) throws InterruptedException {
-    QueryHandle handle = executeAndGetHandle(target, Optional.of(lensSessionId), Optional.of(query), conf);
+    String query, Optional<LensConf> conf, Optional<QueryStatus.Status> statusOptional, MediaType mt)
+    throws InterruptedException {
+    QueryHandle handle = executeAndGetHandle(target, Optional.of(lensSessionId), Optional.of(query), conf, mt);
     if (statusOptional.isPresent()) {
-      return waitForQueryToFinish(target, lensSessionId, handle, statusOptional.get());
+      return waitForQueryToFinish(target, lensSessionId, handle, statusOptional.get(), mt);
     } else {
-      return waitForQueryToFinish(target, lensSessionId, handle);
+      return waitForQueryToFinish(target, lensSessionId, handle, mt);
     }
   }
 
-  public static void closeSessionFailFast(final WebTarget target, final LensSessionHandle sessionId) {
-    APIResult result = closeSession(target, sessionId);
+  public static void closeSessionFailFast(final WebTarget target, final LensSessionHandle sessionId, MediaType mt) {
+    APIResult result = closeSession(target, sessionId, mt);
     checkResponse(result);
   }
 
-  public static APIResult closeSession(final WebTarget target, final LensSessionHandle sessionId) {
-    return target.path("session").queryParam("sessionid", sessionId).request().delete(APIResult.class);
+  public static APIResult closeSession(final WebTarget target, final LensSessionHandle sessionId, MediaType mt) {
+    return target.path("session").queryParam("sessionid", sessionId).request(mt).delete(APIResult.class);
   }
 
-  public static String getCurrentDatabase(final WebTarget target, final LensSessionHandle sessionId) {
+  public static String getCurrentDatabase(final WebTarget target, final LensSessionHandle sessionId, MediaType mt) {
     WebTarget dbTarget = target.path("metastore").path("databases/current");
-    Invocation.Builder builder = dbTarget.queryParam("sessionid", sessionId).request(MediaType.APPLICATION_XML);
+    Invocation.Builder builder = dbTarget.queryParam("sessionid", sessionId).request(mt);
     String response = builder.get(String.class);
     return response;
   }
 
-  public static APIResult createCube(final WebTarget target, final LensSessionHandle sessionId, final XCube cube) {
-
-    return target.path("metastore").path("cubes").queryParam("sessionid", sessionId).request(MediaType.APPLICATION_XML)
-      .post(Entity.xml(cubeObjectFactory.createXCube(cube)), APIResult.class);
+  public static APIResult createCube(final WebTarget target, final LensSessionHandle sessionId, final XCube cube,
+    MediaType mt) {
+    return target.path("metastore").path("cubes").queryParam("sessionid", sessionId).request(mt)
+      .post(Entity.entity(
+        new GenericEntity<JAXBElement<XCube>>(cubeObjectFactory.createXCube(cube)){}, mt), APIResult.class);
   }
 
-  public static void createCubeFailFast(final WebTarget target, final LensSessionHandle sessionId, final XCube cube) {
-    APIResult result = createCube(target, sessionId, cube);
+  public static void createCubeFailFast(final WebTarget target, final LensSessionHandle sessionId, final XCube cube,
+    MediaType mt) {
+    APIResult result = createCube(target, sessionId, cube, mt);
     checkResponse(result);
   }
 
-  public static APIResult createFact(final WebTarget target, final LensSessionHandle sessionId,
-    final XFactTable factTable) {
-
-    FormDataMultiPart mp = createFormDataMultiPartForFact(sessionId, factTable);
-    return target.path("metastore").path("facts").queryParam("sessionid", sessionId).request(MediaType.APPLICATION_XML)
-      .post(Entity.entity(mp, MediaType.MULTIPART_FORM_DATA_TYPE), APIResult.class);
-  }
-
   public static void createFactFailFast(final WebTarget target, final LensSessionHandle sessionId,
-    final XFactTable factTable) {
+    final XFactTable factTable, MediaType mt) {
 
-    APIResult result = createFact(target, sessionId, factTable);
+    APIResult result = target.path("metastore").path("facts").queryParam("sessionid", sessionId)
+      .request(mt).post(Entity.entity(
+          new GenericEntity<JAXBElement<XFactTable>>(cubeObjectFactory.createXFactTable(factTable)) {
+          }, mt),
+        APIResult.class);
     checkResponse(result);
   }
 
   public static APIResult setCurrentDatabase(final WebTarget target, final LensSessionHandle sessionId,
-    final String dbName) {
+    final String dbName, MediaType mt) {
 
     WebTarget dbTarget = target.path("metastore").path("databases/current");
-    return dbTarget.queryParam("sessionid", sessionId).request(MediaType.APPLICATION_XML)
+    return dbTarget.queryParam("sessionid", sessionId).request(mt)
       .put(Entity.xml(dbName),
         APIResult.class);
   }
 
   public static void setCurrentDatabaseFailFast(final WebTarget target, final LensSessionHandle sessionId,
-    final String dbName) {
+    final String dbName, MediaType mt) {
 
-    APIResult result = setCurrentDatabase(target, sessionId, dbName);
+    APIResult result = setCurrentDatabase(target, sessionId, dbName, mt);
     checkResponse(result);
   }
 
   public static APIResult createDatabase(final WebTarget target, final LensSessionHandle sessionId,
-    final String dbName) {
+    final String dbName, MediaType mt) {
 
     WebTarget dbTarget = target.path("metastore").path("databases");
-    return dbTarget.queryParam("sessionid", sessionId).request(MediaType.APPLICATION_XML)
+    return dbTarget.queryParam("sessionid", sessionId).request(mt)
       .post(Entity.xml(dbName), APIResult.class);
   }
 
   public static void createDatabaseFailFast(final WebTarget target, final LensSessionHandle sessionId,
-    final String dbName) {
+    final String dbName, MediaType mt) {
 
-    APIResult result = createDatabase(target, sessionId, dbName);
+    APIResult result = createDatabase(target, sessionId, dbName, mt);
     checkResponse(result);
   }
 
   public static void createAndSetCurrentDbFailFast(final WebTarget target, final LensSessionHandle sessionId,
-    final String dbName) {
+    final String dbName, MediaType mt) {
 
-    createDatabaseFailFast(target, sessionId, dbName);
-    setCurrentDatabaseFailFast(target, sessionId, dbName);
+    createDatabaseFailFast(target, sessionId, dbName, mt);
+    setCurrentDatabaseFailFast(target, sessionId, dbName, mt);
   }
 
   public static APIResult dropDatabaseFailFast(final WebTarget target, final LensSessionHandle sessionId,
-    String dbName) {
+    String dbName, MediaType mt) {
 
     WebTarget dbTarget = target.path("metastore").path("databases").path(dbName);
     return dbTarget.queryParam("cascade", "true")
-      .queryParam("sessionid", sessionId).request(MediaType.APPLICATION_XML).delete(APIResult.class);
+      .queryParam("sessionid", sessionId).request(mt).delete(APIResult.class);
   }
 
   private static void checkResponse(final APIResult result) {
@@ -219,32 +216,38 @@ public class RestAPITestUtil {
   }
 
   public static LensQuery waitForQueryToFinish(final WebTarget target, final LensSessionHandle lensSessionHandle,
-    final QueryHandle handle) throws InterruptedException {
-    LensQuery ctx = getLensQuery(target, lensSessionHandle, handle);
+    final QueryHandle handle, MediaType mt) throws InterruptedException {
+    LensQuery ctx = getLensQuery(target, lensSessionHandle, handle, mt);
     while (!ctx.getStatus().finished()) {
-      ctx = getLensQuery(target, lensSessionHandle, handle);
+      ctx = getLensQuery(target, lensSessionHandle, handle, mt);
       Thread.sleep(1000);
     }
     return ctx;
   }
 
   public static LensQuery waitForQueryToFinish(final WebTarget target, final LensSessionHandle lensSessionHandle,
-    final QueryHandle handle, QueryStatus.Status status) throws InterruptedException {
-    LensQuery lensQuery = waitForQueryToFinish(target, lensSessionHandle, handle);
+    final QueryHandle handle, QueryStatus.Status status, MediaType mt) throws InterruptedException {
+    LensQuery lensQuery = waitForQueryToFinish(target, lensSessionHandle, handle, mt);
     assertEquals(lensQuery.getStatus().getStatus(), status);
     return lensQuery;
   }
 
   public static LensQuery getLensQuery(final WebTarget target, final LensSessionHandle lensSessionHandle,
-    final QueryHandle handle) {
-    return target.path("queryapi/queries").path(handle.toString()).queryParam("sessionid", lensSessionHandle).request()
-      .get(LensQuery.class);
+    final QueryHandle handle, MediaType mt) {
+    return target.path("queryapi/queries").path(handle.toString()).queryParam("sessionid", lensSessionHandle)
+      .request(mt).get(LensQuery.class);
   }
 
-  public static QueryResult getLensQueryResult(final WebTarget target, final LensSessionHandle lensSessionHandle,
-    final QueryHandle handle) {
+  public static String getLensQueryResultAsString(final WebTarget target, final LensSessionHandle lensSessionHandle,
+    final QueryHandle handle, MediaType mt) {
+    return target.path("queryapi/queries").path(handle.toString()).path("resultset")
+      .queryParam("sessionid", lensSessionHandle).request(mt).get(String.class);
+  }
+
+  public static PersistentQueryResult getLensQueryResult(final WebTarget target,
+    final LensSessionHandle lensSessionHandle, final QueryHandle handle, MediaType mt) {
     return target.path("queryapi/queries").path(handle.toString()).path("resultset")
-      .queryParam("sessionid", lensSessionHandle).request().get(QueryResult.class);
+      .queryParam("sessionid", lensSessionHandle).request(mt).get(PersistentQueryResult.class);
   }
 
   public static Response getLensQueryHttpResult(final WebTarget target, final LensSessionHandle lensSessionHandle,

http://git-wip-us.apache.org/repos/asf/lens/blob/d559ef2e/lens-server/src/test/java/org/apache/lens/server/healthcheck/TestHealthChecks.java
----------------------------------------------------------------------
diff --git a/lens-server/src/test/java/org/apache/lens/server/healthcheck/TestHealthChecks.java b/lens-server/src/test/java/org/apache/lens/server/healthcheck/TestHealthChecks.java
index 8e22c7a..56c67fb 100644
--- a/lens-server/src/test/java/org/apache/lens/server/healthcheck/TestHealthChecks.java
+++ b/lens-server/src/test/java/org/apache/lens/server/healthcheck/TestHealthChecks.java
@@ -20,24 +20,18 @@ package org.apache.lens.server.healthcheck;
 
 import static org.testng.Assert.*;
 
-import javax.ws.rs.core.Application;
-
 import org.apache.lens.server.EventServiceImpl;
-import org.apache.lens.server.LensJerseyTest;
+import org.apache.lens.server.LensAllApplicationJerseyTest;
 import org.apache.lens.server.LensServices;
 import org.apache.lens.server.api.LensService;
 import org.apache.lens.server.api.health.HealthStatus;
 import org.apache.lens.server.api.query.QueryExecutionService;
 import org.apache.lens.server.metastore.CubeMetastoreServiceImpl;
-import org.apache.lens.server.metastore.MetastoreApp;
 import org.apache.lens.server.metrics.MetricsServiceImpl;
 import org.apache.lens.server.quota.QuotaServiceImpl;
 import org.apache.lens.server.scheduler.SchedulerServiceImpl;
 import org.apache.lens.server.session.HiveSessionService;
 
-import org.glassfish.jersey.client.ClientConfig;
-import org.glassfish.jersey.media.multipart.MultiPartFeature;
-
 import org.testng.annotations.AfterTest;
 import org.testng.annotations.BeforeTest;
 import org.testng.annotations.Test;
@@ -45,7 +39,7 @@ import org.testng.annotations.Test;
 import com.codahale.metrics.health.HealthCheck;
 
 @Test(groups = "unit-test")
-public class TestHealthChecks extends LensJerseyTest {
+public class TestHealthChecks extends LensAllApplicationJerseyTest {
   @BeforeTest
   public void setUp() throws Exception {
     super.setUp();
@@ -56,16 +50,6 @@ public class TestHealthChecks extends LensJerseyTest {
     super.tearDown();
   }
 
-  @Override
-  protected Application configure() {
-    return new MetastoreApp();
-  }
-
-  @Override
-  protected void configureClient(ClientConfig config) {
-    config.register(MultiPartFeature.class);
-  }
-
   @Test
   public void testCubeMetastoreServiceHealth() throws Exception {
     checkHealth(CubeMetastoreServiceImpl.NAME);