Ticket #12265: 12265.patch

File 12265.patch, 10.5 KB (added by simon04, 6 years ago)
  • src/org/openstreetmap/josm/data/cache/JCSCachedTileLoaderJob.java

    diff --git a/src/org/openstreetmap/josm/data/cache/JCSCachedTileLoaderJob.java b/src/org/openstreetmap/josm/data/cache/JCSCachedTileLoaderJob.java
    index f107e18..eca10e5 100644
    a b  
    33
    44import java.io.FileNotFoundException;
    55import java.io.IOException;
    6 import java.net.HttpURLConnection;
    76import java.net.URL;
    8 import java.net.URLConnection;
    97import java.util.HashSet;
    108import java.util.List;
    119import java.util.Map;
    12 import java.util.Map.Entry;
    1310import java.util.Random;
    1411import java.util.Set;
    1512import java.util.concurrent.ConcurrentHashMap;
     
    2623import org.openstreetmap.josm.Main;
    2724import org.openstreetmap.josm.data.cache.ICachedLoaderListener.LoadResult;
    2825import org.openstreetmap.josm.data.preferences.IntegerProperty;
     26import org.openstreetmap.josm.tools.HttpClient;
    2927import org.openstreetmap.josm.tools.Utils;
    3028
    3129/**
    private boolean loadObject() { 
    310308                return true;
    311309            }
    312310
    313             HttpURLConnection urlConn = getURLConnection(getUrl(), true);
     311            // TODO use #getURLConnection() instead?
     312            final HttpClient request = HttpClient.create(getUrl()).useCache(false);
    314313
    315314            if (isObjectLoadable()  &&
    316315                    (now - attributes.getLastModification()) <= ABSOLUTE_EXPIRE_TIME_LIMIT) {
    317                 urlConn.setIfModifiedSince(attributes.getLastModification());
     316                request.setIfModifiedSince(attributes.getLastModification());
    318317            }
    319318            if (isObjectLoadable() && attributes.getEtag() != null) {
    320                 urlConn.addRequestProperty("If-None-Match", attributes.getEtag());
     319                request.setHeader("If-None-Match", attributes.getEtag());
    321320            }
    322321
    323             log.log(Level.INFO, "GET {0} -> {1}", new Object[]{getUrl(), urlConn.getResponseCode()});
     322            final HttpClient.Response urlConn = request.connect();
    324323
    325             // follow redirects
    326             for (int i = 0; i < 5; i++) {
    327                 if (urlConn.getResponseCode() == 302) {
    328                     urlConn = getURLConnection(new URL(urlConn.getHeaderField("Location")), true);
    329                 } else {
    330                     break;
    331                 }
    332             }
    333             if (urlConn.getResponseCode() == 304) {
     324            if (urlConn.getResponseCode() == 302) {
    334325                // If isModifiedSince or If-None-Match has been set
    335326                // and the server answers with a HTTP 304 = "Not Modified"
    336327                log.log(Level.FINE, "JCS - IfModifiedSince/Etag test: local version is up to date: {0}", getUrl());
    337328                return true;
    338             } else if (isObjectLoadable() // we have an object in cache, but we haven't received 304 resposne code
     329            } else if (isObjectLoadable() // we have an object in cache, but we haven't received 304 response code
    339330                    && (
    340                             (attributes.getEtag() != null && attributes.getEtag().equals(urlConn.getRequestProperty("ETag"))) ||
     331                            (attributes.getEtag() != null && attributes.getEtag().equals(urlConn.getHeaderField("ETag"))) ||
    341332                            attributes.getLastModification() == urlConn.getLastModified())
    342333                    ) {
    343334                // we sent ETag or If-Modified-Since, but didn't get 304 response code
    344335                // for further requests - use HEAD
    345336                String serverKey = getServerKey();
    346                 log.log(Level.INFO, "JCS - Host: {0} found not to return 304 codes for If-Modifed-Since or If-None-Match headers",
     337                log.log(Level.INFO, "JCS - Host: {0} found not to return 304 codes for If-Modified-Since or If-None-Match headers",
    347338                        serverKey);
    348339                useHead.put(serverKey, Boolean.TRUE);
    349340            }
    private boolean loadObject() { 
    360351                attributes.setResponseCode(urlConn.getResponseCode());
    361352                byte[] raw;
    362353                if (urlConn.getResponseCode() == 200) {
    363                     raw = Utils.readBytesFromStream(urlConn.getInputStream());
     354                    raw = Utils.readBytesFromStream(urlConn.getContent());
    364355                } else {
    365356                    raw = new byte[]{};
    366357                }
    protected boolean isResponseLoadable(Map<String, List<String>> headerFields, int 
    433424
    434425    protected abstract V createCacheEntry(byte[] content);
    435426
    436     protected CacheEntryAttributes parseHeaders(URLConnection urlConn) {
     427    protected CacheEntryAttributes parseHeaders(HttpClient.Response urlConn) {
    437428        CacheEntryAttributes ret = new CacheEntryAttributes();
    438429
    439430        Long lng = urlConn.getExpiration();
    protected CacheEntryAttributes parseHeaders(URLConnection urlConn) { 
    460451        ret.setLastModification(now);
    461452        ret.setEtag(urlConn.getHeaderField("ETag"));
    462453
    463         if (Main.isDebugEnabled()) {
    464             for (Entry<String, List<String>> header: urlConn.getHeaderFields().entrySet()) {
    465                 log.log(Level.FINE, "Response header - {0}: {1}", new Object[]{header.getKey(), header.getValue()});
    466             }
    467         }
    468 
    469454        return ret;
    470455    }
    471456
    472     private HttpURLConnection getURLConnection(URL url, boolean noCache) throws IOException {
    473         HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
    474         urlConn.setRequestProperty("Accept", "text/html, image/png, image/jpeg, image/gif, */*");
     457    private HttpClient getURLConnection(URL url, boolean noCache, String requestMethod) throws IOException {
     458        final HttpClient urlConn = HttpClient.create(url, requestMethod);
     459        urlConn.setAccept("text/html, image/png, image/jpeg, image/gif, */*");
    475460        urlConn.setReadTimeout(readTimeout); // 30 seconds read timeout
    476461        urlConn.setConnectTimeout(connectTimeout);
    477462        if (headers != null) {
    478             for (Map.Entry<String, String> e: headers.entrySet()) {
    479                 urlConn.setRequestProperty(e.getKey(), e.getValue());
    480             }
     463            urlConn.setHeaders(headers);
    481464        }
    482465
    483466        if (force || noCache) {
    484             urlConn.setUseCaches(false);
     467            urlConn.useCache(false);
    485468        }
    486469        return urlConn;
    487470    }
    488471
    489472    private boolean isCacheValidUsingHead() throws IOException {
    490         HttpURLConnection urlConn = getURLConnection(getUrl(), false);
    491         urlConn.setRequestMethod("HEAD");
    492         for (int i = 0; i < 5; i++) {
    493             if (urlConn.getResponseCode() == 302) {
    494                 urlConn = getURLConnection(new URL(urlConn.getHeaderField("Location")), false);
    495             } else {
    496                 break;
    497             }
    498         }
     473        final HttpClient.Response urlConn = getURLConnection(getUrl(), false, "HEAD").connect();
    499474        long lastModified = urlConn.getLastModified();
    500         return (attributes.getEtag() != null && attributes.getEtag().equals(urlConn.getRequestProperty("ETag"))) ||
     475        return (attributes.getEtag() != null && attributes.getEtag().equals(urlConn.getHeaderField("ETag"))) ||
    501476                (lastModified != 0 && lastModified <= attributes.getLastModification());
    502477    }
    503478
  • src/org/openstreetmap/josm/data/imagery/TMSCachedTileLoaderJob.java

    diff --git a/src/org/openstreetmap/josm/data/imagery/TMSCachedTileLoaderJob.java b/src/org/openstreetmap/josm/data/imagery/TMSCachedTileLoaderJob.java
    index 64c933c..631b5ef 100644
    a b  
    66import java.io.ByteArrayInputStream;
    77import java.io.IOException;
    88import java.net.URL;
    9 import java.net.URLConnection;
    109import java.util.HashSet;
    1110import java.util.List;
    1211import java.util.Map;
     
    3029import org.openstreetmap.josm.data.cache.CacheEntryAttributes;
    3130import org.openstreetmap.josm.data.cache.ICachedLoaderListener;
    3231import org.openstreetmap.josm.data.cache.JCSCachedTileLoaderJob;
     32import org.openstreetmap.josm.tools.HttpClient;
    3333
    3434/**
    3535 * @author Wiktor Niesiobędzki
    public void submit() { 
    239239    }
    240240
    241241    @Override
    242     protected CacheEntryAttributes parseHeaders(URLConnection urlConn) {
     242    protected CacheEntryAttributes parseHeaders(HttpClient.Response urlConn) {
    243243        CacheEntryAttributes ret = super.parseHeaders(urlConn);
    244244        // keep the expiration time between MINIMUM_EXPIRES and MAXIMUM_EXPIRES, so we will cache the tiles
    245245        // at least for some short period of time, but not too long
  • src/org/openstreetmap/josm/tools/HttpClient.java

    diff --git a/src/org/openstreetmap/josm/tools/HttpClient.java b/src/org/openstreetmap/josm/tools/HttpClient.java
    index 300c2b8..31ea2ba 100644
    a b public String getResponseMessage() { 
    309309        /**
    310310         * Returns the {@code Content-Encoding} header.
    311311         * @return {@code Content-Encoding} HTTP header
     312         * @see HttpURLConnection#getContentEncoding()
    312313         */
    313314        public String getContentEncoding() {
    314315            return connection.getContentEncoding();
    public String getContentType() { 
    323324        }
    324325
    325326        /**
     327         * Returns the {@code Expire} header.
     328         * @return {@code Expire} HTTP header
     329         * @see HttpURLConnection#getExpiration()
     330         */
     331        public long getExpiration() {
     332            return connection.getExpiration();
     333        }
     334
     335        /**
     336         * Returns the {@code Last-Modified} header.
     337         * @return {@code Last-Modified} HTTP header
     338         * @see HttpURLConnection#getLastModified()
     339         */
     340        public long getLastModified() {
     341            return connection.getLastModified();
     342        }
     343
     344        /**
    326345         * Returns the {@code Content-Length} header.
    327346         * @return {@code Content-Length} HTTP header
     347         * @see HttpURLConnection#getContentLengthLong()
    328348         */
    329349        public long getContentLength() {
    330350            return connection.getContentLengthLong();
    public String getHeaderField(String name) { 
    353373        }
    354374
    355375        /**
     376         * Returns an unmodifiable Map mapping header keys to a List of header values.
     377         * @return unmodifiable Map mapping header keys to a List of header values
     378         * @see HttpURLConnection#getHeaderFields()
     379         */
     380        public Map<String, List<String>> getHeaderFields() {
     381            return connection.getHeaderFields();
     382        }
     383
     384        /**
    356385         * @see HttpURLConnection#disconnect()
    357386         */
    358387        public void disconnect() {