Added status text to StatusCodeException
bug: issue 8314
Change-Id: I1fb85f4bc7fb9d0687b14fd795d73e12f4fc08d6
diff --git a/user/src/com/google/gwt/rpc/client/impl/RpcCallbackAdapter.java b/user/src/com/google/gwt/rpc/client/impl/RpcCallbackAdapter.java
index d147178..dd51a95 100644
--- a/user/src/com/google/gwt/rpc/client/impl/RpcCallbackAdapter.java
+++ b/user/src/com/google/gwt/rpc/client/impl/RpcCallbackAdapter.java
@@ -80,7 +80,7 @@
statsContext.bytesStat(methodName, encodedResponse.length(), "responseReceived"));
if (statusCode != Response.SC_OK) {
- caught = new StatusCodeException(statusCode, encodedResponse);
+ caught = new StatusCodeException(statusCode, response.getStatusText(), encodedResponse);
} else if (encodedResponse == null) {
// This can happen if the XHR is interrupted by the server dying
caught = new InvocationException("No response payload from " + methodName);
diff --git a/user/src/com/google/gwt/user/client/rpc/StatusCodeException.java b/user/src/com/google/gwt/user/client/rpc/StatusCodeException.java
index e600118..3d84f3d 100644
--- a/user/src/com/google/gwt/user/client/rpc/StatusCodeException.java
+++ b/user/src/com/google/gwt/user/client/rpc/StatusCodeException.java
@@ -23,6 +23,7 @@
*/
public class StatusCodeException extends InvocationException {
private final int statusCode;
+ private final String statusText;
private final String encodedResponse;
/**
@@ -34,6 +35,21 @@
public StatusCodeException(int statusCode, String encodedResponse) {
super(statusCode + " " + encodedResponse);
this.statusCode = statusCode;
+ this.statusText = null;
+ this.encodedResponse = encodedResponse;
+ }
+
+ /**
+ * Construct an exception with the given status code, status text and description.
+ *
+ * @param statusCode the HTTP status code to report
+ * @param statusText the HTTP status text to report
+ * @param encodedResponse the HTTP response message to report
+ */
+ public StatusCodeException(int statusCode, String statusText, String encodedResponse) {
+ super(statusCode + " " + statusText + " " + encodedResponse);
+ this.statusCode = statusCode;
+ this.statusText = statusText;
this.encodedResponse = encodedResponse;
}
@@ -50,4 +66,11 @@
public int getStatusCode() {
return statusCode;
}
+
+ /**
+ * Returns the status text associated with the failed request.
+ */
+ public String getStatusText() {
+ return statusText;
+ }
}
\ No newline at end of file
diff --git a/user/src/com/google/gwt/user/client/rpc/impl/RequestCallbackAdapter.java b/user/src/com/google/gwt/user/client/rpc/impl/RequestCallbackAdapter.java
index 6e75a04..55143e3 100644
--- a/user/src/com/google/gwt/user/client/rpc/impl/RequestCallbackAdapter.java
+++ b/user/src/com/google/gwt/user/client/rpc/impl/RequestCallbackAdapter.java
@@ -206,7 +206,7 @@
statsContext.bytesStat(methodName, encodedResponse.length(), "responseReceived"));
if (statusCode != Response.SC_OK) {
- caught = new StatusCodeException(statusCode, encodedResponse);
+ caught = new StatusCodeException(statusCode, response.getStatusText(), encodedResponse);
} else if (encodedResponse == null) {
// This can happen if the XHR is interrupted by the server dying
caught = new InvocationException("No response payload from " + methodName);
diff --git a/user/test/com/google/gwt/user/client/rpc/RemoteServiceServletTest.java b/user/test/com/google/gwt/user/client/rpc/RemoteServiceServletTest.java
index 880feef..593604d 100644
--- a/user/test/com/google/gwt/user/client/rpc/RemoteServiceServletTest.java
+++ b/user/test/com/google/gwt/user/client/rpc/RemoteServiceServletTest.java
@@ -114,6 +114,7 @@
if (caught instanceof StatusCodeException) {
assertEquals(Response.SC_NOT_FOUND,
((StatusCodeException) caught).getStatusCode());
+ assertEquals("Not Found", ((StatusCodeException) caught).getStatusText());
finishTest();
} else {
TestSetValidator.rethrowException(caught);