ignite-961

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

Branch: refs/heads/ignite-961
Commit: c2a18232427a80a9efecc1184aeab80d58a0b1d4
Parents: 3cdf064
Author: sboikov <[email protected]>
Authored: Mon Jan 11 09:22:24 2016 +0300
Committer: sboikov <[email protected]>
Committed: Mon Jan 11 13:05:50 2016 +0300

----------------------------------------------------------------------
 .../JettyRestProcessorAbstractSelfTest.java     |  89 +++++++++++---
 .../scripting/IgniteScriptingProcessor.java     |   1 +
 .../processors/scripting/ScriptingJsCache.java  |   3 +-
 modules/json/pom.xml                            |   9 +-
 modules/nodejs/pom.xml                          |   2 +-
 .../ignite/internal/NodeJsComputeSelfTest.java  |   5 +-
 modules/nodejs/src/test/js/test-compute.js      |  37 ++++--
 modules/rest-http/pom.xml                       |   6 -
 .../http/jetty/GridJettyRestHandler.java        | 117 +++++++++++++------
 .../http/jetty/ScriptingConverter.java          |  64 +++++++---
 10 files changed, 241 insertions(+), 92 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/c2a18232/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java
----------------------------------------------------------------------
diff --git 
a/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java
 
b/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java
index 7d70e91..0272370 100644
--- 
a/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java
+++ 
b/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java
@@ -36,6 +36,8 @@ import java.util.UUID;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.regex.Pattern;
 import javax.json.JsonObject;
+import javax.json.JsonObjectBuilder;
+import javax.json.spi.JsonProvider;
 import net.sf.json.JSONNull;
 import net.sf.json.JSONObject;
 import org.apache.ignite.Ignite;
@@ -49,11 +51,11 @@ import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.internal.processors.cache.IgniteCacheProxy;
 import 
org.apache.ignite.internal.processors.cache.query.GridCacheSqlIndexMetadata;
 import org.apache.ignite.internal.processors.cache.query.GridCacheSqlMetadata;
-import org.apache.ignite.internal.processors.json.IgniteJsonString;
 import 
org.apache.ignite.internal.processors.rest.handlers.GridRestCommandHandler;
 import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.internal.util.typedef.P1;
+import org.apache.ignite.json.IgniteJson;
 import org.apache.ignite.lang.IgniteBiPredicate;
 import org.apache.ignite.lang.IgnitePredicate;
 import org.apache.ignite.testframework.GridTestUtils;
