modules/enterprise/gui/rest-war/src/main/webapp/index.html
| 4 -
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/CustomExceptionMapper.java
| 36 +++++++++-
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/domain/RHQErrorWrapper.java
| 28 +++++++
3 files changed, 64 insertions(+), 4 deletions(-)
New commits:
commit 89027fe4e28299fbe408617ff830701c63ec00e5
Author: Heiko W. Rupp <hwr(a)redhat.com>
Date: Tue Jan 3 14:01:32 2012 +0100
BZ 771216 - return messages accompanying error codes with the return type the client
has requested.
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/CustomExceptionMapper.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/CustomExceptionMapper.java
index 58ccf30..fe23ad2 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/CustomExceptionMapper.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/CustomExceptionMapper.java
@@ -18,12 +18,16 @@
*/
package org.rhq.enterprise.server.rest;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;
import org.rhq.enterprise.server.authz.PermissionException;
import org.rhq.enterprise.server.resource.ResourceNotFoundException;
+import org.rhq.enterprise.server.rest.domain.RHQErrorWrapper;
/**
* Map a NotFoundException to a HTTP response with respective error message
@@ -32,10 +36,14 @@ import org.rhq.enterprise.server.resource.ResourceNotFoundException;
@Provider
public class CustomExceptionMapper implements ExceptionMapper<Exception> {
+ @Context
+ HttpHeaders httpHeaders;
@Override
public Response toResponse(Exception e) {
+
+
Throwable cause = e.getCause();
Response.ResponseBuilder builder;
if (cause !=null) {
@@ -52,7 +60,8 @@ public class CustomExceptionMapper implements
ExceptionMapper<Exception> {
status = Response.Status.SERVICE_UNAVAILABLE;
builder = Response.status(status);
- builder.entity(cause.getMessage());
+ String message = cause.getMessage();
+ wrapMessage(builder, message);
}
else {
if (e instanceof PermissionException) {
@@ -60,9 +69,30 @@ public class CustomExceptionMapper implements
ExceptionMapper<Exception> {
} else {
builder = Response.status(Response.Status.INTERNAL_SERVER_ERROR);
}
- if (e.getMessage()!=null)
- builder.entity(e.getMessage());
+ if (e.getMessage()!=null) {
+ wrapMessage(builder,e.getMessage());
+ }
}
return builder.build();
}
+
+ /**
+ * Wrap the passed message according to the mediaType from the HttpHeader
+ * @param builder
+ * @param message
+ */
+ private void wrapMessage(Response.ResponseBuilder builder, String message) {
+
+ MediaType mediaType = httpHeaders.getAcceptableMediaTypes().get(0);
+
+ if (mediaType.equals(MediaType.TEXT_PLAIN_TYPE)) {
+ builder.entity(message);
+ } else if (mediaType.equals(MediaType.TEXT_HTML_TYPE)) {
+
builder.entity("<html><body><h1>Error</h1><h2>" +
message + "</h2></body></html>");
+ } else {
+ RHQErrorWrapper error = new RHQErrorWrapper(message);
+ builder.entity(error);
+ }
+ builder.type(mediaType);
+ }
}
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/domain/RHQErrorWrapper.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/domain/RHQErrorWrapper.java
new file mode 100644
index 0000000..f62b1bc
--- /dev/null
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/domain/RHQErrorWrapper.java
@@ -0,0 +1,28 @@
+package org.rhq.enterprise.server.rest.domain;
+
+import javax.xml.bind.annotation.XmlRootElement;
+
+/**
+ * Wrapper for Exceptions
+ * @author Heiko W. Rupp
+ */
+@XmlRootElement
+public class RHQErrorWrapper {
+
+ private String message;
+
+ public RHQErrorWrapper(String message) {
+ this.message = message;
+ }
+
+ public RHQErrorWrapper() {
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+}
commit 3fea0b257d0598b7beeaa2bc3982b2d07def1887
Author: Heiko W. Rupp <hwr(a)redhat.com>
Date: Mon Jan 2 22:05:49 2012 +0100
Mention RHQ samples project.
diff --git a/modules/enterprise/gui/rest-war/src/main/webapp/index.html
b/modules/enterprise/gui/rest-war/src/main/webapp/index.html
index 76aa220..9e96d76 100644
--- a/modules/enterprise/gui/rest-war/src/main/webapp/index.html
+++ b/modules/enterprise/gui/rest-war/src/main/webapp/index.html
@@ -5,7 +5,9 @@
Join us in making it great by providing feedback and contributions of code and examples
that use the api.
-See also <a
href="http://rhq-project.org/display/RHQ/Design-REST">the RHQ
wiki</a> and
+See also <a
href="http://rhq-project.org/display/RHQ/Design-REST">the RHQ
wiki</a> on REST.
+Check out the <a
href="https://github.com/rhq-project/samples/tree/master/rest-api&qu...
samples project</a>
+for samples in various programming languages and
<a
href="https://github.com/pilhuhn/RHQpocket">RHQpocket</a> as an
example of a
mobile client (Android) of the API.
<ul>