When configuring the selfoss URL, if the server response is 301 the app crashes. The 301 response body contains normal html that causes the Jackson parser to throw an exception.
On 301 response the client should follow the redirect without trying to parse the body.
I/Selfoss API(12933): 301 : <html><head><title>301 Moved Permanently</title></head><body bgcolor="white"><center><h1>301 Moved Permanently</h1></center><hr><center>nginx/1.1.19</center></body></html>
E/AndroidRuntime(12933): FATAL EXCEPTION: pool-2-thread-8
E/AndroidRuntime(12933): Process: fr.ydelouis.selfoss.debug, PID: 12933
E/AndroidRuntime(12933): org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: Unexpected character ('<' (code 60)): expected a valid value (number, String, array, object, 'true'
, 'false' or 'null')
E/AndroidRuntime(12933): at [Source: java.io.ByteArrayInputStream@1e056a87; line: 1, column: 2]; nested exception is com.fasterxml.jackson.core.JsonParseException: Unexpected character ('<' (code 60)): expected a
valid value (number, String, array, object, 'true', 'false' or 'null')
E/AndroidRuntime(12933): at [Source: java.io.ByteArrayInputStream@1e056a87; line: 1, column: 2]
E/AndroidRuntime(12933): at org.springframework.http.converter.json.MappingJackson2HttpMessageConverter.readInternal(MappingJackson2HttpMessageConverter.java:126)
E/AndroidRuntime(12933): at org.springframework.http.converter.AbstractHttpMessageConverter.read(AbstractHttpMessageConverter.java:147)
E/AndroidRuntime(12933): at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:76)
E/AndroidRuntime(12933): at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:655)
E/AndroidRuntime(12933): at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:641)
E/AndroidRuntime(12933): at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:484)
E/AndroidRuntime(12933): at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:439)
E/AndroidRuntime(12933): at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:415)
E/AndroidRuntime(12933): at fr.ydelouis.selfoss.rest.SelfossRest_.login(SelfossRest_.java:151)
E/AndroidRuntime(12933): at fr.ydelouis.selfoss.config.model.ConfigValidator.checkUrl(ConfigValidator.java:113)
E/AndroidRuntime(12933): at fr.ydelouis.selfoss.config.model.ConfigValidator.validateUrl(ConfigValidator.java:62)
E/AndroidRuntime(12933): at fr.ydelouis.selfoss.config.ui.ConfigActivity.validateUrl(ConfigActivity.java:110)
E/AndroidRuntime(12933): at fr.ydelouis.selfoss.config.ui.ConfigActivity_.access$401(ConfigActivity_.java:32)
E/AndroidRuntime(12933): at fr.ydelouis.selfoss.config.ui.ConfigActivity_$6.execute(ConfigActivity_.java:199)
E/AndroidRuntime(12933): at org.androidannotations.api.BackgroundExecutor$Task.run(BackgroundExecutor.java:393)
E/AndroidRuntime(12933): at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422)
E/AndroidRuntime(12933): at java.util.concurrent.FutureTask.run(FutureTask.java:237)
E/AndroidRuntime(12933): at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:152)
E/AndroidRuntime(12933): at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:265)
E/AndroidRuntime(12933): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
E/AndroidRuntime(12933): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
E/AndroidRuntime(12933): at java.lang.Thread.run(Thread.java:818)
E/AndroidRuntime(12933): Caused by: com.fasterxml.jackson.core.JsonParseException: Unexpected character ('<' (code 60)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')
E/AndroidRuntime(12933): at [Source: java.io.ByteArrayInputStream@1e056a87; line: 1, column: 2]
E/AndroidRuntime(12933): at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1369)
E/AndroidRuntime(12933): at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:599)
E/AndroidRuntime(12933): at com.fasterxml.jackson.core.base.ParserMinimalBase._reportUnexpectedChar(ParserMinimalBase.java:520)
E/AndroidRuntime(12933): at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._handleUnexpectedValue(UTF8StreamJsonParser.java:2267)
E/AndroidRuntime(12933): at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._nextTokenNotInObject(UTF8StreamJsonParser.java:779)
E/AndroidRuntime(12933): at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.nextToken(UTF8StreamJsonParser.java:665)
E/AndroidRuntime(12933): at com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:2926)
E/AndroidRuntime(12933): at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2873)
E/AndroidRuntime(12933): at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2094)
E/AndroidRuntime(12933): at org.springframework.http.converter.json.MappingJackson2HttpMessageConverter.readInternal(MappingJackson2HttpMessageConverter.java:123)
E/AndroidRuntime(12933): ... 21 more
D/ActivityManager( 1255): New dropbox entry: fr.ydelouis.selfoss.debug, data_app_crash, 24a511c1-e182-46c3-ada8-d739e5c7d9ab
W/ActivityManager( 1255): Force finishing activity fr.ydelouis.selfoss.debug/fr.ydelouis.selfoss.config.ui.ConfigActivity_
When configuring the selfoss URL, if the server response is 301 the app crashes. The 301 response body contains normal html that causes the Jackson parser to throw an exception.
On 301 response the client should follow the redirect without trying to parse the body.