diff --git a/enabler/src/de/schildbach/pte/AbstractHafasProvider.java b/enabler/src/de/schildbach/pte/AbstractHafasProvider.java index 80207b39..2cd7babd 100644 --- a/enabler/src/de/schildbach/pte/AbstractHafasProvider.java +++ b/enabler/src/de/schildbach/pte/AbstractHafasProvider.java @@ -2519,9 +2519,10 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider private Pattern htmlNearbyStationsPattern = Pattern.compile("(.*?)", Pattern.DOTALL); - private final static Pattern P_NEARBY_FINE_COORDS = Pattern + private static final Pattern P_HTML_NEARBY_FINE_COORDS = Pattern .compile("REQMapRoute0\\.Location0\\.X=(-?\\d+)&(?:amp;)?REQMapRoute0\\.Location0\\.Y=(-?\\d+)&"); - private final static Pattern P_NEARBY_FINE_LOCATION = Pattern.compile("[\\?&;]input=(\\d+)&[^\"]*\">([^<]*)<"); + private static final Pattern P_HTML_NEARBY_STATIONS_FINE_LOCATION = Pattern.compile("[\\?&;]input=(\\d+)&[^\"]*\">([^<]*)<"); + private static final Pattern P_HTML_NEARBY_STATIONS_MESSAGES = Pattern.compile("(Ihre Eingabe kann nicht interpretiert werden)"); protected final NearbyLocationsResult htmlNearbyStations(final String uri) throws IOException { @@ -2532,6 +2533,13 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider final Matcher mCoarse = htmlNearbyStationsPattern.matcher(page); + final Matcher mMessage = P_HTML_NEARBY_STATIONS_MESSAGES.matcher(page); + if (mMessage.find()) + { + if (mMessage.group(1) != null) + return new NearbyLocationsResult(null, NearbyLocationsResult.Status.INVALID_ID); + } + while (mCoarse.find()) { final String zebra = mCoarse.group(1); @@ -2540,7 +2548,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider else oldZebra = zebra; - final Matcher mFineLocation = P_NEARBY_FINE_LOCATION.matcher(mCoarse.group(2)); + final Matcher mFineLocation = P_HTML_NEARBY_STATIONS_FINE_LOCATION.matcher(mCoarse.group(2)); if (mFineLocation.find()) { @@ -2549,7 +2557,7 @@ public abstract class AbstractHafasProvider extends AbstractNetworkProvider final String parsedId = mFineLocation.group(1); final String parsedName = ParserUtils.resolveEntities(mFineLocation.group(2)); - final Matcher mFineCoords = P_NEARBY_FINE_COORDS.matcher(mCoarse.group(2)); + final Matcher mFineCoords = P_HTML_NEARBY_FINE_COORDS.matcher(mCoarse.group(2)); if (mFineCoords.find()) {