mirror of
https://gitlab.com/oeffi/public-transport-enabler.git
synced 2025-07-19 16:59:51 +00:00
detect 'session expired' from HTML where XML is expected
This commit is contained in:
parent
d61a230861
commit
12cb01f505
1 changed files with 27 additions and 5 deletions
|
@ -17,8 +17,11 @@
|
||||||
|
|
||||||
package de.schildbach.pte;
|
package de.schildbach.pte;
|
||||||
|
|
||||||
|
import java.io.BufferedInputStream;
|
||||||
|
import java.io.BufferedReader;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
import java.text.DateFormat;
|
import java.text.DateFormat;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -102,6 +105,12 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
|
||||||
{
|
{
|
||||||
return false; // TODO enable earlier querying
|
return false; // TODO enable earlier querying
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString()
|
||||||
|
{
|
||||||
|
return getClass().getName() + "[" + context + "]";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public AbstractEfaProvider()
|
public AbstractEfaProvider()
|
||||||
|
@ -1697,6 +1706,8 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static final Pattern P_SESSION_EXPIRED = Pattern.compile("Your session has expired");
|
||||||
|
|
||||||
public QueryConnectionsResult queryMoreConnections(final QueryConnectionsContext contextObj, final boolean later, final int numConnections)
|
public QueryConnectionsResult queryMoreConnections(final QueryConnectionsContext contextObj, final boolean later, final int numConnections)
|
||||||
throws IOException
|
throws IOException
|
||||||
{
|
{
|
||||||
|
@ -1708,15 +1719,26 @@ public abstract class AbstractEfaProvider extends AbstractNetworkProvider
|
||||||
InputStream is = null;
|
InputStream is = null;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
is = ParserUtils.scrapeInputStream(uri.toString(), null, "NSC_", 3);
|
is = new BufferedInputStream(ParserUtils.scrapeInputStream(uri.toString(), null, "NSC_", 3));
|
||||||
|
is.mark(512);
|
||||||
|
|
||||||
return queryConnections(uri.toString(), is);
|
return queryConnections(uri.toString(), is);
|
||||||
}
|
}
|
||||||
catch (final XmlPullParserException x)
|
catch (final XmlPullParserException x)
|
||||||
{
|
{
|
||||||
if (x.getMessage().startsWith("expected: START_TAG {null}itdRequest"))
|
throw new ParserException(x);
|
||||||
throw new SessionExpiredException();
|
}
|
||||||
else
|
catch (final ProtocolException x) // must be html content
|
||||||
throw new ParserException(x);
|
{
|
||||||
|
is.reset();
|
||||||
|
final BufferedReader reader = new BufferedReader(new InputStreamReader(is));
|
||||||
|
|
||||||
|
String line;
|
||||||
|
while ((line = reader.readLine()) != null)
|
||||||
|
if (P_SESSION_EXPIRED.matcher(line).find())
|
||||||
|
throw new SessionExpiredException();
|
||||||
|
|
||||||
|
throw x;
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue