diff --git a/common/src/main/java/org/apache/sqoop/model/MMapInput.java b/common/src/main/java/org/apache/sqoop/model/MMapInput.java index 973b5fa3..f2c1ed78 100644 --- a/common/src/main/java/org/apache/sqoop/model/MMapInput.java +++ b/common/src/main/java/org/apache/sqoop/model/MMapInput.java @@ -48,7 +48,7 @@ public String getUrlSafeValueString() { vsb.append("&"); } vsb.append(UrlSafeUtils.urlEncode(entry.getKey())).append("="); - vsb.append(entry.getValue() != null ? UrlSafeUtils.urlEncode(entry.getValue()): null); + vsb.append(entry.getValue() != null ? UrlSafeUtils.urlEncode(entry.getValue()): ""); } return vsb.toString(); } @@ -64,11 +64,14 @@ public void restoreFromUrlSafeValueString(String valueString) { for (String pair : valuePairs) { String[] nameAndVal = pair.split("="); if (nameAndVal.length > 0) { - String name = nameAndVal[0]; + String name = UrlSafeUtils.urlDecode(nameAndVal[0]); String value = null; if (nameAndVal.length > 1) { value = nameAndVal[1]; } + if (value != null) { + value = UrlSafeUtils.urlDecode(value); + } valueMap.put(name, value); } diff --git a/common/src/test/java/org/apache/sqoop/model/TestMMapInput.java b/common/src/test/java/org/apache/sqoop/model/TestMMapInput.java index c4e098d5..118277e1 100644 --- a/common/src/test/java/org/apache/sqoop/model/TestMMapInput.java +++ b/common/src/test/java/org/apache/sqoop/model/TestMMapInput.java @@ -98,7 +98,7 @@ public void testUrlSafe() { */ @Test public void testNamedElement() { - MStringInput input1 = new MStringInput("sqoopsqoop", true, InputEditable.ANY, StringUtils.EMPTY, (short) 5); + MMapInput input1 = new MMapInput("sqoopsqoop", true, InputEditable.ANY, StringUtils.EMPTY); assertEquals("sqoopsqoop.label", input1.getLabelKey()); assertEquals("sqoopsqoop.help", input1.getHelpKey()); } diff --git a/shell/src/main/java/org/apache/sqoop/shell/utils/ConfigFiller.java b/shell/src/main/java/org/apache/sqoop/shell/utils/ConfigFiller.java index b45d8df6..6f1af94e 100644 --- a/shell/src/main/java/org/apache/sqoop/shell/utils/ConfigFiller.java +++ b/shell/src/main/java/org/apache/sqoop/shell/utils/ConfigFiller.java @@ -288,10 +288,13 @@ private static boolean fillInputMap(String prefix, if (line.hasOption(opt)) { String value = line.getOptionValue(opt); Map values = new HashMap(); + String[] keyValue = null; String[] entries = value.split("&"); for (String entry : entries) { if (entry.contains("=")) { - String[] keyValue = entry.split("="); + keyValue = entry.split("=", 2); + } + if (keyValue != null && keyValue.length == 2) { values.put(keyValue[0], keyValue[1]); } else { errorMessage(input, "Don't know what to do with " + entry); @@ -757,7 +760,11 @@ private static boolean fillInputMapWithBundle(MMapInput input, // try to remove entry that user specified. if(userTyped.contains("=")) { String []keyValue = userTyped.split("=", 2); - values.put(handleUserInput(keyValue[0]), handleUserInput(keyValue[1])); + if (keyValue.length == 2) { + values.put(handleUserInput(keyValue[0]), handleUserInput(keyValue[1])); + } else { + errorMessage("Don't know what to do with " + userTyped); + } } else { String key = handleUserInput(userTyped); if(values.containsKey(key)) {