diff options
author | dbeaumont@google.com <dbeaumont@google.com@ee073f10-1060-11df-b6a4-87a95322a99c> | 2012-09-05 16:02:01 +0000 |
---|---|---|
committer | dbeaumont@google.com <dbeaumont@google.com@ee073f10-1060-11df-b6a4-87a95322a99c> | 2012-09-05 16:02:01 +0000 |
commit | 113ac5b81a2870c2c7ad58ec9e5d20da1bfd0794 (patch) | |
tree | 5dda9915879cfe76161670d55023643fce439492 /java/libphonenumber/src | |
parent | 5a8267b0395c34ce3ac12fb34235f75bfe7c1df0 (diff) | |
download | android_external_libphonenumbergoogle-113ac5b81a2870c2c7ad58ec9e5d20da1bfd0794.tar.gz android_external_libphonenumbergoogle-113ac5b81a2870c2c7ad58ec9e5d20da1bfd0794.tar.bz2 android_external_libphonenumbergoogle-113ac5b81a2870c2c7ad58ec9e5d20da1bfd0794.zip |
JAVA: Better exception handling during metadata loading.
git-svn-id: http://libphonenumber.googlecode.com/svn/trunk@517 ee073f10-1060-11df-b6a4-87a95322a99c
Diffstat (limited to 'java/libphonenumber/src')
-rw-r--r-- | java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java | 37 |
1 files changed, 25 insertions, 12 deletions
diff --git a/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java b/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java index b332318..7e4e6bb 100644 --- a/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java +++ b/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java @@ -558,25 +558,38 @@ public class PhoneNumberUtil { nanpaRegions.addAll(countryCallingCodeToRegionCodeMap.get(NANPA_COUNTRY_CODE)); } - private void loadMetadataFromFile(String filePrefix, String regionCode, int countryCallingCode) { + // @VisibleForTesting + void loadMetadataFromFile(String filePrefix, String regionCode, int countryCallingCode) { boolean isNonGeoRegion = REGION_CODE_FOR_NON_GEO_ENTITY.equals(regionCode); - InputStream source = isNonGeoRegion - ? PhoneNumberUtil.class.getResourceAsStream(filePrefix + "_" + countryCallingCode) - : PhoneNumberUtil.class.getResourceAsStream(filePrefix + "_" + regionCode); + String fileName = filePrefix + "_" + + (isNonGeoRegion ? String.valueOf(countryCallingCode) : regionCode); + InputStream source = PhoneNumberUtil.class.getResourceAsStream(fileName); + if (source == null) { + LOGGER.log(Level.SEVERE, "missing metadata: " + fileName); + throw new RuntimeException("missing metadata: " + fileName); + } ObjectInputStream in = null; try { in = new ObjectInputStream(source); PhoneMetadataCollection metadataCollection = new PhoneMetadataCollection(); metadataCollection.readExternal(in); - for (PhoneMetadata metadata : metadataCollection.getMetadataList()) { - if (isNonGeoRegion) { - countryCodeToNonGeographicalMetadataMap.put(countryCallingCode, metadata); - } else { - regionToMetadataMap.put(regionCode, metadata); - } + List<PhoneMetadata> metadataList = metadataCollection.getMetadataList(); + if (metadataList.isEmpty()) { + LOGGER.log(Level.SEVERE, "empty metadata: " + fileName); + throw new RuntimeException("empty metadata: " + fileName); + } + if (metadataList.size() > 1) { + LOGGER.log(Level.WARNING, "invalid metadata (too many entries): " + fileName); + } + PhoneMetadata metadata = metadataList.get(0); + if (isNonGeoRegion) { + countryCodeToNonGeographicalMetadataMap.put(countryCallingCode, metadata); + } else { + regionToMetadataMap.put(regionCode, metadata); } } catch (IOException e) { - LOGGER.log(Level.WARNING, e.toString()); + LOGGER.log(Level.SEVERE, "cannot load/parse metadata: " + fileName, e); + throw new RuntimeException("cannot load/parse metadata: " + fileName, e); } finally { close(in); } @@ -587,7 +600,7 @@ public class PhoneNumberUtil { try { in.close(); } catch (IOException e) { - LOGGER.log(Level.WARNING, e.toString()); + LOGGER.log(Level.WARNING, "error closing input stream (ignored)", e); } } } |