From 194c6295e40adc7e27873d103c777f0a22d3cab6 Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Sun, 8 Jul 2012 13:17:16 +0200 Subject: [PATCH] fixed request encoding when autocompleting hafas --- .../src/de/schildbach/pte/AbstractEfaProvider.java | 4 ++-- .../de/schildbach/pte/AbstractHafasProvider.java | 13 +++++++------ enabler/src/de/schildbach/pte/util/ParserUtils.java | 11 +++++++---- .../pte/live/EireannProviderLiveTest.java | 12 ++++++++++-- .../schildbach/pte/live/NasaProviderLiveTest.java | 8 ++++++++ .../schildbach/pte/live/OebbProviderLiveTest.java | 10 +++++++++- .../de/schildbach/pte/live/PlProviderLiveTest.java | 8 ++++++++ .../de/schildbach/pte/live/RmvProviderLiveTest.java | 8 ++++++++ .../de/schildbach/pte/live/SbbProviderLiveTest.java | 12 ++++++++++-- .../de/schildbach/pte/live/ShProviderLiveTest.java | 8 ++++++++ .../de/schildbach/pte/live/VbbProviderLiveTest.java | 8 ++++++++ 11 files changed, 85 insertions(+), 17 deletions(-) diff --git a/enabler/src/de/schildbach/pte/AbstractEfaProvider.java b/enabler/src/de/schildbach/pte/AbstractEfaProvider.java index 0ce99b75..630a537a 100644 --- a/enabler/src/de/schildbach/pte/AbstractEfaProvider.java +++ b/enabler/src/de/schildbach/pte/AbstractEfaProvider.java @@ -1695,7 +1695,7 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider InputStream is = null; try { - is = ParserUtils.scrapeInputStream(uri, null, "NSC_", 3); + is = ParserUtils.scrapeInputStream(uri, null, null, "NSC_", 3); return queryConnections(uri, is); } catch (final XmlPullParserException x) @@ -1726,7 +1726,7 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider InputStream is = null; try { - is = new BufferedInputStream(ParserUtils.scrapeInputStream(uri.toString(), null, "NSC_", 3)); + is = new BufferedInputStream(ParserUtils.scrapeInputStream(uri.toString(), null, null, "NSC_", 3)); is.mark(512); return queryConnections(uri.toString(), is); diff --git a/enabler/src/de/schildbach/pte/AbstractHafasProvider.java b/enabler/src/de/schildbach/pte/AbstractHafasProvider.java index 9cfd183a..ada84349 100644 --- a/enabler/src/de/schildbach/pte/AbstractHafasProvider.java +++ b/enabler/src/de/schildbach/pte/AbstractHafasProvider.java @@ -155,9 +155,9 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider return new String[] { null, name }; } - private final String wrap(final String request) + private final String wrap(final String request, final Charset encoding) { - return "" // + return "" // + "" // + request // + ""; @@ -246,7 +246,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider try { - reader = new InputStreamReader(ParserUtils.scrapeInputStream(apiUri, wrap(request), null, 3), ISO_8859_1); + reader = new InputStreamReader(ParserUtils.scrapeInputStream(apiUri, wrap(request, null), null, null, 3), ISO_8859_1); final List results = new ArrayList(); @@ -451,14 +451,15 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider protected final List xmlMLcReq(final CharSequence constraint) throws IOException { final String request = ""; + final String wrappedRequest = wrap(request, xmlMlcResEncoding); - // ParserUtils.printXml(ParserUtils.scrape(apiUri, true, wrap(request), mlcResEncoding, false)); + // ParserUtils.printXml(ParserUtils.scrape(apiUri, true, wrappedRequest, xmlMlcResEncoding, null)); Reader reader = null; try { - reader = new InputStreamReader(ParserUtils.scrapeInputStream(apiUri, wrap(request), null, 3), xmlMlcResEncoding); + reader = new InputStreamReader(ParserUtils.scrapeInputStream(apiUri, wrappedRequest, xmlMlcResEncoding, null, 3), xmlMlcResEncoding); final XmlPullParserFactory factory = XmlPullParserFactory.newInstance(System.getProperty(XmlPullParserFactory.PROPERTY_NAME), null); final XmlPullParser pp = factory.newPullParser(); @@ -838,7 +839,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider try { - reader = new InputStreamReader(ParserUtils.scrapeInputStream(apiUri, wrap(request), null, 3), ISO_8859_1); + reader = new InputStreamReader(ParserUtils.scrapeInputStream(apiUri, wrap(request, null), null, null, 3), ISO_8859_1); final XmlPullParserFactory factory = XmlPullParserFactory.newInstance(System.getProperty(XmlPullParserFactory.PROPERTY_NAME), null); final XmlPullParser pp = factory.newPullParser(); diff --git a/enabler/src/de/schildbach/pte/util/ParserUtils.java b/enabler/src/de/schildbach/pte/util/ParserUtils.java index b96c31df..b364028c 100644 --- a/enabler/src/de/schildbach/pte/util/ParserUtils.java +++ b/enabler/src/de/schildbach/pte/util/ParserUtils.java @@ -195,12 +195,15 @@ public final class ParserUtils public static final InputStream scrapeInputStream(final String url) throws IOException { - return scrapeInputStream(url, null, null, 3); + return scrapeInputStream(url, null, null, null, 3); } - public static final InputStream scrapeInputStream(final String urlStr, final String postRequest, final String sessionCookieName, int tries) - throws IOException + public static final InputStream scrapeInputStream(final String urlStr, final String postRequest, Charset requestEncoding, + final String sessionCookieName, int tries) throws IOException { + if (requestEncoding == null) + requestEncoding = SCRAPE_DEFAULT_ENCODING; + while (true) { final URL url = new URL(urlStr); @@ -224,7 +227,7 @@ public final class ParserUtils connection.addRequestProperty("Content-Type", "application/x-www-form-urlencoded"); connection.addRequestProperty("Content-Length", Integer.toString(postRequest.length())); - final Writer writer = new OutputStreamWriter(connection.getOutputStream(), SCRAPE_DEFAULT_ENCODING); + final Writer writer = new OutputStreamWriter(connection.getOutputStream(), requestEncoding); writer.write(postRequest); writer.close(); } diff --git a/enabler/test/de/schildbach/pte/live/EireannProviderLiveTest.java b/enabler/test/de/schildbach/pte/live/EireannProviderLiveTest.java index dc275f54..f2907dee 100644 --- a/enabler/test/de/schildbach/pte/live/EireannProviderLiveTest.java +++ b/enabler/test/de/schildbach/pte/live/EireannProviderLiveTest.java @@ -66,7 +66,7 @@ public class EireannProviderLiveTest extends AbstractProviderLiveTest } @Test - public void autoComplete() throws Exception + public void autocomplete() throws Exception { final List autocompletes = provider.autocompleteStations("Dublin"); @@ -74,7 +74,15 @@ public class EireannProviderLiveTest extends AbstractProviderLiveTest } @Test - public void autoCompleteAddress() throws Exception + public void autocompleteUmlaut() throws Exception + { + final List autocompletes = provider.autocompleteStations("Busáras"); + + print(autocompletes); + } + + @Test + public void autocompleteAddress() throws Exception { final List autocompletes = provider.autocompleteStations("Dorfstrasse 10, Dällikon, Schweiz"); diff --git a/enabler/test/de/schildbach/pte/live/NasaProviderLiveTest.java b/enabler/test/de/schildbach/pte/live/NasaProviderLiveTest.java index 14d2da2b..8f79cd9a 100644 --- a/enabler/test/de/schildbach/pte/live/NasaProviderLiveTest.java +++ b/enabler/test/de/schildbach/pte/live/NasaProviderLiveTest.java @@ -65,6 +65,14 @@ public class NasaProviderLiveTest extends AbstractProviderLiveTest print(autocompletes); } + @Test + public void autocompleteUmlaut() throws Exception + { + final List autocompletes = provider.autocompleteStations("Höhle"); + + print(autocompletes); + } + @Test public void shortConnection() throws Exception { diff --git a/enabler/test/de/schildbach/pte/live/OebbProviderLiveTest.java b/enabler/test/de/schildbach/pte/live/OebbProviderLiveTest.java index 970504c5..72badab0 100644 --- a/enabler/test/de/schildbach/pte/live/OebbProviderLiveTest.java +++ b/enabler/test/de/schildbach/pte/live/OebbProviderLiveTest.java @@ -73,7 +73,7 @@ public class OebbProviderLiveTest extends AbstractProviderLiveTest } @Test - public void autoComplete() throws Exception + public void autocomplete() throws Exception { final List autocompletes = provider.autocompleteStations("Wien"); @@ -81,6 +81,14 @@ public class OebbProviderLiveTest extends AbstractProviderLiveTest assertTrue(autocompletes.size() > 0); } + @Test + public void autocompleteUmlaut() throws Exception + { + final List autocompletes = provider.autocompleteStations("Obirhöhle"); + + print(autocompletes); + } + @Test public void shortConnection() throws Exception { diff --git a/enabler/test/de/schildbach/pte/live/PlProviderLiveTest.java b/enabler/test/de/schildbach/pte/live/PlProviderLiveTest.java index 6602697f..cc779839 100644 --- a/enabler/test/de/schildbach/pte/live/PlProviderLiveTest.java +++ b/enabler/test/de/schildbach/pte/live/PlProviderLiveTest.java @@ -73,6 +73,14 @@ public class PlProviderLiveTest extends AbstractProviderLiveTest print(autocompletes); } + @Test + public void autocompleteUmlaut() throws Exception + { + final List autocompletes = provider.autocompleteStations("Służewiec"); + + print(autocompletes); + } + @Test public void shortConnection() throws Exception { diff --git a/enabler/test/de/schildbach/pte/live/RmvProviderLiveTest.java b/enabler/test/de/schildbach/pte/live/RmvProviderLiveTest.java index 3a76e27f..ff9dce2a 100644 --- a/enabler/test/de/schildbach/pte/live/RmvProviderLiveTest.java +++ b/enabler/test/de/schildbach/pte/live/RmvProviderLiveTest.java @@ -73,6 +73,14 @@ public class RmvProviderLiveTest extends AbstractProviderLiveTest print(autocompletes); } + @Test + public void autocompleteUmlaut() throws Exception + { + final List autocompletes = provider.autocompleteStations("Wächtersbach"); + + print(autocompletes); + } + @Test public void shortConnection() throws Exception { diff --git a/enabler/test/de/schildbach/pte/live/SbbProviderLiveTest.java b/enabler/test/de/schildbach/pte/live/SbbProviderLiveTest.java index 82ff1f09..297ca0c0 100644 --- a/enabler/test/de/schildbach/pte/live/SbbProviderLiveTest.java +++ b/enabler/test/de/schildbach/pte/live/SbbProviderLiveTest.java @@ -66,7 +66,7 @@ public class SbbProviderLiveTest extends AbstractProviderLiveTest } @Test - public void autoComplete() throws Exception + public void autocomplete() throws Exception { final List autocompletes = provider.autocompleteStations("haupt"); @@ -74,7 +74,15 @@ public class SbbProviderLiveTest extends AbstractProviderLiveTest } @Test - public void autoCompleteAddress() throws Exception + public void autocompleteUmlaut() throws Exception + { + final List autocompletes = provider.autocompleteStations("Höhle"); + + print(autocompletes); + } + + @Test + public void autocompleteAddress() throws Exception { final List autocompletes = provider.autocompleteStations("Dorfstrasse 10, Dällikon, Schweiz"); diff --git a/enabler/test/de/schildbach/pte/live/ShProviderLiveTest.java b/enabler/test/de/schildbach/pte/live/ShProviderLiveTest.java index 426d1048..4ce2e78b 100644 --- a/enabler/test/de/schildbach/pte/live/ShProviderLiveTest.java +++ b/enabler/test/de/schildbach/pte/live/ShProviderLiveTest.java @@ -73,6 +73,14 @@ public class ShProviderLiveTest extends AbstractProviderLiveTest print(autocompletes); } + @Test + public void autocompleteUmlaut() throws Exception + { + final List autocompletes = provider.autocompleteStations("Achterüm"); + + print(autocompletes); + } + @Test public void shortConnection() throws Exception { diff --git a/enabler/test/de/schildbach/pte/live/VbbProviderLiveTest.java b/enabler/test/de/schildbach/pte/live/VbbProviderLiveTest.java index d6f1eec3..7e133e4d 100644 --- a/enabler/test/de/schildbach/pte/live/VbbProviderLiveTest.java +++ b/enabler/test/de/schildbach/pte/live/VbbProviderLiveTest.java @@ -65,6 +65,14 @@ public class VbbProviderLiveTest extends AbstractProviderLiveTest print(result); } + @Test + public void autocompleteUmlaut() throws Exception + { + final List autocompletes = provider.autocompleteStations("Hedwigshöhe"); + + print(autocompletes); + } + @Test public void autocompleteIncomplete() throws Exception {