You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2015/12/30 15:24:52 UTC
[3/3] ignite git commit: ignite-961
ignite-961
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/012485b4
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/012485b4
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/012485b4
Branch: refs/heads/ignite-961
Commit: 012485b4619af67fd28f8b97324c7d651584161f
Parents: 54908b3
Author: sboikov <sb...@gridgain.com>
Authored: Wed Dec 30 13:28:25 2015 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Wed Dec 30 17:24:40 2015 +0300
----------------------------------------------------------------------
.../client/ClientDefaultCacheSelfTest.java | 51 ++----
.../JettyRestProcessorAbstractSelfTest.java | 47 +++++-
.../IgniteCacheObjectProcessorImpl.java | 2 +-
.../scripting/IgniteScriptingProcessor.java | 6 +-
.../ignite/internal/NodeJsAbstractTest.java | 8 +-
modules/nodejs/src/test/js/test-ignite.js | 2 +-
modules/nodejs/src/test/js/test-runner.js | 2 +-
.../http/jetty/GridJettyRestHandler.java | 32 ++--
.../jetty/RestGlassFishScriptingConverter.java | 155 -------------------
.../http/jetty/ScriptingConverter.java | 135 ++++++++++++++++
10 files changed, 226 insertions(+), 214 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/012485b4/modules/clients/src/test/java/org/apache/ignite/internal/client/ClientDefaultCacheSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/apache/ignite/internal/client/ClientDefaultCacheSelfTest.java b/modules/clients/src/test/java/org/apache/ignite/internal/client/ClientDefaultCacheSelfTest.java
index f910b7d..7c3dd07 100644
--- a/modules/clients/src/test/java/org/apache/ignite/internal/client/ClientDefaultCacheSelfTest.java
+++ b/modules/clients/src/test/java/org/apache/ignite/internal/client/ClientDefaultCacheSelfTest.java
@@ -23,9 +23,6 @@ import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.UUID;
import org.apache.ignite.cache.CacheAtomicityMode;
import org.apache.ignite.cache.CacheMode;
import org.apache.ignite.configuration.CacheConfiguration;
@@ -42,7 +39,7 @@ import static org.apache.ignite.IgniteSystemProperties.IGNITE_JETTY_PORT;
* Tests that client is able to connect to a grid with only default cache enabled.
*/
public class ClientDefaultCacheSelfTest extends GridCommonAbstractTest {
- /** Path to jetty config configured with SSL. */
+ /** Path to jetty config. */
private static final String REST_JETTY_CFG = "modules/clients/src/test/resources/jetty/rest-jetty.xml";
/** IP finder. */
@@ -51,9 +48,6 @@ public class ClientDefaultCacheSelfTest extends GridCommonAbstractTest {
/** Host. */
private static final String HOST = "127.0.0.1";
- /** Cached local node id. */
- private UUID locNodeId;
-
/** Http port. */
private static final int HTTP_PORT = 8081;
@@ -81,11 +75,6 @@ public class ClientDefaultCacheSelfTest extends GridCommonAbstractTest {
}
/** {@inheritDoc} */
- @Override protected void beforeTest() throws Exception {
- locNodeId = grid().localNode().id();
- }
-
- /** {@inheritDoc} */
@Override protected IgniteConfiguration getConfiguration(String gridName) throws Exception {
IgniteConfiguration cfg = super.getConfiguration(gridName);
@@ -103,57 +92,41 @@ public class ClientDefaultCacheSelfTest extends GridCommonAbstractTest {
cfg.setDiscoverySpi(disco);
- CacheConfiguration cLocal = new CacheConfiguration();
+ CacheConfiguration cLoc = new CacheConfiguration();
- cLocal.setName(LOCAL_CACHE);
+ cLoc.setName(LOCAL_CACHE);
- cLocal.setCacheMode(CacheMode.LOCAL);
+ cLoc.setCacheMode(CacheMode.LOCAL);
- cLocal.setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL);
+ cLoc.setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL);
- cfg.setCacheConfiguration(defaultCacheConfiguration(), cLocal);
+ cfg.setCacheConfiguration(defaultCacheConfiguration(), cLoc);
return cfg;
}
/**
- * Builds list of connection strings with few different ports.
- * Used to avoid possible failures in case of port range active.
- *
- * @param startPort Port to start list from.
- * @return List of client connection strings.
- */
- private Collection<String> getServerList(int startPort) {
- Collection<String> srvs = new ArrayList<>();
-
- for (int i = startPort; i < startPort + 10; i++)
- srvs.add(HOST + ":" + i);
-
- return srvs;
- }
-
- /*
* Send HTTP request to Jetty server of node and process result.
*
- * @param query Send query parameters.
+ * @param qry Send query parameters.
* @return Processed response string.
*/
- private String sendHttp(String query) {
+ private String sendHttp(String qry) {
String res = "No result";
try {
- URLConnection connection = new URL(TEST_URL + "?" + query).openConnection();
+ URLConnection conn = new URL(TEST_URL + "?" + qry).openConnection();
- connection.setRequestProperty("Accept-Charset", CHARSET);
+ conn.setRequestProperty("Accept-Charset", CHARSET);
- BufferedReader r = new BufferedReader(new InputStreamReader(connection.getInputStream()));
+ BufferedReader r = new BufferedReader(new InputStreamReader(conn.getInputStream()));
res = r.readLine();
r.close();
}
catch (IOException e) {
- error("Failed to send HTTP request: " + TEST_URL + "?" + query, e);
+ error("Failed to send HTTP request: " + TEST_URL + "?" + qry, e);
}
// Cut node id from response.
http://git-wip-us.apache.org/repos/asf/ignite/blob/012485b4/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 6dbb296..7d70e91 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
@@ -35,6 +35,7 @@ import java.util.Map;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
import java.util.regex.Pattern;
+import javax.json.JsonObject;
import net.sf.json.JSONNull;
import net.sf.json.JSONObject;
import org.apache.ignite.Ignite;
@@ -1764,7 +1765,7 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro
assertTrue(queryCursorFound());
- U.sleep(10000);
+ U.sleep(10_000);
assertFalse(queryCursorFound());
}
@@ -1805,6 +1806,50 @@ public abstract class JettyRestProcessorAbstractSelfTest extends AbstractRestPro
/**
* @throws Exception If failed.
*/
+ public void testRunScriptCacheGet() throws Exception {
+ grid(0).cache(null).put("tk1", "tv1");
+
+ String f = "function(){return ignite.cache(null).get('tk1');}";
+
+ String ret = content(F.asMap("cmd", GridRestCommand.RUN_SCRIPT.key(), "func",
+ URLEncoder.encode(f, "UTF-8"), "arg", "hello"));
+
+ assertNotNull(ret);
+ assertTrue(!ret.isEmpty());
+
+ jsonEquals(ret, stringPattern("tv1", true));
+ }
+
+ /**
+ * @throws Exception If failed.
+ */
+ public void testRunScriptCachePut() throws Exception {
+ String f = "function(){" +
+ "ignite.cache(null).put('tk1', 'tv1');" +
+ "ignite.cache(null).put('tk2', {'a': '1', 'b': '2'});" +
+ "return 'ok';" +
+ "}";
+
+ String ret = content(F.asMap("cmd", GridRestCommand.RUN_SCRIPT.key(), "func",
+ URLEncoder.encode(f, "UTF-8"), "arg", "hello"));
+
+ assertNotNull(ret);
+ assertTrue(!ret.isEmpty());
+
+ jsonEquals(ret, stringPattern("ok", true));
+
+ assertEquals("tv1", ignite(0).cache(null).get("tk1"));
+
+ JsonObject val = (JsonObject)ignite(0).cache(null).get("tk2");
+
+ assertNotNull(val);
+ assertEquals("1", val.getString("a"));
+ assertEquals("2", val.getString("b"));
+ }
+
+ /**
+ * @throws Exception If failed.
+ */
public void testRunAffinityScriptPost() throws Exception {
ClusterNode node = grid(0).affinity(null).mapKeyToNode(new IgniteJsonString("key0"));
http://git-wip-us.apache.org/repos/asf/ignite/blob/012485b4/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/IgniteCacheObjectProcessorImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/IgniteCacheObjectProcessorImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/IgniteCacheObjectProcessorImpl.java
index 8df9c71..0642821 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/IgniteCacheObjectProcessorImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/IgniteCacheObjectProcessorImpl.java
@@ -184,7 +184,7 @@ public class IgniteCacheObjectProcessorImpl extends GridProcessorAdapter impleme
if (obj == null || obj instanceof CacheObject)
return (CacheObject)obj;
- CacheObject cacheObj = this.ctx.json().toCacheKeyObject(ctx, obj, userObj);
+ CacheObject cacheObj = this.ctx.json().toCacheObject(ctx, obj, userObj);
if (cacheObj != null)
return cacheObj;
http://git-wip-us.apache.org/repos/asf/ignite/blob/012485b4/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 597bfcb..44a5af7 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
@@ -39,13 +39,13 @@ public class IgniteScriptingProcessor extends GridProcessorAdapter {
/** Rest converter. */
private static final String REST_CONV_CLS =
- "org.apache.ignite.internal.processors.rest.protocols.http.jetty.RestGlassFishScriptingConverter";
+ "org.apache.ignite.internal.processors.rest.protocols.http.jetty.ScriptingConverter";
/** Javascript engine. */
private ScriptEngine jsEngine;
/** Ignite scripting converter. */
- IgniteScriptingConverter converter;
+ private IgniteScriptingConverter converter;
/**
* @param ctx Kernal context.
@@ -150,7 +150,7 @@ public class IgniteScriptingProcessor extends GridProcessorAdapter {
return invocable.invokeFunction("__internalCall", src, arg, arg2);
}
catch (ScriptException e) {
- throw new IgniteCheckedException("Function evaluation failed [funcName=" + src +
+ throw new IgniteCheckedException("Function evaluation failed [func=" + src +
", err= " + e.getMessage() + "].");
}
catch (NoSuchMethodException e) {
http://git-wip-us.apache.org/repos/asf/ignite/blob/012485b4/modules/nodejs/src/test/java/org/apache/ignite/internal/NodeJsAbstractTest.java
----------------------------------------------------------------------
diff --git a/modules/nodejs/src/test/java/org/apache/ignite/internal/NodeJsAbstractTest.java b/modules/nodejs/src/test/java/org/apache/ignite/internal/NodeJsAbstractTest.java
index cf038d5..43ef1d8 100644
--- a/modules/nodejs/src/test/java/org/apache/ignite/internal/NodeJsAbstractTest.java
+++ b/modules/nodejs/src/test/java/org/apache/ignite/internal/NodeJsAbstractTest.java
@@ -45,7 +45,7 @@ public class NodeJsAbstractTest extends GridCommonAbstractTest {
public static final String CACHE_NAME = "mycache";
/** Failed message. */
- public static final String SCRIPT_FAILED = "node js test failed:";
+ public static final String SCRIPT_FAILED = "node js test failed";
/** Ok message. */
public static final String SCRIPT_FINISHED = "node js test finished.";
@@ -95,7 +95,7 @@ public class NodeJsAbstractTest extends GridCommonAbstractTest {
* @return Cache configuration.
*/
protected CacheConfiguration cacheConfiguration() {
- CacheConfiguration ccfg = new CacheConfiguration();
+ CacheConfiguration<Object, Object> ccfg = new CacheConfiguration<>();
ccfg.setName(CACHE_NAME);
ccfg.setAtomicityMode(CacheAtomicityMode.ATOMIC);
@@ -182,9 +182,11 @@ public class NodeJsAbstractTest extends GridCommonAbstractTest {
assertTrue(readyLatch.await(60, SECONDS));
- proc.getProcess().waitFor();
+ int exitCode = proc.getProcess().waitFor();
assertEquals(errors.toString(), 0, errors.size());
+
+ assertEquals(0, exitCode);
}
finally {
if (proc != null)
http://git-wip-us.apache.org/repos/asf/ignite/blob/012485b4/modules/nodejs/src/test/js/test-ignite.js
----------------------------------------------------------------------
diff --git a/modules/nodejs/src/test/js/test-ignite.js b/modules/nodejs/src/test/js/test-ignite.js
index e7cb604..bd48460 100644
--- a/modules/nodejs/src/test/js/test-ignite.js
+++ b/modules/nodejs/src/test/js/test-ignite.js
@@ -77,7 +77,7 @@ testDestroyCache = function() {
cache0.put("1", "1").then(function() {
assert(false, "Do not get an error.");
}).catch(function(err){
- assert(err !== null, "Do nto get an error");
+ assert(err !== null, "Do not get an error");
assert(err.indexOf("Failed to find cache for given cache name") > -1, "Incorrect error message: " + err);
TestUtils.testDone();
http://git-wip-us.apache.org/repos/asf/ignite/blob/012485b4/modules/nodejs/src/test/js/test-runner.js
----------------------------------------------------------------------
diff --git a/modules/nodejs/src/test/js/test-runner.js b/modules/nodejs/src/test/js/test-runner.js
index 86ac082..46ac2ee 100644
--- a/modules/nodejs/src/test/js/test-runner.js
+++ b/modules/nodejs/src/test/js/test-runner.js
@@ -36,7 +36,7 @@ TestRunner.runTest = function() {
var functionName = process.argv[3].toString().trim();
if (!global[functionName]) {
- console.log("node js test failed: function with name " + functionName + " not found");
+ console.log("Node JS test failed: function with name " + functionName + " not found");
return;
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/012485b4/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 e0cbfd1..9b03a66 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
@@ -429,8 +429,7 @@ public class GridJettyRestHandler extends AbstractHandler {
*/
private void createResponse(HttpServletRequest req, GridRestCommand cmd,
GridRestResponse cmdRes) {
- if (cmdRes.getResponse() == null || !(req.getHeader("Content-Type") != null &&
- req.getHeader("Content-Type").contains("json")))
+ if (cmdRes.getResponse() == null || !jsonRequest(req))
return;
if (cmd == CACHE_GET_ALL) {
@@ -518,15 +517,15 @@ public class GridJettyRestHandler extends AbstractHandler {
String cacheName = (String)params.get("cacheName");
- if (req.getHeader("Content-Type") != null && req.getHeader("Content-Type").contains("json")) {
+ if (jsonRequest(req)) {
Object o = ctx.scripting().toJavaObject(parseRequest(req));
- Map<Object, Object> map = new HashMap<>();
-
switch (cmd) {
case CACHE_PUT_ALL: {
List entries = (List)ctx.scripting().getField("entries", o);
+ 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);
@@ -548,6 +547,8 @@ public class GridJettyRestHandler extends AbstractHandler {
List keys = (List)ctx.scripting().getField("keys", cacheObj);
+ Map<Object, Object> map = U.newHashMap(keys.size());
+
for (Object key : keys)
map.put(key, null);
@@ -577,6 +578,7 @@ public class GridJettyRestHandler extends AbstractHandler {
restReq0.key(ctx.scripting().getField("key", cacheObj));
restReq0.value(ctx.scripting().getField("val", cacheObj));
restReq0.value2(ctx.scripting().getField("oldVal", cacheObj));
+
break;
}
@@ -683,7 +685,7 @@ public class GridJettyRestHandler extends AbstractHandler {
restReq0.script((String)params.get("func"));
- if (req.getHeader("Content-Type") != null && req.getHeader("Content-Type").contains("json")) {
+ if (jsonRequest(req)) {
Map o = parseRequest(req);
restReq0.argument(ctx.scripting().toScriptObject(o.get("arg")));
}
@@ -701,7 +703,7 @@ public class GridJettyRestHandler extends AbstractHandler {
restReq0.script((String)params.get("func"));
restReq0.cacheName((String) params.get("cacheName"));
- if (req.getHeader("Content-Type") != null && req.getHeader("Content-Type").contains("json")) {
+ if (jsonRequest(req)) {
Map o = parseRequest(req);
restReq0.argument(ctx.scripting().toScriptObject(o.get("arg")));
@@ -723,7 +725,7 @@ public class GridJettyRestHandler extends AbstractHandler {
restReq0.mapFunction((String) params.get("map"));
- if (req.getHeader("Content-Type") != null && req.getHeader("Content-Type").contains("json")) {
+ if (jsonRequest(req)) {
Map o = parseRequest(req);
restReq0.argument(ctx.scripting().toScriptObject(o.get("arg")));
}
@@ -743,7 +745,7 @@ public class GridJettyRestHandler extends AbstractHandler {
restReq0.sqlQuery((String)params.get("qry"));
- if (req.getHeader("Content-Type") != null && req.getHeader("Content-Type").contains("json")) {
+ if (jsonRequest(req)) {
Map o = parseRequest(req);
List args = (List)ctx.scripting().toScriptObject(o.get("arg"));
restReq0.arguments(args.toArray());
@@ -875,13 +877,23 @@ public class GridJettyRestHandler extends AbstractHandler {
}
/**
+ * @param req Request.
+ * @return {@code True} if request contains json data.
+ */
+ private static boolean jsonRequest(HttpServletRequest req) {
+ String hdr = req.getHeader("Content-Type");
+
+ return hdr != null && hdr.contains("json");
+ }
+
+ /**
* Gets values referenced by sequential keys, e.g. {@code key1...keyN}.
*
* @param keyPrefix Key prefix, e.g. {@code key} for {@code key1...keyN}.
* @param params Parameters map.
* @return Values.
*/
- @Nullable protected List<Object> values(String keyPrefix, Map<String, Object> params) {
+ protected List<Object> values(String keyPrefix, Map<String, Object> params) {
assert keyPrefix != null;
List<Object> vals = new LinkedList<>();
http://git-wip-us.apache.org/repos/asf/ignite/blob/012485b4/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/RestGlassFishScriptingConverter.java
----------------------------------------------------------------------
diff --git a/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/RestGlassFishScriptingConverter.java b/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/RestGlassFishScriptingConverter.java
deleted file mode 100644
index deed06c..0000000
--- a/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/RestGlassFishScriptingConverter.java
+++ /dev/null
@@ -1,155 +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.ignite.internal.processors.rest.protocols.http.jetty;
-
-import net.sf.json.*;
-import org.apache.ignite.*;
-import org.apache.ignite.internal.*;
-import org.apache.ignite.internal.processors.cache.*;
-import org.apache.ignite.internal.processors.json.*;
-import org.apache.ignite.internal.processors.scripting.*;
-import org.apache.ignite.json.*;
-
-import javax.cache.*;
-import javax.json.*;
-import javax.json.spi.*;
-import java.math.*;
-import java.util.*;
-
-/**
- * Converter for glassfish objects.
- */
-public class RestGlassFishScriptingConverter extends IgniteScriptingConverter {
- /** Grid kernal context. */
- GridKernalContext ctx;
-
- /**
- * @param ctx Grid context.
- */
- public RestGlassFishScriptingConverter(GridKernalContext ctx) {
- this.ctx = ctx;
- }
-
- /** {@inheritDoc} */
- @Override public JsonValue toJavaObject(Object o) {
- if (o == null)
- return null;
-
- if (o instanceof Map) {
- Map o1 = (Map)o;
-
- JsonProvider provider = IgniteJson.jsonProvider(ctx.grid());
-
- JsonObjectBuilder bld = provider.createObjectBuilder();
-
- for (Object key : o1.keySet()) {
- assert (key instanceof String) || (key instanceof JSONString);
-
- if (key instanceof JSONString)
- bld.add(((JsonString) key).getString(), toJavaObject(o1.get(key)));
- else
- bld.add((String)key, toJavaObject(o1.get(key)));
- }
-
- return bld.build();
- }
- else if (o instanceof List) {
- List o1 = (List) o;
-
- JsonProvider provider = IgniteJson.jsonProvider(ctx.grid());
-
- JsonArrayBuilder bld = provider.createArrayBuilder();
-
- for (Object v : o1)
- bld.add(toJavaObject(v));
-
- return bld.build();
- }
- else if (o instanceof JsonString)
- return new IgniteJsonString(((JsonString) o).getString());
- else if (o instanceof JsonNumber)
- return new IgniteJsonNumber(((JsonNumber) o).bigDecimalValue());
- else if (o.equals(JsonValue.FALSE))
- return JsonValue.FALSE;
- else if (o.equals(JsonValue.TRUE))
- return JsonValue.TRUE;
- else if (o.equals(JsonValue.NULL))
- return JsonValue.NULL;
- else if (o instanceof String)
- return new IgniteJsonString((String)o);
- else if (o instanceof Integer)
- return new IgniteJsonNumber(new BigDecimal((Integer)o));
- else if (o instanceof Long)
- return new IgniteJsonNumber(new BigDecimal((Long)o));
- else if (o instanceof Double)
- return new IgniteJsonNumber(new BigDecimal((Double)o));
-
- throw new IgniteException("Do not support type: " + o.getClass());
- }
-
- /** {@inheritDoc} */
- @Override public Object toScriptObject(Object o) {
- if (o == null)
- return null;
-
- if (o instanceof Map) {
- Map o1 = (Map)o;
-
- Map<Object, Object> res = new HashMap<>();
-
- for (Object key : o1.keySet())
- res.put(toScriptObject(key), toScriptObject(o1.get(key)));
-
- return res;
- }
- else if (o instanceof List) {
- List o1 = (List) o;
-
- List<Object> res = new ArrayList<>();
-
- for (Object v : o1)
- res.add(toScriptObject(v));
-
- return res;
- }
- else if (o instanceof Cache.Entry)
- return new CacheEntryImpl<>(toScriptObject(((Cache.Entry) o).getKey()),
- toScriptObject(((Cache.Entry) o).getValue()));
- else if (o instanceof JsonString)
- return ((JsonString) o).getString();
- else if (o instanceof JsonNumber)
- return ((JsonNumber) o).intValue();
- else if (o.equals(JsonValue.FALSE))
- return false;
- else if (o.equals(JsonValue.TRUE))
- return true;
- else if (o.equals(JsonValue.NULL))
- return null;
-
- return o;
- }
-
-
- /** {@inheritDoc} */
- @Override public Object getField(String key, Object o) {
- if (o instanceof JsonObject)
- return ((JsonObject)o).get(key);
-
- return null;
- }
-}
http://git-wip-us.apache.org/repos/asf/ignite/blob/012485b4/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
new file mode 100644
index 0000000..8b18d18
--- /dev/null
+++ b/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/ScriptingConverter.java
@@ -0,0 +1,135 @@
+/*
+ * 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.ignite.internal.processors.rest.protocols.http.jetty;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.cache.Cache;
+import javax.json.JsonNumber;
+import javax.json.JsonObject;
+import javax.json.JsonObjectBuilder;
+import javax.json.JsonString;
+import javax.json.JsonValue;
+import javax.json.spi.JsonProvider;
+import org.apache.ignite.internal.GridKernalContext;
+import org.apache.ignite.internal.processors.cache.CacheEntryImpl;
+import org.apache.ignite.internal.processors.scripting.IgniteScriptingConverter;
+import org.apache.ignite.json.IgniteJson;
+
+/**
+ * Converter for glassfish objects.
+ */
+public class ScriptingConverter extends IgniteScriptingConverter {
+ /** Json provider */
+ private final JsonProvider provider;
+
+ /** */
+ private Class<?> scriptObjCls;
+
+ /**
+ * @param ctx Grid context.
+ */
+ public ScriptingConverter(GridKernalContext ctx) {
+ provider = IgniteJson.jsonProvider(ctx.grid());
+
+ try {
+ scriptObjCls = Class.forName("sun.org.mozilla.javascript.internal.NativeObject");
+ }
+ catch(ClassNotFoundException e) {
+ // Ignore.
+ }
+ }
+
+ /** {@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();
+
+ 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();
+
+ bld.add(name, val.toString());
+ }
+
+ return bld.build();
+ }
+
+ return o;
+ }
+
+ /** {@inheritDoc} */
+ @Override public Object toScriptObject(Object o) {
+ if (o == null)
+ return null;
+
+ if (o instanceof Map) {
+ Map o1 = (Map)o;
+
+ Map<Object, Object> res = new HashMap<>();
+
+ for (Object key : o1.keySet())
+ res.put(toScriptObject(key), toScriptObject(o1.get(key)));
+
+ return res;
+ }
+ else if (o instanceof List) {
+ List o1 = (List) o;
+
+ List<Object> res = new ArrayList<>();
+
+ for (Object v : o1)
+ res.add(toScriptObject(v));
+
+ return res;
+ }
+ else if (o instanceof Cache.Entry)
+ return new CacheEntryImpl<>(toScriptObject(((Cache.Entry) o).getKey()),
+ toScriptObject(((Cache.Entry) o).getValue()));
+ else if (o instanceof JsonString)
+ return ((JsonString) o).getString();
+ else if (o instanceof JsonNumber)
+ return ((JsonNumber) o).intValue();
+ else if (o.equals(JsonValue.FALSE))
+ return false;
+ else if (o.equals(JsonValue.TRUE))
+ return true;
+ else if (o.equals(JsonValue.NULL))
+ return null;
+
+ return o;
+ }
+
+
+ /** {@inheritDoc} */
+ @Override public Object getField(String key, Object o) {
+ if (o instanceof JsonObject)
+ return ((JsonObject)o).get(key);
+
+ return null;
+ }
+}