@@ -413,7 +415,7 @@ public abstract class JettyRestProcessorAbstractSelfTest 
extends AbstractRestPro
      * @throws Exception If failed.
      */
     public void testGetPost() throws Exception {
-        jcache().put(new IgniteJsonString("key0"), new 
IgniteJsonString("val0"));
+        jcache().put("key0", "val0");
 
         String val = "{\"key\":\"key0\"}";
         String ret = makePostRequest(F.asMap("cmd", 
GridRestCommand.CACHE_GET.key()), val);
@@ -430,7 +432,7 @@ public abstract class JettyRestProcessorAbstractSelfTest 
extends AbstractRestPro
      * @throws Exception If failed.
      */
     public void testReplacePost() throws Exception {
-        jcache().put(new IgniteJsonString("key0"), new 
IgniteJsonString("val0"));
+        jcache().put("key0", "val0");
 
         String val = "{\"key\":\"key0\", \"val\":\"val2\", 
\"oldVal\":\"val1\"}";
         String ret = makePostRequest(F.asMap("cmd", 
GridRestCommand.CACHE_REPLACE_VALUE.key()), val);
@@ -448,7 +450,7 @@ public abstract class JettyRestProcessorAbstractSelfTest 
extends AbstractRestPro
 
         jsonEquals(ret, cachePattern("val0", true));
 
-        assertEquals(new IgniteJsonString("val2"), grid(0).cache(null).get(new 
IgniteJsonString("key0")));
+        assertEquals("val2", grid(0).cache(null).get("key0"));
 
         val = "{\"key\":\"key0\", \"val\":\"val3\"}";
         ret = makePostRequest(F.asMap("cmd", 
GridRestCommand.CACHE_REPLACE.key()), val);
@@ -458,14 +460,14 @@ public abstract class JettyRestProcessorAbstractSelfTest 
extends AbstractRestPro
 
         info("Get command result: " + ret);
 
-        assertEquals(new IgniteJsonString("val3"), grid(0).cache(null).get(new 
IgniteJsonString("key0")));
+        assertEquals("val3", grid(0).cache(null).get("key0"));
     }
 
     /**
      * @throws Exception If failed.
      */
     public void testRemovePost() throws Exception {
-        jcache().put(new IgniteJsonString("key0"), new 
IgniteJsonString("val0"));
+        jcache().put("key0", "val0");
 
         String val = "{\"key\":\"key0\", \"val\":\"val2\"}";
         String ret = makePostRequest(F.asMap("cmd", 
GridRestCommand.CACHE_REMOVE_VALUE.key()), val);
@@ -477,22 +479,22 @@ public abstract class JettyRestProcessorAbstractSelfTest 
extends AbstractRestPro
 
         jsonEquals(ret, cachePattern(false, true));
 
-        assertEquals(new IgniteJsonString("val0"), grid(0).cache(null).get(new 
IgniteJsonString("key0")));
+        assertEquals("val0", grid(0).cache(null).get("key0"));
 
         val = "{\"key\":\"key0\"}";
         ret = makePostRequest(F.asMap("cmd", 
GridRestCommand.CACHE_GET_AND_REMOVE.key()), val);
 
         jsonEquals(ret, cachePattern("val0", true));
 
-        assertNull(grid(0).cache(null).get(new IgniteJsonString("key0")));
+        assertNull(grid(0).cache(null).get("key0"));
     }
 
     /**
      * @throws Exception If failed.
      */
     public void testRemoveAllPost() throws Exception {
-        jcache().put(new IgniteJsonString("key0"), new 
IgniteJsonString("val0"));
-        jcache().put(new IgniteJsonString("key1"), new 
IgniteJsonString("val1"));
+        jcache().put("key0", "val0");
+        jcache().put("key1", "val1");
 
         String val = "{\"keys\": [\"key0\", \"key1\"]}";
         String ret = makePostRequest(F.asMap("cmd", 
GridRestCommand.CACHE_REMOVE_ALL.key()), val);
@@ -516,7 +518,7 @@ public abstract class JettyRestProcessorAbstractSelfTest 
extends AbstractRestPro
         info("Result: " + ret);
 
         assertEquals(1, grid(0).cache(null).size());
-        assertNotNull(grid(0).cache(null).get(new IgniteJsonString("key0")));
+        assertNotNull(grid(0).cache(null).get("key0"));
 
         val = "{\"key\":\"key0\"}";
         ret = makePostRequest(F.asMap("cmd", 
GridRestCommand.CACHE_CONTAINS_KEY.key()), val);
@@ -530,6 +532,54 @@ public abstract class JettyRestProcessorAbstractSelfTest 
extends AbstractRestPro
     /**
      * @throws Exception If failed.
      */
+    public void testPutJsonKey() throws Exception {
+        String val = "{\"key\":{\"id\": \"1\"},\"val\":\"val0\"}";
+        String ret = makePostRequest(F.asMap("cmd", 
GridRestCommand.CACHE_PUT.key()), val);
+
+        assertNotNull(ret);
+        assertTrue(!ret.isEmpty());
+
+        info("Result: " + ret);
+
+        JsonProvider provider = IgniteJson.jsonProvider(ignite(0));
+
+        JsonObjectBuilder builder = provider.createObjectBuilder();
+
+        builder.add("id", "1");
+
+        JsonObject key = builder.build();
+
+        assertEquals("val0", grid(0).cache(null).get(key));
+
+        val = "{\"key\":{\"id\": \"1\"}}";
+        ret = makePostRequest(F.asMap("cmd", 
GridRestCommand.CACHE_CONTAINS_KEY.key()), val);
+
+        assertNotNull(ret);
+        assertTrue(!ret.isEmpty());
+
+        jsonEquals(ret, cachePattern(true, true));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testPutJsonValue() throws Exception {
+        String cmd = "{\"key\":\"key0\",\"val\":{\"id\": \"1\"}}";
+        String ret = makePostRequest(F.asMap("cmd", 
GridRestCommand.CACHE_PUT.key()), cmd);
+
+        assertNotNull(ret);
+        assertTrue(!ret.isEmpty());
+
+        info("Result: " + ret);
+
+        JsonObject val = (JsonObject)grid(0).cache(null).get("key0");
+
+        assertEquals("1", val.getString("id"));
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
     public void testIncorrectPutPost() throws Exception {
         String val = "{\"key\":\"key0\"}";
         String ret = makePostRequest(F.asMap("cmd", 
GridRestCommand.CACHE_PUT.key()), val);
@@ -551,7 +601,7 @@ public abstract class JettyRestProcessorAbstractSelfTest 
extends AbstractRestPro
 
         jsonEquals(ret, cacheNullPattern(true));
 
-        assertNotNull(grid(0).cache(null).get(new IgniteJsonString("key0")));
+        assertNotNull(grid(0).cache(null).get("key0"));
 
         val = "{\"key\": \"key0\", \"val\":\"val1\"}";
         ret = makePostRequest(F.asMap("cmd", 
GridRestCommand.CACHE_GET_AND_PUT_IF_ABSENT.key()), val);
@@ -561,7 +611,7 @@ public abstract class JettyRestProcessorAbstractSelfTest 
extends AbstractRestPro
 
         jsonEquals(ret, cachePattern("val0", true));
 
-        assertEquals(new IgniteJsonString("val0"), grid(0).cache(null).get(new 
IgniteJsonString("key0")));
+        assertEquals("val0", grid(0).cache(null).get("key0"));
 
         val = "{\"key\": \"key0\"}";
         ret = makePostRequest(F.asMap("cmd", 
GridRestCommand.CACHE_REMOVE.key()), val);
@@ -569,7 +619,7 @@ public abstract class JettyRestProcessorAbstractSelfTest 
extends AbstractRestPro
         assertNotNull(ret);
         assertTrue(!ret.isEmpty());
 
-        assertNull(grid(0).cache(null).get(new IgniteJsonString("key0")));
+        assertNull(grid(0).cache(null).get("key0"));
 
         val = "{\"key\": \"key0\", \"val\":\"val1\"}";
         ret = makePostRequest(F.asMap("cmd", 
GridRestCommand.CACHE_PUT_IF_ABSENT.key()), val);
@@ -579,7 +629,7 @@ public abstract class JettyRestProcessorAbstractSelfTest 
extends AbstractRestPro
 
         jsonEquals(ret, cachePattern(true, true));
 
-        assertEquals(new IgniteJsonString("val1"), grid(0).cache(null).get(new 
IgniteJsonString("key0")));
+        assertEquals("val1", grid(0).cache(null).get("key0"));
     }
 
     /**
@@ -592,7 +642,7 @@ public abstract class JettyRestProcessorAbstractSelfTest 
extends AbstractRestPro
         assertNotNull(ret);
         assertTrue(!ret.isEmpty());
 
-        assertNotNull(grid(0).cache(null).get(new IgniteJsonString("key0")));
+        assertNotNull(grid(0).cache(null).get("key0"));
 
         val = "{\"keys\": [\"key0\",\"key1\"]}";
         ret = makePostRequest(F.asMap("cmd", 
GridRestCommand.CACHE_CONTAINS_KEYS.key()), val);
@@ -1781,7 +1831,10 @@ public abstract class JettyRestProcessorAbstractSelfTest 
extends AbstractRestPro
      */
     public void testRunScriptPost() throws Exception {
         String f = "function(param){return param;}";
-        String ret = makePostRequest(F.asMap("cmd", 
GridRestCommand.RUN_SCRIPT.key(), "func", URLEncoder.encode(f)), 
"{\"arg\":\"hello\"}");
+
+        String ret = makePostRequest(F.asMap("cmd", 
GridRestCommand.RUN_SCRIPT.key(),
+            "func", URLEncoder.encode(f)),
+            "{\"arg\":\"hello\"}");
 
         assertNotNull(ret);
         assertTrue(!ret.isEmpty());
@@ -1851,7 +1904,7 @@ public abstract class JettyRestProcessorAbstractSelfTest 
extends AbstractRestPro
      * @throws Exception If failed.
      */
     public void testRunAffinityScriptPost() throws Exception {
-        ClusterNode node = grid(0).affinity(null).mapKeyToNode(new 
IgniteJsonString("key0"));
+        ClusterNode node = grid(0).affinity(null).mapKeyToNode("key0");
 
         Ignite ignite = null;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/c2a18232/modules/core/src/main/java/org/apache/ignite/internal/processors/scripting/IgniteScriptingProcessor.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/scripting/IgniteScriptingProcessor.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/scripting/IgniteScriptingProcessor.java
index 44a5af7..47f5681 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/scripting/IgniteScriptingProcessor.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/scripting/IgniteScriptingProcessor.java
@@ -140,6 +140,7 @@ public class IgniteScriptingProcessor extends 
GridProcessorAdapter {
     /**
      * @param src Script src.
      * @param arg Argument.
+     * @param arg2 Second argument.
      * @return Result of the function.
      * @throws IgniteCheckedException If script failed.
      */

http://git-wip-us.apache.org/repos/asf/ignite/blob/c2a18232/modules/core/src/main/java/org/apache/ignite/internal/processors/scripting/ScriptingJsCache.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/scripting/ScriptingJsCache.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/scripting/ScriptingJsCache.java
index be5a7f0..883b2f7 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/scripting/ScriptingJsCache.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/scripting/ScriptingJsCache.java
@@ -18,6 +18,7 @@
 package org.apache.ignite.internal.processors.scripting;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
@@ -115,7 +116,7 @@ public class ScriptingJsCache {
      * @param entries Entries.
      */
     public void putAll(List entries) {
-        List cacheKeys = (List)proc.toJavaObject(entries);
+        Collection cacheKeys = (Collection)proc.toJavaObject(entries);
 
         Map<Object, Object> cacheEntries = U.newHashMap(entries.size());
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/c2a18232/modules/json/pom.xml
----------------------------------------------------------------------
diff --git a/modules/json/pom.xml b/modules/json/pom.xml
index 33788d0..77f890c 100644
--- a/modules/json/pom.xml
+++ b/modules/json/pom.xml
@@ -31,7 +31,7 @@
     </parent>
 
     <artifactId>ignite-json</artifactId>
-    <version>1.5.0.final-SNAPSHOT</version>
+    <version>1.5.1.final-SNAPSHOT</version>
     <url>http://ignite.apache.org</url>
 
     <dependencies>
@@ -66,13 +66,6 @@
         </dependency>
 
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>4.11</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
             <groupId>org.apache.ignite</groupId>
             <artifactId>ignite-core</artifactId>
             <version>${project.version}</version>

http://git-wip-us.apache.org/repos/asf/ignite/blob/c2a18232/modules/nodejs/pom.xml
----------------------------------------------------------------------
diff --git a/modules/nodejs/pom.xml b/modules/nodejs/pom.xml
index abfa333..02ef15b 100644
--- a/modules/nodejs/pom.xml
+++ b/modules/nodejs/pom.xml
@@ -31,7 +31,7 @@
     </parent>
 
     <artifactId>ignite-nodejs</artifactId>
-    <version>1.5.0.final-SNAPSHOT</version>
+    <version>1.5.1.final-SNAPSHOT</version>
 
     <dependencies>
         <dependency>

http://git-wip-us.apache.org/repos/asf/ignite/blob/c2a18232/modules/nodejs/src/test/java/org/apache/ignite/internal/NodeJsComputeSelfTest.java
----------------------------------------------------------------------
diff --git 
a/modules/nodejs/src/test/java/org/apache/ignite/internal/NodeJsComputeSelfTest.java
 
b/modules/nodejs/src/test/java/org/apache/ignite/internal/NodeJsComputeSelfTest.java
index 70f4050..006af78 100644
--- 
a/modules/nodejs/src/test/java/org/apache/ignite/internal/NodeJsComputeSelfTest.java
+++ 
b/modules/nodejs/src/test/java/org/apache/ignite/internal/NodeJsComputeSelfTest.java
@@ -20,11 +20,12 @@ package org.apache.ignite.internal;
 import java.util.ArrayList;
 import java.util.concurrent.Callable;
 import java.util.concurrent.atomic.AtomicInteger;
-import org.apache.ignite.cache.CacheAtomicityMode;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.testframework.GridTestUtils;
 
+import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
+
 /**
  * Test compute node js.
  */
@@ -56,7 +57,7 @@ public class NodeJsComputeSelfTest extends NodeJsAbstractTest 
{
         CacheConfiguration ccfg = new CacheConfiguration();
 
         ccfg.setName(CACHE_NAME);
-        ccfg.setAtomicityMode(CacheAtomicityMode.ATOMIC);
+        ccfg.setAtomicityMode(ATOMIC);
 
         return ccfg;
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/c2a18232/modules/nodejs/src/test/js/test-compute.js
----------------------------------------------------------------------
diff --git a/modules/nodejs/src/test/js/test-compute.js 
b/modules/nodejs/src/test/js/test-compute.js
index 20acd0a..d6381d7 100644
--- a/modules/nodejs/src/test/js/test-compute.js
+++ b/modules/nodejs/src/test/js/test-compute.js
@@ -188,6 +188,9 @@ testComputeCacheExecute = function() {
 
                         var val1 = ignite.cache("mycache").get(args1.get(0));
 
+                        if (!val1)
+                            throw "Unexpected null value [key=" + args1.get(0) 
+ "]";
+
                         if (val1["age"] !== 12) {
                             throw "Incorrect age [expected=12, val=" + val + 
"]";
                         }
@@ -221,12 +224,12 @@ testComputeCacheExecute = function() {
 
             return ignite.compute().mapReduce(map, reduce, [key1, val1]);
         }).then(function(res) {
-            assert(TestUtils.compareObject({"1": 1}, res),
-                "Incorrect result [exp= {1:1}, val=" + res);
+            assert(TestUtils.compareObject({"1": 1}, res), "Incorrect result 
[exp= {1:1}, val=" + res);
 
             return cache.size();
         }).then(function(size){
             assert(size === 3, "Incorrect size [size=" + 3 + ", res=" + size + 
"]");
+
             TestUtils.testDone();
         }).catch(function (err) {
             assert(err === null, err);
@@ -388,11 +391,11 @@ testComputeRunScriptRemoveOperations = function() {
         cache.put(key0, val0);
 
         if (cache.removeValue(key0, val1) === true) {
-            throw "Incorrect removeValue from empty map [key=" + 
JSON.stringify(key0) + "]";
+            throw "Incorrect removeValue result [key=" + JSON.stringify(key0) 
+ "]";
         }
 
         if (cache.remove(key0) === false) {
-            throw "Incorrect remove from empty map [key=" + 
JSON.stringify(key0) + "]";
+            throw "Incorrect remove result [key=" + JSON.stringify(key0) + "]";
         }
 
         cache.put(key0, val0);
@@ -403,7 +406,7 @@ testComputeRunScriptRemoveOperations = function() {
 
         var prevVal = cache.getAndReplace(key0, val1);
 
-        if (prevVal.valName !== val0.valName) {
+        if (prevVal.valName != val0.valName) {
             throw "Incorrect getAndReplace result [key=" + 
JSON.stringify(key0) +
              ", prevVal=" + prevVal.valName +
              ", expected=" + val0.valName + "]";
@@ -411,8 +414,10 @@ testComputeRunScriptRemoveOperations = function() {
 
         prevVal = cache.get(key0);
 
-        if (prevVal.valName !== val1.valName) {
-            throw "Incorrect getAndReplace result [key=" + 
JSON.stringify(key0) + "]";
+        if (prevVal.valName != val1.valName) {
+            throw "Incorrect value after getAndReplace [key=" + 
JSON.stringify(key0) +
+                ", val=" + prevVal.valName +
+                ", expected=" + val1.valName + "]";
         }
 
         cache.removeAllFromCache();
@@ -423,14 +428,28 @@ testComputeRunScriptRemoveOperations = function() {
 
         cache.putAll(entries);
 
+        prevVal = cache.get(key0);
+
+        if (!prevVal)
+            throw "No value after putAll [key=" + JSON.stringify(key0) + "]";
+
+        if (prevVal.valName != val0.valName) {
+            throw "Incorrect value after putAll [key=" +
+                JSON.stringify(key1) +
+                ", val=" + prevVal.valName +
+                ", expected=" + val0.valName + "]";
+        }
+
         if (cache.replace(key1, val0) !== true) {
             throw "Incorrect replace result";
         }
 
         prevVal = cache.get(key1);
 
-        if (prevVal.valName !== val0.valName) {
-            throw "Incorrect replace [key=" + JSON.stringify(key1) + "]";
+        if (prevVal.valName != val0.valName) {
+            throw "Incorrect value after replace [key=" + JSON.stringify(key1) 
+
+                ", val=" + prevVal.valName +
+                ", expected=" + val0.valName + "]";
         }
 
         cache.removeAll(keys);

http://git-wip-us.apache.org/repos/asf/ignite/blob/c2a18232/modules/rest-http/pom.xml
----------------------------------------------------------------------
diff --git a/modules/rest-http/pom.xml b/modules/rest-http/pom.xml
index 3d22c77..6c4c00b 100644
--- a/modules/rest-http/pom.xml
+++ b/modules/rest-http/pom.xml
@@ -43,12 +43,6 @@
 
     <dependencies>
         <dependency>
-            <groupId>org.glassfish</groupId>
-            <artifactId>javax.json</artifactId>
-            <version>1.0.4</version>
-        </dependency>
-
-        <dependency>
             <groupId>org.apache.ignite</groupId>
             <artifactId>ignite-core</artifactId>
             <version>${project.version}</version>

http://git-wip-us.apache.org/repos/asf/ignite/blob/c2a18232/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java
----------------------------------------------------------------------
diff --git 
a/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java
 
b/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java
index 9b03a66..a20f969 100644
--- 
a/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java
+++ 
b/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java
@@ -18,6 +18,7 @@
 package org.apache.ignite.internal.processors.rest.protocols.http.jetty;
 
 import java.io.BufferedInputStream;
+import java.io.BufferedReader;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
@@ -25,8 +26,8 @@ import java.io.InputStreamReader;
 import java.io.LineNumberReader;
 import java.net.InetSocketAddress;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Collections;
-import java.util.HashMap;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
@@ -38,6 +39,7 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import net.sf.json.JSON;
 import net.sf.json.JSONException;
+import net.sf.json.JSONObject;
 import net.sf.json.JSONSerializer;
 import net.sf.json.JsonConfig;
 import net.sf.json.processors.JsonValueProcessor;
@@ -63,7 +65,6 @@ import org.apache.ignite.lang.IgniteClosure;
 import org.apache.ignite.plugin.security.SecurityCredentials;
 import org.eclipse.jetty.server.Request;
 import org.eclipse.jetty.server.handler.AbstractHandler;
-import org.glassfish.json.JsonProviderImpl;
 import org.jetbrains.annotations.Nullable;
 
 import static 
org.apache.ignite.internal.processors.rest.GridRestCommand.CACHE_CONTAINS_KEYS;
@@ -433,22 +434,14 @@ public class GridJettyRestHandler extends AbstractHandler 
{
             return;
 
         if (cmd == CACHE_GET_ALL) {
-            Map o = (Map)cmdRes.getResponse();
+            Map<?, ?> o = (Map)cmdRes.getResponse();
 
-            List<Object> res = new ArrayList<>();
+            List<Object> res = new ArrayList<>(o.size());
 
-            for (Object k : o.keySet()) {
-                
res.add(ctx.scripting().createScriptingEntry(ctx.scripting().toScriptObject(k),
-                    ctx.scripting().toScriptObject(o.get(k))));
-            }
+            for (Map.Entry<?, ?> entry : o.entrySet())
+                res.add(new CacheEntry(entry.getKey(), entry.getValue()));
 
             cmdRes.setResponse(res);
-
-        }
-        else {
-            Object o = cmdRes.getResponse();
-
-            cmdRes.setResponse(ctx.scripting().toScriptObject(o));
         }
     }
 
@@ -518,17 +511,17 @@ public class GridJettyRestHandler extends AbstractHandler 
{
                 String cacheName = (String)params.get("cacheName");
 
                 if (jsonRequest(req)) {
-                    Object o = ctx.scripting().toJavaObject(parseRequest(req));
+                    Map<String, Object> reqMap = parseRequest(req);
 
                     switch (cmd) {
                         case CACHE_PUT_ALL: {
-                            List entries = 
(List)ctx.scripting().getField("entries", o);
+                            Collection entries = 
(Collection)reqMap.get("entries");
 
                             Map<Object, Object> map = 
U.newHashMap(entries.size());
 
                             for (Object entry : entries) {
-                                Object key = ctx.scripting().getField("key", 
entry);
-                                Object val = ctx.scripting().getField("value", 
entry);
+                                Object key = ((Map)entry).get("key");
+                                Object val = ((Map)entry).get("value");
 
                                 map.put(key, val);
                             }
@@ -543,9 +536,7 @@ public class GridJettyRestHandler extends AbstractHandler {
                         case CACHE_GET_ALL:
                         case CACHE_REMOVE_ALL:
                         case CACHE_CONTAINS_KEYS: {
-                            Object cacheObj = ctx.scripting().toJavaObject(o);
-
-                            List keys = (List)ctx.scripting().getField("keys", 
cacheObj);
+                            Collection keys = (Collection)reqMap.get("keys");
 
                             Map<Object, Object> map = 
U.newHashMap(keys.size());
 
@@ -571,13 +562,11 @@ public class GridJettyRestHandler extends AbstractHandler 
{
                         case CACHE_REPLACE:
                         case CACHE_GET_AND_REPLACE:
                         case CACHE_REPLACE_VALUE: {
-                            Object cacheObj = ctx.scripting().toJavaObject(o);
-
                             restReq0.cacheName(F.isEmpty(cacheName) ? null : 
cacheName);
 
-                            restReq0.key(ctx.scripting().getField("key", 
cacheObj));
-                            restReq0.value(ctx.scripting().getField("val", 
cacheObj));
-                            restReq0.value2(ctx.scripting().getField("oldVal", 
cacheObj));
+                            restReq0.key(reqMap.get("key"));
+                            restReq0.value(reqMap.get("val"));
+                            restReq0.value2(reqMap.get("oldVal"));
 
                             break;
                         }
@@ -687,7 +676,8 @@ public class GridJettyRestHandler extends AbstractHandler {
 
                 if (jsonRequest(req)) {
                     Map o = parseRequest(req);
-                    
restReq0.argument(ctx.scripting().toScriptObject(o.get("arg")));
+
+                    restReq0.argument(o.get("arg"));
                 }
                 else
                     restReq0.argument(params.get("arg"));
@@ -705,10 +695,9 @@ public class GridJettyRestHandler extends AbstractHandler {
 
                 if (jsonRequest(req)) {
                     Map o = parseRequest(req);
-                    
restReq0.argument(ctx.scripting().toScriptObject(o.get("arg")));
 
-                    Object cacheObj = 
ctx.scripting().toJavaObject(o.get("key"));
-                    restReq0.affinityKey(cacheObj);
+                    restReq0.argument(o.get("arg"));
+                    restReq0.affinityKey(o.get("key"));
                 }
                 else {
                     restReq0.argument(params.get("arg"));
@@ -727,7 +716,8 @@ public class GridJettyRestHandler extends AbstractHandler {
 
                 if (jsonRequest(req)) {
                     Map o = parseRequest(req);
-                    
restReq0.argument(ctx.scripting().toScriptObject(o.get("arg")));
+
+                    restReq0.argument(o.get("arg"));
                 }
                 else
                     restReq0.argument(params.get("arg"));
@@ -747,7 +737,9 @@ public class GridJettyRestHandler extends AbstractHandler {
 
                 if (jsonRequest(req)) {
                     Map o = parseRequest(req);
-                    List args = 
(List)ctx.scripting().toScriptObject(o.get("arg"));
+
+                    Collection args = (Collection)o.get("arg");
+
                     restReq0.arguments(args.toArray());
                 }
                 else
@@ -956,16 +948,75 @@ public class GridJettyRestHandler extends AbstractHandler 
{
     }
 
     /**
+     * TODO IGNITE-961: move to JsonProcessor.
+     *
      * @param req Request.
      * @return JSON object.
      * @throws IgniteCheckedException If failed.
      */
     private Map parseRequest(HttpServletRequest req) throws 
IgniteCheckedException {
         try {
-            return new 
JsonProviderImpl().createReader(req.getInputStream()).readObject();
+            BufferedReader reader = req.getReader();
+
+            StringBuilder str = new StringBuilder();
+
+            String line;
+
+            while ((line = reader.readLine()) != null)
+                str.append(line);
+
+            return JSONObject.fromObject(str.toString());
         }
         catch (IOException e) {
             throw new IgniteCheckedException(e);
         }
     }
+
+    /**
+     * Scripting cache entry.
+     */
+    public static class CacheEntry {
+        /** Key. */
+        private Object key;
+
+        /** Value. */
+        private Object val;
+
+        /**
+         * @param key Key.
+         * @param val Value.
+         */
+        public CacheEntry(Object key, Object val) {
+            this.key = key;
+            this.val = val;
+        }
+
+        /**
+         * @return Key.
+         */
+        public Object getKey() {
+            return key;
+        }
+
+        /**
+         * @param key Key.
+         */
+        public void setKey(Object key) {
+            this.key = key;
+        }
+
+        /**
+         * @return Value.
+         */
+        public Object getValue() {
+            return val;
+        }
+
+        /**
+         * @param val Value.
+         */
+        public void setValue(Object val) {
+            this.val = val;
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/c2a18232/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/ScriptingConverter.java
----------------------------------------------------------------------
diff --git 
a/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/ScriptingConverter.java
 
b/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/ScriptingConverter.java
index 8b18d18..68faac1 100644
--- 
a/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/ScriptingConverter.java
+++ 
b/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/ScriptingConverter.java
@@ -18,6 +18,7 @@
 package org.apache.ignite.internal.processors.rest.protocols.http.jetty;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -50,33 +51,68 @@ public class ScriptingConverter extends 
IgniteScriptingConverter {
         provider = IgniteJson.jsonProvider(ctx.grid());
 
         try {
-            scriptObjCls = 
Class.forName("sun.org.mozilla.javascript.internal.NativeObject");
+            scriptObjCls = 
Class.forName("jdk.nashorn.api.scripting.ScriptObjectMirror");
         }
-        catch(ClassNotFoundException e) {
-            // Ignore.
+        catch(ClassNotFoundException e1) {
+            try {
+                scriptObjCls = 
Class.forName("sun.org.mozilla.javascript.internal.NativeObject");
+            }
+            catch (ClassNotFoundException e2) {
+                // Ignore.
+            }
         }
     }
 
+    /**
+     * @param o Object.
+     * @return {@code True} if object is script engine wrapper.
+     */
+    private boolean scriptObject(Object o) {
+        return o.getClass() == scriptObjCls && (o instanceof Map);
+    }
+
+    /**
+     * @param o Object.
+     * @return Builder.
+     */
+    private JsonObjectBuilder toBuilder(Object o) {
+        assert scriptObject(o) : o;
+
+        JsonObjectBuilder bld = provider.createObjectBuilder();
+
+        Map<Object, Object> map = (Map<Object, Object>)o;
+
+        for (Map.Entry<Object, Object> e : map.entrySet()) {
+            String name = e.getKey().toString();
+
+            Object val = e.getValue();
+
+            if (scriptObject(val))
+                bld.add(name, toBuilder(val));
+            else
+                bld.add(name, val.toString());
+        }
+
+        return bld;
+    }
+
     /** {@inheritDoc} */
     @Override public Object toJavaObject(Object o) {
         if (o == null)
             return null;
 
         // TODO IGNITE-961.
-        if (o.getClass() == scriptObjCls && (o instanceof Map)) {
-            JsonObjectBuilder bld = provider.createObjectBuilder();
+        if (scriptObject(o))
+            return toBuilder(o).build();
+        else if (o instanceof Collection) {
+            Collection col = (Collection)o;
 
-            Map<Object, Object> map = (Map<Object, Object>)o;
+            List<Object> res = new ArrayList<>(col.size());
 
-            for (Map.Entry<Object, Object> e : map.entrySet()) {
-                String name = e.getKey().toString();
+            for (Object o1 : col)
+                res.add(toJavaObject(o1));
 
-                Object val = e.getValue();
-
-                bld.add(name, val.toString());
-            }
-
-            return bld.build();
+            return res;
         }
 
         return o;

Reply via email to