X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Futils%2Fserial%2FImporter.java;h=8fba42d7e78e112ddc85b017904ec21510abfe5a;hb=0ff71477abf90d4843b8d9a3dc9907b5edc95fc0;hp=d21f1dd341c9085af11a08015a05c5fb04fc5c14;hpb=ce0974c4b695f842fa7ec81f3c53d016d1959854;p=fanfix.git diff --git a/src/be/nikiroo/utils/serial/Importer.java b/src/be/nikiroo/utils/serial/Importer.java index d21f1dd..8fba42d 100644 --- a/src/be/nikiroo/utils/serial/Importer.java +++ b/src/be/nikiroo/utils/serial/Importer.java @@ -26,6 +26,9 @@ public class Importer { private String currentFieldName; + /** + * Create a new {@link Importer}. + */ public Importer() { map = new HashMap(); map.put("NULL", null); @@ -53,27 +56,33 @@ public class Importer { * because it is not compatible with this code * @throws ClassNotFoundException * if a class described in the serialised data cannot be found + * @throws IOException + * if the content cannot be read (for instance, corrupt data) */ public Importer read(String data) throws NoSuchFieldException, - NoSuchMethodException, ClassNotFoundException { + NoSuchMethodException, ClassNotFoundException, IOException { + Scanner scan = new Scanner(data); try { - Scanner scan = new Scanner(data); scan.useDelimiter("\n"); while (scan.hasNext()) { String line = scan.next(); if (line.startsWith("ZIP:")) { - line = StringUtils.unzip64(line.substring("ZIP:".length())); + try { + line = StringUtils.unzip64(line.substring("ZIP:" + .length())); + } catch (IOException e) { + throw new IOException( + "Internal error when decoding ZIP content: input may be corrupt"); + } read(line); } else { processLine(line); } } + } finally { scan.close(); - } catch (IOException e) { - throw new NoSuchMethodException( - "Internal error when decoding ZIP content: input may be corrupt"); } return this; @@ -96,9 +105,11 @@ public class Importer { * because it is not compatible with this code * @throws ClassNotFoundException * if a class described in the serialised data cannot be found + * @throws IOException + * if the content cannot be read (for instance, corrupt data) */ private boolean processLine(String line) throws NoSuchFieldException, - NoSuchMethodException, ClassNotFoundException { + NoSuchMethodException, ClassNotFoundException, IOException { // Defer to latest child if any if (child != null) { if (child.processLine(line)) {