RestService#isSupported(ResourceContext)
This patch changes the RestService interface to accept
a ResourceContext now instead of just the media type,
since it may depend on other requests paramaters, e.g.
the requested action, whether the media type is
be supported.
Change-Id: I9b8c78396b264f6c019d63542a027c1fb88cc109
Signed-off-by: Michael Ochmann <michael.ochmann@sap.com>
diff --git a/org.eclipse.skalli.api/src/main/java/org/eclipse/skalli/services/extension/rest/ErrorRepresentation.java b/org.eclipse.skalli.api/src/main/java/org/eclipse/skalli/services/extension/rest/ErrorRepresentation.java
index 8bba1b5..e440aec 100644
--- a/org.eclipse.skalli.api/src/main/java/org/eclipse/skalli/services/extension/rest/ErrorRepresentation.java
+++ b/org.eclipse.skalli.api/src/main/java/org/eclipse/skalli/services/extension/rest/ErrorRepresentation.java
@@ -78,7 +78,7 @@
public void write(Writer writer) throws IOException {
RestService restService = Services.getRequiredService(RestService.class);
MediaType mediaType = context.getMediaType();
- if (!restService.isSupportedMediaType(mediaType)) {
+ if (!restService.isSupported(context)) {
throw new IOException(MessageFormat.format("Unsupported media type ''{0}''", mediaType));
}
RestWriter restWriter = restService.getRestWriter(writer, context);
diff --git a/org.eclipse.skalli.api/src/main/java/org/eclipse/skalli/services/extension/rest/ResourceRepresentation.java b/org.eclipse.skalli.api/src/main/java/org/eclipse/skalli/services/extension/rest/ResourceRepresentation.java
index 6433357..efa387d 100644
--- a/org.eclipse.skalli.api/src/main/java/org/eclipse/skalli/services/extension/rest/ResourceRepresentation.java
+++ b/org.eclipse.skalli.api/src/main/java/org/eclipse/skalli/services/extension/rest/ResourceRepresentation.java
@@ -131,7 +131,7 @@
} else if (converter.getConversionClass().isAssignableFrom(object.getClass())) {
RestService restService = Services.getRequiredService(RestService.class);
MediaType mediaType = context.getMediaType();
- if (!restService.isSupportedMediaType(mediaType)) {
+ if (!restService.isSupported(context)) {
throw new IOException(MessageFormat.format("Unsupported media type ''{0}''", mediaType));
}
RestWriter restWriter = restService.getRestWriter(writer, context);
diff --git a/org.eclipse.skalli.api/src/main/java/org/eclipse/skalli/services/rest/RestService.java b/org.eclipse.skalli.api/src/main/java/org/eclipse/skalli/services/rest/RestService.java
index eee7c09..1b3c265 100644
--- a/org.eclipse.skalli.api/src/main/java/org/eclipse/skalli/services/rest/RestService.java
+++ b/org.eclipse.skalli.api/src/main/java/org/eclipse/skalli/services/rest/RestService.java
@@ -12,8 +12,6 @@
import java.io.Writer;
-import org.restlet.data.MediaType;
-
/**
* Interface for a service that provides writers for REST resources.
*/
@@ -21,11 +19,12 @@
/**
* Returns <code>true</code>, if there is a suitable REST writer available
- * for the given media type.
+ * based on the HTTP action and media type found in the given request context.
*
- * @param mediaType the media type, for which to retrieve a REST writer
+ * @param context the request context providing the source/target media type,
+ * HTTP action and additional request parameters.
*/
- public boolean isSupportedMediaType(MediaType mediaType);
+ public boolean isSupported(RequestContext context);
/**
* Retrieves a REST writer for the given media type.
diff --git a/org.eclipse.skalli.core/src/main/java/org/eclipse/skalli/core/rest/RestComponent.java b/org.eclipse.skalli.core/src/main/java/org/eclipse/skalli/core/rest/RestComponent.java
index 1437630..d569cb5 100644
--- a/org.eclipse.skalli.core/src/main/java/org/eclipse/skalli/core/rest/RestComponent.java
+++ b/org.eclipse.skalli.core/src/main/java/org/eclipse/skalli/core/rest/RestComponent.java
@@ -24,7 +24,8 @@
public class RestComponent implements RestService {
@Override
- public boolean isSupportedMediaType(MediaType mediaType) {
+ public boolean isSupported(RequestContext context) {
+ MediaType mediaType = context.getMediaType();
return MediaType.TEXT_XML.equals(mediaType) || MediaType.APPLICATION_JSON.equals(mediaType);
}