diff options
author | Anton Tananaev <anton.tananaev@gmail.com> | 2015-06-23 12:21:37 +1200 |
---|---|---|
committer | Anton Tananaev <anton.tananaev@gmail.com> | 2015-06-23 12:21:37 +1200 |
commit | ec7b47684c89264f4347f2601a83d602162cb817 (patch) | |
tree | 7c6fafb35abe6990f65e57a64af7c026d46a97e6 /src/org/traccar/geocode/JsonReverseGeocoder.java | |
parent | 7dec68dabcb5690f7c4092a0d0df17d787c9176c (diff) | |
download | traccar-server-ec7b47684c89264f4347f2601a83d602162cb817.tar.gz traccar-server-ec7b47684c89264f4347f2601a83d602162cb817.tar.bz2 traccar-server-ec7b47684c89264f4347f2601a83d602162cb817.zip |
Fix resource leaking in geocoders
Diffstat (limited to 'src/org/traccar/geocode/JsonReverseGeocoder.java')
-rw-r--r-- | src/org/traccar/geocode/JsonReverseGeocoder.java | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/src/org/traccar/geocode/JsonReverseGeocoder.java b/src/org/traccar/geocode/JsonReverseGeocoder.java new file mode 100644 index 000000000..cd7dafae5 --- /dev/null +++ b/src/org/traccar/geocode/JsonReverseGeocoder.java @@ -0,0 +1,58 @@ +/* + * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * + * Licensed 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.traccar.geocode; + +import org.traccar.helper.Log; + +import javax.json.Json; +import javax.json.JsonObject; +import java.io.InputStreamReader; +import java.io.Reader; +import java.net.URL; +import java.net.URLConnection; + +public abstract class JsonReverseGeocoder implements ReverseGeocoder { + + private final String url; + + public JsonReverseGeocoder(String url) { + this.url = url; + } + + @Override + public String getAddress(AddressFormat format, double latitude, double longitude) { + + try { + URLConnection conn = new URL(String.format(url, latitude, longitude)).openConnection(); + Reader reader = new InputStreamReader(conn.getInputStream()); + try { + Address address = parseAddress(Json.createReader(reader).readObject()); + if (address != null) { + return format.format(address); + } + } finally { + reader.close(); + } + } catch(Exception error) { + Log.warning(error); + } + + return null; + } + + protected abstract Address parseAddress(JsonObject json); + +} |