Repository: incubator-ignite Updated Branches: refs/heads/ignite-1223 e7f6cdb97 -> 1341e9ee9
IGNITE-1223 Fix for ignite-http-rest Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/1341e9ee Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/1341e9ee Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/1341e9ee Branch: refs/heads/ignite-1223 Commit: 1341e9ee982aff3413e0b98ade6a29726bb9860d Parents: e7f6cdb Author: sevdokimov <sergey.evdoki...@jetbrains.com> Authored: Tue Aug 11 23:46:22 2015 +0300 Committer: sevdokimov <sergey.evdoki...@jetbrains.com> Committed: Tue Aug 11 23:46:22 2015 +0300 ---------------------------------------------------------------------- modules/rest-http/pom.xml | 6 +- .../http/jetty/GridJettyJsonConfig.java | 50 --------------- .../http/jetty/GridJettyRestHandler.java | 49 +++------------ .../http/jetty/IgniteFieldNamingStrategy.java | 66 ++++++++++++++++++++ 4 files changed, 77 insertions(+), 94 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1341e9ee/modules/rest-http/pom.xml ---------------------------------------------------------------------- diff --git a/modules/rest-http/pom.xml b/modules/rest-http/pom.xml index 4ce41ae..5bac967 100644 --- a/modules/rest-http/pom.xml +++ b/modules/rest-http/pom.xml @@ -89,10 +89,8 @@ </dependency> <dependency> - <groupId>net.sf.json-lib</groupId> - <artifactId>json-lib</artifactId> - <version>2.4</version> - <classifier>jdk15</classifier> + <groupId>com.google.code.gson</groupId> + <artifactId>gson</artifactId> </dependency> <dependency> http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1341e9ee/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyJsonConfig.java ---------------------------------------------------------------------- diff --git a/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyJsonConfig.java b/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyJsonConfig.java deleted file mode 100644 index e36da80..0000000 --- a/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyJsonConfig.java +++ /dev/null @@ -1,50 +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 net.sf.json.processors.*; - -import java.util.*; - -/** - * Jetty protocol json configuration. - */ -public class GridJettyJsonConfig extends JsonConfig { - /** - * Constructs default jetty json config. - */ - public GridJettyJsonConfig() { - registerJsonValueProcessor(UUID.class, new ToStringJsonProcessor()); - } - - /** - * Helper class for simple to-string conversion for the beans. - */ - private static class ToStringJsonProcessor implements JsonValueProcessor { - /** {@inheritDoc} */ - @Override public Object processArrayValue(Object val, JsonConfig jsonCfg) { - throw new UnsupportedOperationException("Serialize array to string is not supported: " + val); - } - - /** {@inheritDoc} */ - @Override public Object processObjectValue(String key, Object val, JsonConfig jsonCfg) { - return val == null ? null : val.toString(); - } - } -} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1341e9ee/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 75e80ec..1c5f5ab 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 @@ -17,11 +17,9 @@ package org.apache.ignite.internal.processors.rest.protocols.http.jetty; -import net.sf.json.*; -import net.sf.json.processors.*; +import com.google.gson.*; import org.apache.ignite.*; import org.apache.ignite.internal.processors.rest.*; -import org.apache.ignite.internal.processors.rest.client.message.*; import org.apache.ignite.internal.processors.rest.request.*; import org.apache.ignite.internal.util.typedef.*; import org.apache.ignite.internal.util.typedef.internal.*; @@ -45,17 +43,6 @@ import static org.apache.ignite.internal.processors.rest.GridRestResponse.*; * {@code /ignite?cmd=cmdName¶m1=abc¶m2=123} */ public class GridJettyRestHandler extends AbstractHandler { - /** JSON value processor that does not transform input object. */ - private static final JsonValueProcessor SKIP_STR_VAL_PROC = new JsonValueProcessor() { - @Override public Object processArrayValue(Object o, JsonConfig jsonConfig) { - return o; - } - - @Override public Object processObjectValue(String s, Object o, JsonConfig jsonConfig) { - return o; - } - }; - /** Logger. */ private final IgniteLogger log; @@ -71,6 +58,9 @@ public class GridJettyRestHandler extends AbstractHandler { /** Authentication checker. */ private final IgniteClosure<String, Boolean> authChecker; + /** */ + private final Gson gson; + /** * Creates new HTTP requests handler. * @@ -86,6 +76,8 @@ public class GridJettyRestHandler extends AbstractHandler { this.log = log; this.authChecker = authChecker; + gson = new GsonBuilder().setFieldNamingStrategy(new IgniteFieldNamingStrategy()).create(); + // Init default page and favicon. try { initDefaultPage(); @@ -277,39 +269,16 @@ public class GridJettyRestHandler extends AbstractHandler { throw (Error)e; } - JsonConfig cfg = new GridJettyJsonConfig(); - - // Workaround for not needed transformation of string into JSON object. - if (cmdRes.getResponse() instanceof String) - cfg.registerJsonValueProcessor(cmdRes.getClass(), "response", SKIP_STR_VAL_PROC); - - // Workaround for not needed transformation of result field string into JSON object at GridClientTaskResultBean. - if (cmdRes.getResponse() instanceof GridClientTaskResultBean - && ((GridClientTaskResultBean)cmdRes.getResponse()).getResult() instanceof String) - cfg.registerJsonValueProcessor(cmdRes.getResponse().getClass(), "result", SKIP_STR_VAL_PROC); - - JSON json; - - try { - json = JSONSerializer.toJSON(cmdRes, cfg); - } - catch (JSONException e) { - U.error(log, "Failed to convert response to JSON: " + cmdRes, e); - - json = JSONSerializer.toJSON(new GridRestResponse(STATUS_FAILED, e.getMessage()), cfg); - } + Gson gson = new Gson(); try { - if (log.isDebugEnabled()) - log.debug("Parsed command response into JSON object: " + json.toString(2)); - - res.getWriter().write(json.toString()); + gson.toJson(cmdRes, res.getWriter()); if (log.isDebugEnabled()) log.debug("Processed HTTP request [action=" + act + ", jsonRes=" + cmdRes + ", req=" + req + ']'); } catch (IOException e) { - U.error(log, "Failed to send HTTP response: " + json.toString(2), e); + U.error(log, "Failed to send HTTP response", e); } } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1341e9ee/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/IgniteFieldNamingStrategy.java ---------------------------------------------------------------------- diff --git a/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/IgniteFieldNamingStrategy.java b/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/IgniteFieldNamingStrategy.java new file mode 100644 index 0000000..5bb3df2 --- /dev/null +++ b/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/IgniteFieldNamingStrategy.java @@ -0,0 +1,66 @@ +/* + * 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 com.google.gson.*; +import org.apache.ignite.internal.processors.rest.*; + +import java.lang.reflect.*; +import java.util.*; + +/** + * Ignite field name strategy. + */ +public class IgniteFieldNamingStrategy implements FieldNamingStrategy { + /** */ + private static final Map<Field, String> FIELD_NAMES = new HashMap<>(); + + static { + addField(GridRestResponse.class, "obj", "response"); + addField(GridRestResponse.class, "err", "error"); + addField(GridRestResponse.class, "sesTokStr", "sessionToken"); + } + + /** + * @param cls Class. + * @param fldName Fld name. + * @param propName Property name. + */ + private static void addField(Class<?> cls, String fldName, String propName) { + try { + Field field = cls.getDeclaredField(fldName); + + // assert method exists. + cls.getDeclaredMethod("get" + Character.toUpperCase(propName.charAt(0)) + propName.substring(1)); + + String old = FIELD_NAMES.put(field, propName); + + assert old == null; + } + catch (Exception e) { + throw new RuntimeException(e); + } + } + + /** {@inheritDoc} */ + @Override public String translateName(Field f) { + String name = FIELD_NAMES.get(f); + + return name == null ? f.getName() : name; + } +}