Repository: sqoop Updated Branches: refs/heads/sqoop2 190b78fcb -> 25b0df5c8
SQOOP-2688: Sqoop2: Provide utility method to safely retrieve value from JSONObject (Jarek Jarcec Cecho via Kate Ting) Project: http://git-wip-us.apache.org/repos/asf/sqoop/repo Commit: http://git-wip-us.apache.org/repos/asf/sqoop/commit/25b0df5c Tree: http://git-wip-us.apache.org/repos/asf/sqoop/tree/25b0df5c Diff: http://git-wip-us.apache.org/repos/asf/sqoop/diff/25b0df5c Branch: refs/heads/sqoop2 Commit: 25b0df5c8c5934c483fb340ffdf1596d2164c94a Parents: 190b78f Author: Kate Ting <[email protected]> Authored: Wed Nov 18 14:34:17 2015 -0800 Committer: Kate Ting <[email protected]> Committed: Wed Nov 18 14:34:17 2015 -0800 ---------------------------------------------------------------------- .../org/apache/sqoop/json/ConnectorBean.java | 37 +++++----- .../org/apache/sqoop/json/ConnectorsBean.java | 2 +- .../java/org/apache/sqoop/json/DriverBean.java | 13 ++-- .../java/org/apache/sqoop/json/JSONUtils.java | 49 +++++++++++++ .../java/org/apache/sqoop/json/JobBean.java | 52 +++++++------- .../java/org/apache/sqoop/json/JobsBean.java | 2 +- .../java/org/apache/sqoop/json/LinkBean.java | 24 +++---- .../java/org/apache/sqoop/json/LinksBean.java | 2 +- .../org/apache/sqoop/json/PrincipalBean.java | 4 +- .../org/apache/sqoop/json/PrincipalsBean.java | 2 +- .../org/apache/sqoop/json/PrivilegeBean.java | 8 +-- .../org/apache/sqoop/json/PrivilegesBean.java | 2 +- .../java/org/apache/sqoop/json/RoleBean.java | 4 +- .../java/org/apache/sqoop/json/RolesBean.java | 2 +- .../org/apache/sqoop/json/SubmissionBean.java | 32 ++++----- .../org/apache/sqoop/json/SubmissionsBean.java | 2 +- .../apache/sqoop/json/ValidationResultBean.java | 9 +-- .../json/util/ConfigInputSerialization.java | 50 ++++++------- .../sqoop/json/util/SchemaSerialization.java | 43 ++++++------ .../sqoop/json/util/SerializationError.java | 4 ++ .../org/apache/sqoop/json/TestJSONUtils.java | 74 ++++++++++++++++++++ 21 files changed, 262 insertions(+), 155 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/sqoop/blob/25b0df5c/common/src/main/java/org/apache/sqoop/json/ConnectorBean.java ---------------------------------------------------------------------- diff --git a/common/src/main/java/org/apache/sqoop/json/ConnectorBean.java b/common/src/main/java/org/apache/sqoop/json/ConnectorBean.java index 2509e3e..89ae20c 100644 --- a/common/src/main/java/org/apache/sqoop/json/ConnectorBean.java +++ b/common/src/main/java/org/apache/sqoop/json/ConnectorBean.java @@ -130,7 +130,7 @@ public class ConnectorBean extends ConfigurableBean { public void restore(JSONObject jsonObject) { connectors = new ArrayList<MConnector>(); connectorConfigBundles = new HashMap<Long, ResourceBundle>(); - JSONObject obj = (JSONObject) jsonObject.get(CONNECTOR); + JSONObject obj = JSONUtils.getJSONObject(jsonObject, CONNECTOR); connectors.add(restoreConnector(obj)); } @@ -144,34 +144,30 @@ public class ConnectorBean extends ConfigurableBean { private MConnector restoreConnector(Object obj) { JSONObject object = (JSONObject) obj; - long connectorId = (Long) object.get(ID); - String uniqueName = (String) object.get(NAME); - String className = (String) object.get(CLASS); - String version = (String) object.get(CONFIGURABLE_VERSION); + long connectorId = JSONUtils.getLong(object, ID); + String uniqueName = JSONUtils.getString(object, NAME); + String className = JSONUtils.getString(object, CLASS); + String version = JSONUtils.getString(object, CONFIGURABLE_VERSION); - JSONObject jsonLink = (JSONObject) object.get(CONNECTOR_LINK_CONFIG); - List<MConfig> linkConfigs = restoreConfigs((JSONArray) jsonLink.get(ConfigInputConstants.CONFIGS)); - List<MValidator> linkValidators = restoreValidator((JSONArray) jsonLink - .get(ConfigInputConstants.CONFIG_VALIDATORS)); + JSONObject jsonLink = JSONUtils.getJSONObject(object, CONNECTOR_LINK_CONFIG); + List<MConfig> linkConfigs = restoreConfigs(JSONUtils.getJSONArray(jsonLink, ConfigInputConstants.CONFIGS)); + List<MValidator> linkValidators = restoreValidator(JSONUtils.getJSONArray(jsonLink, ConfigInputConstants.CONFIG_VALIDATORS)); // parent that encapsulates both the from/to configs - JSONObject jobConfigJson = (JSONObject) object.get(CONNECTOR_JOB_CONFIG); - JSONObject fromJobConfigJson = (JSONObject) jobConfigJson.get(Direction.FROM.name()); - JSONObject toJobConfigJson = (JSONObject) jobConfigJson.get(Direction.TO.name()); + JSONObject jobConfigJson = JSONUtils.getJSONObject(object, CONNECTOR_JOB_CONFIG); + JSONObject fromJobConfigJson = jobConfigJson.containsKey(Direction.FROM.name()) ? JSONUtils.getJSONObject(jobConfigJson, Direction.FROM.name()) : null; + JSONObject toJobConfigJson = jobConfigJson.containsKey(Direction.TO.name()) ? JSONUtils.getJSONObject(jobConfigJson, Direction.TO.name()) : null; MFromConfig fromConfig = null; MToConfig toConfig = null; if (fromJobConfigJson != null) { - List<MConfig> fromLinkConfigs = restoreConfigs((JSONArray) fromJobConfigJson.get(ConfigInputConstants.CONFIGS)); - List<MValidator> fromLinkValidators = restoreValidator((JSONArray) - fromJobConfigJson.get(ConfigInputConstants.CONFIG_VALIDATORS)); + List<MConfig> fromLinkConfigs = restoreConfigs(JSONUtils.getJSONArray(fromJobConfigJson, ConfigInputConstants.CONFIGS)); + List<MValidator> fromLinkValidators = restoreValidator(JSONUtils.getJSONArray(fromJobConfigJson, ConfigInputConstants.CONFIG_VALIDATORS)); fromConfig = new MFromConfig(fromLinkConfigs, fromLinkValidators); - } if (toJobConfigJson != null) { - List<MConfig> toLinkConfigs = restoreConfigs((JSONArray) toJobConfigJson.get(ConfigInputConstants.CONFIGS)); - List<MValidator> toLinkValidators = restoreValidator((JSONArray) - toJobConfigJson.get(ConfigInputConstants.CONFIG_VALIDATORS)); + List<MConfig> toLinkConfigs = restoreConfigs(JSONUtils.getJSONArray(toJobConfigJson, ConfigInputConstants.CONFIGS)); + List<MValidator> toLinkValidators = restoreValidator(JSONUtils.getJSONArray(toJobConfigJson, ConfigInputConstants.CONFIG_VALIDATORS)); toConfig = new MToConfig(toLinkConfigs, toLinkValidators); } @@ -181,8 +177,7 @@ public class ConnectorBean extends ConfigurableBean { connector.setPersistenceId(connectorId); if (object.containsKey(ALL_CONFIGS)) { - - JSONObject jsonConfigBundle = (JSONObject) object.get(ALL_CONFIGS); + JSONObject jsonConfigBundle = JSONUtils.getJSONObject(object, ALL_CONFIGS); connectorConfigBundles.put(connectorId, restoreConfigParamBundle(jsonConfigBundle)); } return connector; http://git-wip-us.apache.org/repos/asf/sqoop/blob/25b0df5c/common/src/main/java/org/apache/sqoop/json/ConnectorsBean.java ---------------------------------------------------------------------- diff --git a/common/src/main/java/org/apache/sqoop/json/ConnectorsBean.java b/common/src/main/java/org/apache/sqoop/json/ConnectorsBean.java index 88b71f5..9762ffa 100644 --- a/common/src/main/java/org/apache/sqoop/json/ConnectorsBean.java +++ b/common/src/main/java/org/apache/sqoop/json/ConnectorsBean.java @@ -58,7 +58,7 @@ public class ConnectorsBean extends ConnectorBean { @Override public void restore(JSONObject jsonObject) { - JSONArray array = (JSONArray) jsonObject.get(CONNECTORS); + JSONArray array = JSONUtils.getJSONArray(jsonObject, CONNECTORS); super.restoreConnectors(array); } } http://git-wip-us.apache.org/repos/asf/sqoop/blob/25b0df5c/common/src/main/java/org/apache/sqoop/json/DriverBean.java ---------------------------------------------------------------------- diff --git a/common/src/main/java/org/apache/sqoop/json/DriverBean.java b/common/src/main/java/org/apache/sqoop/json/DriverBean.java index 6f03be2..988e0a8 100644 --- a/common/src/main/java/org/apache/sqoop/json/DriverBean.java +++ b/common/src/main/java/org/apache/sqoop/json/DriverBean.java @@ -85,14 +85,13 @@ public class DriverBean extends ConfigurableBean { @Override public void restore(JSONObject jsonObject) { - long id = (Long) jsonObject.get(ID); - String driverVersion = (String) jsonObject.get(CONFIGURABLE_VERSION); - JSONObject driverJobConfig = (JSONObject) jsonObject.get(DRIVER_JOB_CONFIG); - List<MConfig> driverConfigs = restoreConfigs((JSONArray) driverJobConfig.get(ConfigInputConstants.CONFIGS)); - List<MValidator> driverValidators = restoreValidator((JSONArray) - driverJobConfig.get(ConfigInputConstants.CONFIG_VALIDATORS)); + long id = JSONUtils.getLong(jsonObject, ID); + String driverVersion = JSONUtils.getString(jsonObject, CONFIGURABLE_VERSION); + JSONObject driverJobConfig = JSONUtils.getJSONObject(jsonObject, DRIVER_JOB_CONFIG); + List<MConfig> driverConfigs = restoreConfigs(JSONUtils.getJSONArray(driverJobConfig, ConfigInputConstants.CONFIGS)); + List<MValidator> driverValidators = restoreValidator(JSONUtils.getJSONArray(driverJobConfig, ConfigInputConstants.CONFIG_VALIDATORS)); driver = new MDriver(new MDriverConfig(driverConfigs, driverValidators), driverVersion); driver.setPersistenceId(id); - driverConfigBundle = restoreConfigParamBundle((JSONObject) jsonObject.get(ALL_CONFIGS)); + driverConfigBundle = restoreConfigParamBundle(JSONUtils.getJSONObject(jsonObject, ALL_CONFIGS)); } } http://git-wip-us.apache.org/repos/asf/sqoop/blob/25b0df5c/common/src/main/java/org/apache/sqoop/json/JSONUtils.java ---------------------------------------------------------------------- diff --git a/common/src/main/java/org/apache/sqoop/json/JSONUtils.java b/common/src/main/java/org/apache/sqoop/json/JSONUtils.java index ff8f9ea..3b1ff08 100644 --- a/common/src/main/java/org/apache/sqoop/json/JSONUtils.java +++ b/common/src/main/java/org/apache/sqoop/json/JSONUtils.java @@ -21,12 +21,14 @@ import org.apache.sqoop.classification.InterfaceAudience; import org.apache.sqoop.classification.InterfaceStability; import org.apache.sqoop.common.SqoopException; import org.apache.sqoop.json.util.SerializationError; +import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.JSONValue; import org.json.simple.parser.ParseException; import java.io.IOException; import java.io.Reader; +import java.util.Date; /** */ @@ -68,6 +70,53 @@ public class JSONUtils { } } + /** + * Retrieve safely given key from JSONObject and ensure that it's of given class. + */ + public static <T> T getType(JSONObject jsonObject, String key, Class<T> targetClass) { + if(!jsonObject.containsKey(key)) { + throw new SqoopException(SerializationError.SERIALIZATION_003, "Key: " + key); + } + Object ret = jsonObject.get(key); + + if(ret == null) { + return null; + } + + if( !(targetClass.isInstance(ret))) { + throw new SqoopException(SerializationError.SERIALIZATION_004, "Found " + ret.getClass().getName() + " instead of " + targetClass.getName() + " for key: " + key); + } + + return (T)ret; + } + + public static Long getLong(JSONObject jsonObject, String key) { + return getType(jsonObject, key, Long.class); + } + public static JSONObject getJSONObject(JSONObject jsonObject, String key) { + return getType(jsonObject, key, JSONObject.class); + } + public static JSONArray getJSONArray(JSONObject jsonObject, String key) { + return getType(jsonObject, key, JSONArray.class); + } + public static String getString(JSONObject jsonObject, String key) { + return getType(jsonObject, key, String.class); + } + public static Boolean getBoolean(JSONObject jsonObject, String key) { + return getType(jsonObject, key, Boolean.class); + } + public static Double getDouble(JSONObject jsonObject, String key) { + return getType(jsonObject, key, Double.class); + } + public static Date getDate(JSONObject jsonObject, String key) { + Long epoch = getType(jsonObject, key, Long.class); + if(epoch == null) { + return null; + } + + return new Date(epoch); + } + private JSONUtils() { // Instantiation is prohibited } http://git-wip-us.apache.org/repos/asf/sqoop/blob/25b0df5c/common/src/main/java/org/apache/sqoop/json/JobBean.java ---------------------------------------------------------------------- diff --git a/common/src/main/java/org/apache/sqoop/json/JobBean.java b/common/src/main/java/org/apache/sqoop/json/JobBean.java index df7a804..b703987 100644 --- a/common/src/main/java/org/apache/sqoop/json/JobBean.java +++ b/common/src/main/java/org/apache/sqoop/json/JobBean.java @@ -155,7 +155,7 @@ public class JobBean implements JsonBean { @Override public void restore(JSONObject jsonObject) { jobs = new ArrayList<MJob>(); - JSONObject obj = (JSONObject) jsonObject.get(JOB); + JSONObject obj = JSONUtils.getJSONObject(jsonObject, JOB); jobs.add(restoreJob(obj)); } @@ -168,26 +168,22 @@ public class JobBean implements JsonBean { private MJob restoreJob(Object obj) { JSONObject object = (JSONObject) obj; - long fromConnectorId = (Long) object.get(FROM_CONNECTOR_ID); - long toConnectorId = (Long) object.get(TO_CONNECTOR_ID); - long fromConnectionId = (Long) object.get(FROM_LINK_ID); - long toConnectionId = (Long) object.get(TO_LINK_ID); - JSONObject fromConfigJson = (JSONObject) object.get(FROM_CONFIG_VALUES); - JSONObject toConfigJson = (JSONObject) object.get(TO_CONFIG_VALUES); - JSONObject driverConfigJson = (JSONObject) object.get(DRIVER_CONFIG_VALUES); - - List<MConfig> fromConfigs = restoreConfigs((JSONArray) fromConfigJson.get(ConfigInputConstants.CONFIGS)); - List<MValidator> fromValidators = restoreValidator((JSONArray) - fromConfigJson.get(ConfigInputConstants.CONFIG_VALIDATORS)); - - List<MConfig> toConfigs = restoreConfigs((JSONArray) toConfigJson.get(ConfigInputConstants.CONFIGS)); - List<MValidator> toValidators = restoreValidator((JSONArray) - toConfigJson.get(ConfigInputConstants.CONFIG_VALIDATORS)); - - List<MConfig> driverConfigs = restoreConfigs((JSONArray) driverConfigJson - .get(ConfigInputConstants.CONFIGS)); - List<MValidator> driverValidators = restoreValidator((JSONArray) - driverConfigJson.get(ConfigInputConstants.CONFIG_VALIDATORS)); + long fromConnectorId = JSONUtils.getLong(object, FROM_CONNECTOR_ID); + long toConnectorId = JSONUtils.getLong(object, TO_CONNECTOR_ID); + long fromConnectionId = JSONUtils.getLong(object, FROM_LINK_ID); + long toConnectionId = JSONUtils.getLong(object, TO_LINK_ID); + JSONObject fromConfigJson = JSONUtils.getJSONObject(object, FROM_CONFIG_VALUES); + JSONObject toConfigJson = JSONUtils.getJSONObject(object, TO_CONFIG_VALUES); + JSONObject driverConfigJson = JSONUtils.getJSONObject(object, DRIVER_CONFIG_VALUES); + + List<MConfig> fromConfigs = restoreConfigs(JSONUtils.getJSONArray(fromConfigJson, ConfigInputConstants.CONFIGS)); + List<MValidator> fromValidators = restoreValidator(JSONUtils.getJSONArray(fromConfigJson, ConfigInputConstants.CONFIG_VALIDATORS)); + + List<MConfig> toConfigs = restoreConfigs(JSONUtils.getJSONArray(toConfigJson, ConfigInputConstants.CONFIGS)); + List<MValidator> toValidators = restoreValidator(JSONUtils.getJSONArray(toConfigJson, ConfigInputConstants.CONFIG_VALIDATORS)); + + List<MConfig> driverConfigs = restoreConfigs(JSONUtils.getJSONArray(driverConfigJson, ConfigInputConstants.CONFIGS)); + List<MValidator> driverValidators = restoreValidator(JSONUtils.getJSONArray(driverConfigJson, ConfigInputConstants.CONFIG_VALIDATORS)); MJob job = new MJob( fromConnectorId, @@ -199,13 +195,13 @@ public class JobBean implements JsonBean { new MDriverConfig(driverConfigs, driverValidators) ); - job.setPersistenceId((Long) object.get(ID)); - job.setName((String) object.get(NAME)); - job.setEnabled((Boolean) object.get(ENABLED)); - job.setCreationUser((String) object.get(CREATION_USER)); - job.setCreationDate(new Date((Long) object.get(CREATION_DATE))); - job.setLastUpdateUser((String) object.get(UPDATE_USER)); - job.setLastUpdateDate(new Date((Long) object.get(UPDATE_DATE))); + job.setPersistenceId(JSONUtils.getLong(object, ID)); + job.setName(JSONUtils.getString(object, NAME)); + job.setEnabled(JSONUtils.getBoolean(object, ENABLED)); + job.setCreationUser( JSONUtils.getString(object, CREATION_USER)); + job.setCreationDate(new Date(JSONUtils.getLong(object, CREATION_DATE))); + job.setLastUpdateUser(JSONUtils.getString(object, UPDATE_USER)); + job.setLastUpdateDate(new Date(JSONUtils.getLong(object, UPDATE_DATE))); return job; } } http://git-wip-us.apache.org/repos/asf/sqoop/blob/25b0df5c/common/src/main/java/org/apache/sqoop/json/JobsBean.java ---------------------------------------------------------------------- diff --git a/common/src/main/java/org/apache/sqoop/json/JobsBean.java b/common/src/main/java/org/apache/sqoop/json/JobsBean.java index c62ab49..28411a2 100644 --- a/common/src/main/java/org/apache/sqoop/json/JobsBean.java +++ b/common/src/main/java/org/apache/sqoop/json/JobsBean.java @@ -57,7 +57,7 @@ public class JobsBean extends JobBean { @Override public void restore(JSONObject jsonObject) { - JSONArray array = (JSONArray) jsonObject.get(JOBS); + JSONArray array = JSONUtils.getJSONArray(jsonObject, JOBS); restoreJobs(array); } } http://git-wip-us.apache.org/repos/asf/sqoop/blob/25b0df5c/common/src/main/java/org/apache/sqoop/json/LinkBean.java ---------------------------------------------------------------------- diff --git a/common/src/main/java/org/apache/sqoop/json/LinkBean.java b/common/src/main/java/org/apache/sqoop/json/LinkBean.java index 99e7319..c9a8ab3 100644 --- a/common/src/main/java/org/apache/sqoop/json/LinkBean.java +++ b/common/src/main/java/org/apache/sqoop/json/LinkBean.java @@ -128,7 +128,7 @@ public class LinkBean implements JsonBean { @Override public void restore(JSONObject jsonObject) { links = new ArrayList<MLink>(); - JSONObject obj = (JSONObject) jsonObject.get(LINK); + JSONObject obj = JSONUtils.getJSONObject(jsonObject, LINK); links.add(restoreLink(obj)); } @@ -141,18 +141,18 @@ public class LinkBean implements JsonBean { private MLink restoreLink(Object obj) { JSONObject object = (JSONObject) obj; - long connectorId = (Long) object.get(CONNECTOR_ID); - JSONObject connectorLinkConfig = (JSONObject) object.get(LINK_CONFIG_VALUES); - List<MConfig> linkConfigs = restoreConfigs((JSONArray) connectorLinkConfig.get(ConfigInputConstants.CONFIGS)); - List<MValidator> linkValidators = restoreValidator((JSONArray) connectorLinkConfig.get(ConfigInputConstants.CONFIG_VALIDATORS)); + long connectorId = JSONUtils.getLong(object, CONNECTOR_ID); + JSONObject connectorLinkConfig = JSONUtils.getJSONObject(object, LINK_CONFIG_VALUES); + List<MConfig> linkConfigs = restoreConfigs(JSONUtils.getJSONArray(connectorLinkConfig, ConfigInputConstants.CONFIGS)); + List<MValidator> linkValidators = restoreValidator(JSONUtils.getJSONArray(connectorLinkConfig, ConfigInputConstants.CONFIG_VALIDATORS)); MLink link = new MLink(connectorId, new MLinkConfig(linkConfigs, linkValidators)); - link.setPersistenceId((Long) object.get(ID)); - link.setName((String) object.get(NAME)); - link.setEnabled((Boolean) object.get(ENABLED)); - link.setCreationUser((String) object.get(CREATION_USER)); - link.setCreationDate(new Date((Long) object.get(CREATION_DATE))); - link.setLastUpdateUser((String) object.get(UPDATE_USER)); - link.setLastUpdateDate(new Date((Long) object.get(UPDATE_DATE))); + link.setPersistenceId(JSONUtils.getLong(object, ID)); + link.setName(JSONUtils.getString(object, NAME)); + link.setEnabled(JSONUtils.getBoolean(object, ENABLED)); + link.setCreationUser(JSONUtils.getString(object, CREATION_USER)); + link.setCreationDate(new Date(JSONUtils.getLong(object, CREATION_DATE))); + link.setLastUpdateUser(JSONUtils.getString(object, UPDATE_USER)); + link.setLastUpdateDate(new Date(JSONUtils.getLong(object, UPDATE_DATE))); return link; } } http://git-wip-us.apache.org/repos/asf/sqoop/blob/25b0df5c/common/src/main/java/org/apache/sqoop/json/LinksBean.java ---------------------------------------------------------------------- diff --git a/common/src/main/java/org/apache/sqoop/json/LinksBean.java b/common/src/main/java/org/apache/sqoop/json/LinksBean.java index 6e4a906..87e873d 100644 --- a/common/src/main/java/org/apache/sqoop/json/LinksBean.java +++ b/common/src/main/java/org/apache/sqoop/json/LinksBean.java @@ -55,7 +55,7 @@ public class LinksBean extends LinkBean { @Override public void restore(JSONObject jsonObject) { - JSONArray array = (JSONArray) jsonObject.get(LINKS); + JSONArray array = JSONUtils.getJSONArray(jsonObject, LINKS); super.restoreLinks(array); } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/sqoop/blob/25b0df5c/common/src/main/java/org/apache/sqoop/json/PrincipalBean.java ---------------------------------------------------------------------- diff --git a/common/src/main/java/org/apache/sqoop/json/PrincipalBean.java b/common/src/main/java/org/apache/sqoop/json/PrincipalBean.java index e540b75..f89d9ee 100644 --- a/common/src/main/java/org/apache/sqoop/json/PrincipalBean.java +++ b/common/src/main/java/org/apache/sqoop/json/PrincipalBean.java @@ -89,7 +89,7 @@ public class PrincipalBean implements JsonBean { @Override public void restore(JSONObject json) { principals = new ArrayList<MPrincipal>(); - JSONObject obj = (JSONObject) json.get(PRINCIPAL); + JSONObject obj = JSONUtils.getJSONObject(json, PRINCIPAL); principals.add(restorePrincipal(obj)); } @@ -102,6 +102,6 @@ public class PrincipalBean implements JsonBean { private MPrincipal restorePrincipal(Object obj) { JSONObject object = (JSONObject) obj; - return new MPrincipal((String) object.get(NAME), (String) object.get(TYPE)); + return new MPrincipal(JSONUtils.getString(object, NAME), JSONUtils.getString(object, TYPE)); } } http://git-wip-us.apache.org/repos/asf/sqoop/blob/25b0df5c/common/src/main/java/org/apache/sqoop/json/PrincipalsBean.java ---------------------------------------------------------------------- diff --git a/common/src/main/java/org/apache/sqoop/json/PrincipalsBean.java b/common/src/main/java/org/apache/sqoop/json/PrincipalsBean.java index a4d56dc..d52a462 100644 --- a/common/src/main/java/org/apache/sqoop/json/PrincipalsBean.java +++ b/common/src/main/java/org/apache/sqoop/json/PrincipalsBean.java @@ -56,7 +56,7 @@ public class PrincipalsBean extends PrincipalBean { @Override public void restore(JSONObject json) { - JSONArray principalsArray = (JSONArray) json.get(PRINCIPALS); + JSONArray principalsArray = JSONUtils.getJSONArray(json, PRINCIPALS); restorePrincipals(principalsArray); } http://git-wip-us.apache.org/repos/asf/sqoop/blob/25b0df5c/common/src/main/java/org/apache/sqoop/json/PrivilegeBean.java ---------------------------------------------------------------------- diff --git a/common/src/main/java/org/apache/sqoop/json/PrivilegeBean.java b/common/src/main/java/org/apache/sqoop/json/PrivilegeBean.java index 6819063..e7861c4 100644 --- a/common/src/main/java/org/apache/sqoop/json/PrivilegeBean.java +++ b/common/src/main/java/org/apache/sqoop/json/PrivilegeBean.java @@ -94,7 +94,7 @@ public class PrivilegeBean implements JsonBean { @Override public void restore(JSONObject json) { privileges = new ArrayList<MPrivilege>(); - JSONObject obj = (JSONObject) json.get(PRIVILEGE); + JSONObject obj = JSONUtils.getJSONObject(json, PRIVILEGE); privileges.add(restorePrivilege(obj)); } @@ -107,9 +107,7 @@ public class PrivilegeBean implements JsonBean { private MPrivilege restorePrivilege(Object obj) { JSONObject object = (JSONObject) obj; - MResource resource = new MResource( - (String) object.get(RESOURCE_NAME), (String) object.get(RESOURCE_TYPE)); - return new MPrivilege(resource, (String) object.get(ACTION), - Boolean.valueOf(object.get(WITH_GRANT_OPTION).toString())); + MResource resource = new MResource(JSONUtils.getString(object, RESOURCE_NAME), JSONUtils.getString(object, RESOURCE_TYPE)); + return new MPrivilege(resource, JSONUtils.getString(object, ACTION), JSONUtils.getBoolean(object, WITH_GRANT_OPTION)); } } http://git-wip-us.apache.org/repos/asf/sqoop/blob/25b0df5c/common/src/main/java/org/apache/sqoop/json/PrivilegesBean.java ---------------------------------------------------------------------- diff --git a/common/src/main/java/org/apache/sqoop/json/PrivilegesBean.java b/common/src/main/java/org/apache/sqoop/json/PrivilegesBean.java index fbca54b..31b0195 100644 --- a/common/src/main/java/org/apache/sqoop/json/PrivilegesBean.java +++ b/common/src/main/java/org/apache/sqoop/json/PrivilegesBean.java @@ -56,7 +56,7 @@ public class PrivilegesBean extends PrivilegeBean { @Override public void restore(JSONObject json) { - JSONArray rolesArray = (JSONArray) json.get(PRIVILEGES); + JSONArray rolesArray = JSONUtils.getJSONArray(json, PRIVILEGES); restorePrivileges(rolesArray); } http://git-wip-us.apache.org/repos/asf/sqoop/blob/25b0df5c/common/src/main/java/org/apache/sqoop/json/RoleBean.java ---------------------------------------------------------------------- diff --git a/common/src/main/java/org/apache/sqoop/json/RoleBean.java b/common/src/main/java/org/apache/sqoop/json/RoleBean.java index e1f5783..ffafddb 100644 --- a/common/src/main/java/org/apache/sqoop/json/RoleBean.java +++ b/common/src/main/java/org/apache/sqoop/json/RoleBean.java @@ -87,7 +87,7 @@ public class RoleBean implements JsonBean { @Override public void restore(JSONObject json) { roles = new ArrayList<MRole>(); - JSONObject obj = (JSONObject) json.get(ROLE); + JSONObject obj = JSONUtils.getJSONObject(json, ROLE); roles.add(restoreRole(obj)); } @@ -100,6 +100,6 @@ public class RoleBean implements JsonBean { private MRole restoreRole(Object obj) { JSONObject object = (JSONObject) obj; - return new MRole((String) object.get(NAME)); + return new MRole(JSONUtils.getString(object, NAME)); } } http://git-wip-us.apache.org/repos/asf/sqoop/blob/25b0df5c/common/src/main/java/org/apache/sqoop/json/RolesBean.java ---------------------------------------------------------------------- diff --git a/common/src/main/java/org/apache/sqoop/json/RolesBean.java b/common/src/main/java/org/apache/sqoop/json/RolesBean.java index da8fc1f..c09ba95 100644 --- a/common/src/main/java/org/apache/sqoop/json/RolesBean.java +++ b/common/src/main/java/org/apache/sqoop/json/RolesBean.java @@ -56,7 +56,7 @@ public class RolesBean extends RoleBean { @Override public void restore(JSONObject json) { - JSONArray rolesArray = (JSONArray) json.get(ROLES); + JSONArray rolesArray = JSONUtils.getJSONArray(json, ROLES); restoreRoles(rolesArray); } http://git-wip-us.apache.org/repos/asf/sqoop/blob/25b0df5c/common/src/main/java/org/apache/sqoop/json/SubmissionBean.java ---------------------------------------------------------------------- diff --git a/common/src/main/java/org/apache/sqoop/json/SubmissionBean.java b/common/src/main/java/org/apache/sqoop/json/SubmissionBean.java index c7d6958..e6b300d 100644 --- a/common/src/main/java/org/apache/sqoop/json/SubmissionBean.java +++ b/common/src/main/java/org/apache/sqoop/json/SubmissionBean.java @@ -162,7 +162,7 @@ public class SubmissionBean implements JsonBean { @Override public void restore(JSONObject json) { submissions = new ArrayList<MSubmission>(); - JSONObject obj = (JSONObject) json.get(SUBMISSION); + JSONObject obj = JSONUtils.getJSONObject(json, SUBMISSION); submissions.add(restoreSubmission(obj)); } @@ -176,47 +176,47 @@ public class SubmissionBean implements JsonBean { private MSubmission restoreSubmission(Object obj) { JSONObject object = (JSONObject) obj; MSubmission submission = new MSubmission(); - Long jobId = (Long) object.get(JOB_ID); + Long jobId = JSONUtils.getLong(object, JOB_ID); if (jobId == null) { - jobId = (Long) object.get(JOB); + jobId = JSONUtils.getLong(object, JOB); } submission.setJobId(jobId); - submission.setStatus(SubmissionStatus.valueOf((String) object.get(STATUS))); - submission.setProgress((Double) object.get(PROGRESS)); + submission.setStatus(SubmissionStatus.valueOf(JSONUtils.getString(object, STATUS))); + submission.setProgress(JSONUtils.getDouble(object, PROGRESS)); if (object.containsKey(CREATION_USER)) { - submission.setCreationUser((String) object.get(CREATION_USER)); + submission.setCreationUser(JSONUtils.getString(object, CREATION_USER)); } if (object.containsKey(CREATION_DATE)) { - submission.setCreationDate(new Date((Long) object.get(CREATION_DATE))); + submission.setCreationDate(JSONUtils.getDate(object, CREATION_DATE)); } if (object.containsKey(LAST_UPDATE_USER)) { - submission.setLastUpdateUser((String) object.get(LAST_UPDATE_USER)); + submission.setLastUpdateUser(JSONUtils.getString(object, LAST_UPDATE_USER)); } if (object.containsKey(LAST_UPDATE_DATE)) { - submission.setLastUpdateDate(new Date((Long) object.get(LAST_UPDATE_DATE))); + submission.setLastUpdateDate(JSONUtils.getDate(object, LAST_UPDATE_DATE)); } if (object.containsKey(EXTERNAL_ID)) { - submission.setExternalJobId((String) object.get(EXTERNAL_ID)); + submission.setExternalJobId(JSONUtils.getString(object, EXTERNAL_ID)); } if (object.containsKey(EXTERNAL_LINK)) { - submission.setExternalLink((String) object.get(EXTERNAL_LINK)); + submission.setExternalLink(JSONUtils.getString(object, EXTERNAL_LINK)); } if (object.containsKey(ERROR_SUMMARY)) { - submission.getError().setErrorSummary((String) object.get(ERROR_SUMMARY)); + submission.getError().setErrorSummary(JSONUtils.getString(object, ERROR_SUMMARY)); } if (object.containsKey(ERROR_DETAILS)) { - submission.getError().setErrorDetails((String) object.get(ERROR_DETAILS)); + submission.getError().setErrorDetails(JSONUtils.getString(object, ERROR_DETAILS)); } if (object.containsKey(COUNTERS)) { - submission.setCounters(restoreCounters((JSONObject) object.get(COUNTERS))); + submission.setCounters(restoreCounters(JSONUtils.getJSONObject(object, COUNTERS))); } if (object.containsKey(FROM_SCHEMA)) { - submission.setFromSchema(restoreSchema((JSONObject) object.get(FROM_SCHEMA))); + submission.setFromSchema(restoreSchema(JSONUtils.getJSONObject(object, FROM_SCHEMA))); } if (object.containsKey(TO_SCHEMA)) { - submission.setToSchema(restoreSchema((JSONObject) object.get(TO_SCHEMA))); + submission.setToSchema(restoreSchema(JSONUtils.getJSONObject(object, TO_SCHEMA))); } return submission; } http://git-wip-us.apache.org/repos/asf/sqoop/blob/25b0df5c/common/src/main/java/org/apache/sqoop/json/SubmissionsBean.java ---------------------------------------------------------------------- diff --git a/common/src/main/java/org/apache/sqoop/json/SubmissionsBean.java b/common/src/main/java/org/apache/sqoop/json/SubmissionsBean.java index 019abf1..52e8efa 100644 --- a/common/src/main/java/org/apache/sqoop/json/SubmissionsBean.java +++ b/common/src/main/java/org/apache/sqoop/json/SubmissionsBean.java @@ -56,7 +56,7 @@ public class SubmissionsBean extends SubmissionBean { @Override public void restore(JSONObject json) { - JSONArray submissionsArray = (JSONArray) json.get(SUBMISSIONS); + JSONArray submissionsArray = JSONUtils.getJSONArray(json, SUBMISSIONS); restoreSubmissions(submissionsArray); } http://git-wip-us.apache.org/repos/asf/sqoop/blob/25b0df5c/common/src/main/java/org/apache/sqoop/json/ValidationResultBean.java ---------------------------------------------------------------------- diff --git a/common/src/main/java/org/apache/sqoop/json/ValidationResultBean.java b/common/src/main/java/org/apache/sqoop/json/ValidationResultBean.java index 7dfd9fc..b328a25 100644 --- a/common/src/main/java/org/apache/sqoop/json/ValidationResultBean.java +++ b/common/src/main/java/org/apache/sqoop/json/ValidationResultBean.java @@ -118,14 +118,14 @@ public class ValidationResultBean implements JsonBean { @Override public void restore(JSONObject jsonObject) { - JSONArray array = (JSONArray) jsonObject.get(VALIDATION_RESULT); + JSONArray array = JSONUtils.getJSONArray(jsonObject, VALIDATION_RESULT); results = new ConfigValidationResult[array.size()]; int i = 0; for(Object item : array) { results[i++] = restoreValidationResult((JSONObject) item); } if(jsonObject.containsKey(ID)) { - id = (Long) jsonObject.get(ID); + id = JSONUtils.getLong(jsonObject, ID); } } @@ -150,9 +150,6 @@ public class ValidationResultBean implements JsonBean { } private Message restoreMessage(JSONObject item) { - return new Message( - Status.valueOf((String) item.get(STATUS)), - (String) item.get(MESSAGE) - ); + return new Message(Status.valueOf(JSONUtils.getString(item, STATUS)), JSONUtils.getString(item, MESSAGE)); } } http://git-wip-us.apache.org/repos/asf/sqoop/blob/25b0df5c/common/src/main/java/org/apache/sqoop/json/util/ConfigInputSerialization.java ---------------------------------------------------------------------- diff --git a/common/src/main/java/org/apache/sqoop/json/util/ConfigInputSerialization.java b/common/src/main/java/org/apache/sqoop/json/util/ConfigInputSerialization.java index bd4f5c4..4ce977c 100644 --- a/common/src/main/java/org/apache/sqoop/json/util/ConfigInputSerialization.java +++ b/common/src/main/java/org/apache/sqoop/json/util/ConfigInputSerialization.java @@ -21,6 +21,7 @@ import org.apache.commons.lang.StringUtils; import org.apache.sqoop.classification.InterfaceAudience; import org.apache.sqoop.classification.InterfaceStability; import org.apache.sqoop.common.SqoopException; +import org.apache.sqoop.json.JSONUtils; import org.apache.sqoop.model.InputEditable; import org.apache.sqoop.model.MBooleanInput; import org.apache.sqoop.model.MConfigList; @@ -163,8 +164,8 @@ public final class ConfigInputSerialization { List<MValidator> mValidators = new ArrayList<>(); for (int validatorCounter = 0; validatorCounter < jsonValidators.size(); validatorCounter++) { JSONObject jsonValidator = (JSONObject) jsonValidators.get(validatorCounter); - String validatorClassName = (String) jsonValidator.get(ConfigValidatorConstants.VALIDATOR_CLASS); - String validatorStrArg = (String) jsonValidator.get(ConfigValidatorConstants.VALIDATOR_STR_ARG); + String validatorClassName = JSONUtils.getString(jsonValidator, ConfigValidatorConstants.VALIDATOR_CLASS); + String validatorStrArg = JSONUtils.getString(jsonValidator, ConfigValidatorConstants.VALIDATOR_STR_ARG); mValidators.add(new MValidator(validatorClassName, validatorStrArg)); } return mValidators; @@ -194,28 +195,23 @@ public final class ConfigInputSerialization { */ @SuppressWarnings({ "rawtypes", "unchecked" }) static MConfig restoreConfig(JSONObject config) { - JSONArray inputs = (JSONArray) config.get(ConfigInputConstants.CONFIG_INPUTS); + JSONArray inputs = JSONUtils.getJSONArray(config, ConfigInputConstants.CONFIG_INPUTS); List<MInput<?>> mInputs = new ArrayList<MInput<?>>(); for (int i = 0; i < inputs.size(); i++) { JSONObject input = (JSONObject) inputs.get(i); - MInputType type = - MInputType.valueOf((String) input.get(ConfigInputConstants.CONFIG_INPUT_TYPE)); - String name = (String) input.get(ConfigInputConstants.CONFIG_INPUT_NAME); - Boolean sensitive = (Boolean) input.get(ConfigInputConstants.CONFIG_INPUT_SENSITIVE); - InputEditable editable = (input.containsKey(ConfigInputConstants.CONFIG_INPUT_EDITABLE)) ? - InputEditable.valueOf((String)input.get(ConfigInputConstants.CONFIG_INPUT_EDITABLE)) - : InputEditable.USER_ONLY; - String overrides = (String) input.get(ConfigInputConstants.CONFIG_INPUT_OVERRIDES); - String sensitveKeyPattern = (String) input.get(ConfigInputConstants.CONFIG_INPUT_SENSITIVE_KEY_PATTERN); - - List<MValidator> mValidatorsForInput = restoreValidator((JSONArray) - input.get(ConfigInputConstants.CONFIG_VALIDATORS)); + MInputType type = MInputType.valueOf(JSONUtils.getString(input, ConfigInputConstants.CONFIG_INPUT_TYPE)); + String name = JSONUtils.getString(input, ConfigInputConstants.CONFIG_INPUT_NAME); + Boolean sensitive = JSONUtils.getBoolean(input, ConfigInputConstants.CONFIG_INPUT_SENSITIVE); + InputEditable editable = (input.containsKey(ConfigInputConstants.CONFIG_INPUT_EDITABLE)) ? InputEditable.valueOf(JSONUtils.getString(input, ConfigInputConstants.CONFIG_INPUT_EDITABLE)) : InputEditable.USER_ONLY; + String overrides = JSONUtils.getString(input, ConfigInputConstants.CONFIG_INPUT_OVERRIDES); + String sensitveKeyPattern = input.containsKey(ConfigInputConstants.CONFIG_INPUT_SENSITIVE_KEY_PATTERN) ? JSONUtils.getString(input, ConfigInputConstants.CONFIG_INPUT_SENSITIVE_KEY_PATTERN) : null; + List<MValidator> mValidatorsForInput = restoreValidator(JSONUtils.getJSONArray(input, ConfigInputConstants.CONFIG_VALIDATORS)); MInput mInput = null; switch (type) { case STRING: { - long size = (Long) input.get(ConfigInputConstants.CONFIG_INPUT_SIZE); + long size = JSONUtils.getLong(input, ConfigInputConstants.CONFIG_INPUT_SIZE); mInput = new MStringInput(name, sensitive.booleanValue(), editable, overrides, (short) size, mValidatorsForInput); break; } @@ -236,7 +232,7 @@ public final class ConfigInputSerialization { break; } case ENUM: { - String values = (String) input.get(ConfigInputConstants.CONFIG_INPUT_ENUM_VALUES); + String values = JSONUtils.getString(input, ConfigInputConstants.CONFIG_INPUT_ENUM_VALUES); mInput = new MEnumInput(name, sensitive.booleanValue(), editable, overrides, values.split(","), mValidatorsForInput); break; } @@ -254,7 +250,7 @@ public final class ConfigInputSerialization { } // Propagate config ID - Long id = (Long)input.get(ConfigInputConstants.INPUT_ID); + Long id = JSONUtils.getLong(input, ConfigInputConstants.INPUT_ID); if(id == null) { throw new SqoopException(SerializationError.SERIALIZATION_002, "Missing field: " + ConfigInputConstants.INPUT_ID); } @@ -271,24 +267,20 @@ public final class ConfigInputSerialization { } break; default: - mInput.restoreFromUrlSafeValueString( - (String) input.get(ConfigInputConstants.CONFIG_INPUT_VALUE)); + mInput.restoreFromUrlSafeValueString(JSONUtils.getString(input, ConfigInputConstants.CONFIG_INPUT_VALUE)); break; } } mInputs.add(mInput); } + List<MValidator> mValidatorsForConfig = restoreValidator(JSONUtils.getJSONArray(config, ConfigInputConstants.CONFIG_VALIDATORS)); + MConfig mConfig = new MConfig(JSONUtils.getString(config, ConfigInputConstants.CONFIG_NAME), mInputs, mValidatorsForConfig); + mConfig.setPersistenceId(JSONUtils.getLong(config, ConfigInputConstants.CONFIG_ID)); + return mConfig; + } - - List<MValidator> mValidatorsForConfig = restoreValidator((JSONArray) - config.get(ConfigInputConstants.CONFIG_VALIDATORS)); - MConfig mConfig = new MConfig((String) config.get(ConfigInputConstants.CONFIG_NAME), mInputs, mValidatorsForConfig); - mConfig.setPersistenceId((Long) config.get(ConfigInputConstants.CONFIG_ID)); - return mConfig; - } - - private ConfigInputSerialization() { + private ConfigInputSerialization() { // Do not instantiate } } http://git-wip-us.apache.org/repos/asf/sqoop/blob/25b0df5c/common/src/main/java/org/apache/sqoop/json/util/SchemaSerialization.java ---------------------------------------------------------------------- diff --git a/common/src/main/java/org/apache/sqoop/json/util/SchemaSerialization.java b/common/src/main/java/org/apache/sqoop/json/util/SchemaSerialization.java index 1fa5743..3a3f9e8 100644 --- a/common/src/main/java/org/apache/sqoop/json/util/SchemaSerialization.java +++ b/common/src/main/java/org/apache/sqoop/json/util/SchemaSerialization.java @@ -22,6 +22,7 @@ import java.util.HashSet; import org.apache.sqoop.classification.InterfaceAudience; import org.apache.sqoop.classification.InterfaceStability; import org.apache.sqoop.common.SqoopException; +import org.apache.sqoop.json.JSONUtils; import org.apache.sqoop.schema.NullSchema; import org.apache.sqoop.schema.Schema; import org.apache.sqoop.schema.type.AbstractComplexListType; @@ -189,9 +190,9 @@ public class SchemaSerialization { } private static Column restoreColumn(JSONObject obj) { - String name = (String) obj.get(NAME); + String name = JSONUtils.getString(obj, NAME); - Boolean nullable = (Boolean) obj.get(NULLABLE); + Boolean nullable = JSONUtils.getBoolean(obj, NULLABLE); AbstractPrimitiveType key = null; Column value = null; Long arraySize = null; @@ -200,29 +201,31 @@ public class SchemaSerialization { // complex type attribute if (obj.containsKey(MAP)) { - JSONObject map = (JSONObject) obj.get(MAP); + JSONObject map = JSONUtils.getJSONObject(obj, MAP); if (map.containsKey(KEY)) { - key = (AbstractPrimitiveType) restoreColumn((JSONObject) map.get(KEY)); + key = (AbstractPrimitiveType) restoreColumn(JSONUtils.getJSONObject(map, KEY)); } if (map.containsKey(VALUE)) { - value = restoreColumn((JSONObject) map.get(VALUE)); + value = restoreColumn(JSONUtils.getJSONObject(map, VALUE)); } } if (obj.containsKey(LIST)) { - JSONObject list = (JSONObject) obj.get(LIST); + JSONObject list = JSONUtils.getJSONObject(obj, LIST); if (list.containsKey(LIST_TYPE)) { - listType = restoreColumn((JSONObject) list.get(LIST_TYPE)); + listType = restoreColumn(JSONUtils.getJSONObject(list, LIST_TYPE)); + } + if(list.containsKey(SIZE)) { + arraySize = JSONUtils.getLong(list, SIZE); } - arraySize = (Long) list.get(SIZE); if (list.containsKey(ENUM_OPTIONS)) { - JSONArray optionsArray = (JSONArray) list.get(ENUM_OPTIONS); + JSONArray optionsArray = JSONUtils.getJSONArray(list, ENUM_OPTIONS); for (int n = 0; n < optionsArray.size(); n++) { options.add((String) optionsArray.get(n)); } } } - ColumnType type = ColumnType.valueOf((String) obj.get(TYPE)); + ColumnType type = ColumnType.valueOf(JSONUtils.getString(obj, TYPE)); Column output = null; switch (type) { case ARRAY: @@ -239,25 +242,25 @@ public class SchemaSerialization { output = new Date(name); break; case DATE_TIME: - Boolean hasFraction = (Boolean) obj.get(FRACTION); - Boolean hasTimezone = (Boolean) obj.get(TIMEZONE); + Boolean hasFraction = JSONUtils.getBoolean(obj, FRACTION); + Boolean hasTimezone = JSONUtils.getBoolean(obj, TIMEZONE); output = new DateTime(name, hasFraction, hasTimezone); break; case DECIMAL: - Integer precision = obj.get(PRECISION) != null ? ((Long) obj.get(PRECISION)).intValue() : null; - Integer scale = obj.get(SCALE) != null ? ((Long) obj.get(SCALE)).intValue() : null; + Integer precision = obj.get(PRECISION) != null ? (JSONUtils.getLong(obj, PRECISION)).intValue() : null; + Integer scale = obj.get(SCALE) != null ? (JSONUtils.getLong(obj, SCALE)).intValue() : null; output = new Decimal(name, precision, scale); break; case ENUM: output = new Enum(name, options); break; case FIXED_POINT: - Boolean signed = (Boolean) obj.get(SIGNED); - Long fixedPointByteSize = (Long) obj.get(BYTE_SIZE); + Boolean signed = JSONUtils.getBoolean(obj, SIGNED); + Long fixedPointByteSize = JSONUtils.getLong(obj, BYTE_SIZE); output = new FixedPoint(name, fixedPointByteSize, signed); break; case FLOATING_POINT: - Long floatingPointByteSize = (Long) obj.get(BYTE_SIZE); + Long floatingPointByteSize = JSONUtils.getLong(obj, BYTE_SIZE); output = new FloatingPoint(name, floatingPointByteSize); break; case MAP: @@ -267,15 +270,15 @@ public class SchemaSerialization { output = new Set(name, listType); break; case TEXT: - charSize = (Long) obj.get(CHAR_SIZE); + charSize = JSONUtils.getLong(obj, CHAR_SIZE); output = new Text(name).setCharSize(charSize); break; case TIME: - Boolean hasTimeFraction = (Boolean) obj.get(FRACTION); + Boolean hasTimeFraction = JSONUtils.getBoolean(obj, FRACTION); output = new Time(name, hasTimeFraction); break; case UNKNOWN: - Long jdbcType = (Long) obj.get(JDBC_TYPE); + Long jdbcType = JSONUtils.getLong(obj, JDBC_TYPE); output = new Unknown(name).setJdbcType(jdbcType); break; default: http://git-wip-us.apache.org/repos/asf/sqoop/blob/25b0df5c/common/src/main/java/org/apache/sqoop/json/util/SerializationError.java ---------------------------------------------------------------------- diff --git a/common/src/main/java/org/apache/sqoop/json/util/SerializationError.java b/common/src/main/java/org/apache/sqoop/json/util/SerializationError.java index d5cdb31..8479db1 100644 --- a/common/src/main/java/org/apache/sqoop/json/util/SerializationError.java +++ b/common/src/main/java/org/apache/sqoop/json/util/SerializationError.java @@ -29,6 +29,10 @@ public enum SerializationError implements ErrorCode { SERIALIZATION_002("Invalid JSON"), + SERIALIZATION_003("Required key field is missing"), + + SERIALIZATION_004("Invalid type for key"), + ; private final String message; http://git-wip-us.apache.org/repos/asf/sqoop/blob/25b0df5c/common/src/test/java/org/apache/sqoop/json/TestJSONUtils.java ---------------------------------------------------------------------- diff --git a/common/src/test/java/org/apache/sqoop/json/TestJSONUtils.java b/common/src/test/java/org/apache/sqoop/json/TestJSONUtils.java index 67ab412..6b434ff 100644 --- a/common/src/test/java/org/apache/sqoop/json/TestJSONUtils.java +++ b/common/src/test/java/org/apache/sqoop/json/TestJSONUtils.java @@ -18,11 +18,13 @@ package org.apache.sqoop.json; import org.apache.sqoop.common.SqoopException; +import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.testng.annotations.Test; import java.io.Reader; import java.io.StringReader; +import java.sql.Date; import static org.testng.Assert.assertEquals; @@ -61,4 +63,76 @@ public class TestJSONUtils { public void testReaderNull() { JSONUtils.parse((Reader)null); } + + @Test + public void testGetType() { + JSONObject object = JSONUtils.parse("{\"id\":3}"); + assertEquals(new Long(3), JSONUtils.getType(object, "id", Long.class)); + } + + @Test + public void testGetTypeNull() { + JSONObject object = JSONUtils.parse("{\"id\": null}"); + assertEquals(null, JSONUtils.getType(object, "id", String.class)); + } + + @Test(expectedExceptions = SqoopException.class) + public void testGetTypeNonExistingKey() { + JSONObject object = JSONUtils.parse("{\"id\":3}"); + JSONUtils.getType(object, "non-existing", Long.class); + } + + @Test(expectedExceptions = SqoopException.class) + public void testGetTypeIncorrectType() { + JSONObject object = JSONUtils.parse("{\"id\":3}"); + JSONUtils.getType(object, "id", String.class); + } + + @Test + public void testGetLong() { + JSONObject object = JSONUtils.parse("{\"id\":3}"); + assertEquals(new Long(3), JSONUtils.getLong(object, "id")); + } + + @Test + public void testGetJSONObject() { + JSONObject object = JSONUtils.parse("{\"id\": {}}"); + assertEquals(new JSONObject(), JSONUtils.getJSONObject(object, "id")); + } + + @Test + public void testGetJSONArray() { + JSONObject object = JSONUtils.parse("{\"id\": []}"); + assertEquals(new JSONArray(), JSONUtils.getJSONArray(object, "id")); + } + + @Test + public void testGetString() { + JSONObject object = JSONUtils.parse("{\"id\": \"sqoop-is-awesome\"}"); + assertEquals("sqoop-is-awesome", JSONUtils.getString(object, "id")); + } + + @Test + public void testGetBoolean() { + JSONObject object = JSONUtils.parse("{\"id\": true}"); + assertEquals(Boolean.TRUE, JSONUtils.getBoolean(object, "id")); + } + + @Test + public void testGetDouble() { + JSONObject object = JSONUtils.parse("{\"id\": 0.1}"); + assertEquals(0.1, JSONUtils.getDouble(object, "id")); + } + + @Test + public void testGetDate() { + JSONObject object = JSONUtils.parse("{\"id\": 1447628346000}"); + assertEquals(new Date(1447628346000L), JSONUtils.getDate(object, "id")); + } + + @Test + public void testGetDateNull() { + JSONObject object = JSONUtils.parse("{\"id\": null}"); + assertEquals(null, JSONUtils.getDate(object, "id")); + } }
