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;
