1
0
mirror of https://github.com/owncloud/android-library.git synced 2025-06-07 16:06:08 +00:00

Handle specific forbidden error

This commit is contained in:
davigonz 2017-01-26 10:24:47 +01:00
parent 21121e0189
commit 1aba54d0f9
2 changed files with 26 additions and 25 deletions

View File

@ -38,17 +38,14 @@ import java.io.InputStream;
* @author masensio
*/
public class ForbiddenExceptionParser {
private static final String EXCEPTION_STRING = "OCA\\DAV\\Connector\\Sabre\\Exception\\Forbidden";
// No namespaces
// No namespaces
private static final String ns = null;
// Nodes for XML Parser
private static final String NODE_ERROR = "d:error";
// Nodes for XML Parser
private static final String NODE_ERROR = "d:error";
private static final String NODE_MESSAGE = "s:message";
/**
/**
* Parse is as an forbidden exception
* @param is
* @return reason for forbidden exception
@ -56,8 +53,8 @@ public class ForbiddenExceptionParser {
* @throws IOException
*/
public String parseXMLResponse(InputStream is) throws XmlPullParserException,
IOException {
String errorMessage = "";
IOException {
String errorMessage = "";
try {
// XMLPullParser
@ -68,7 +65,7 @@ public class ForbiddenExceptionParser {
parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
parser.setInput(is, null);
parser.nextTag();
errorMessage = readError(parser);
errorMessage = readError(parser);
} finally {
is.close();
@ -84,7 +81,7 @@ public class ForbiddenExceptionParser {
* @throws IOException
*/
private String readError (XmlPullParser parser) throws XmlPullParserException, IOException {
String message = "";
String errorMessage = "";
parser.require(XmlPullParser.START_TAG, ns , NODE_ERROR);
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
@ -92,14 +89,13 @@ public class ForbiddenExceptionParser {
}
String name = parser.getName();
// read NODE_MESSAGE
if (name.equalsIgnoreCase(NODE_MESSAGE)) {
message = readText(parser);
} else {
if (name.equalsIgnoreCase(NODE_MESSAGE)) {
errorMessage = readText(parser);
} else {
skip(parser);
}
}
return message;
return errorMessage;
}
/**
@ -115,17 +111,17 @@ public class ForbiddenExceptionParser {
int depth = 1;
while (depth != 0) {
switch (parser.next()) {
case XmlPullParser.END_TAG:
depth--;
break;
case XmlPullParser.START_TAG:
depth++;
break;
case XmlPullParser.END_TAG:
depth--;
break;
case XmlPullParser.START_TAG:
depth++;
break;
}
}
}
/**
/**
* Read the text from a node
* @param parser
* @return Text of the node

View File

@ -107,6 +107,7 @@ public class RemoteOperationResult implements Serializable {
LOCAL_STORAGE_NOT_REMOVED,
FORBIDDEN,
SHARE_FORBIDDEN,
SPECIFIC_FORBIDDEN,
OK_REDIRECT_TO_NON_SECURE_CONNECTION,
INVALID_MOVE_INTO_DESCENDANT,
INVALID_COPY_INTO_DESCENDANT,
@ -252,7 +253,11 @@ public class RemoteOperationResult implements Serializable {
InputStream is = new ByteArrayInputStream(bodyResponse.getBytes());
ForbiddenExceptionParser xmlParser = new ForbiddenExceptionParser();
try {
mHttpPhrase = xmlParser.parseXMLResponse(is);
String errorMessage = xmlParser.parseXMLResponse(is);
if (errorMessage != "" && errorMessage != null) {
mCode = ResultCode.SPECIFIC_FORBIDDEN;
mHttpPhrase = errorMessage;
}
} catch (Exception e) {
Log_OC.w(TAG, "Error reading exception from server: " + e.getMessage());
// mCode stays as set in this(success, httpCode, headers)