summaryrefslogtreecommitdiffstats
path: root/sca-java-2.x/trunk/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/TuscanyRESTServlet.java
diff options
context:
space:
mode:
authorlresende <lresende@13f79535-47bb-0310-9956-ffa450edef68>2011-10-07 02:13:40 +0000
committerlresende <lresende@13f79535-47bb-0310-9956-ffa450edef68>2011-10-07 02:13:40 +0000
commitab778d147b1ce734484c13ece3ddb1d1ff464e42 (patch)
treebded6a93fe99c964dea09fd98283f9f6b95eb205 /sca-java-2.x/trunk/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/TuscanyRESTServlet.java
parentabd09eeffe29cfadddb46f973954da76f97436f1 (diff)
Adding support for ?wadl to resources exposed trough the rest binding
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1179923 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'sca-java-2.x/trunk/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/TuscanyRESTServlet.java')
-rw-r--r--sca-java-2.x/trunk/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/TuscanyRESTServlet.java67
1 files changed, 65 insertions, 2 deletions
diff --git a/sca-java-2.x/trunk/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/TuscanyRESTServlet.java b/sca-java-2.x/trunk/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/TuscanyRESTServlet.java
index 266d038b3b..e47f5243f9 100644
--- a/sca-java-2.x/trunk/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/TuscanyRESTServlet.java
+++ b/sca-java-2.x/trunk/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/provider/TuscanyRESTServlet.java
@@ -20,11 +20,14 @@
package org.apache.tuscany.sca.binding.rest.provider;
import java.io.IOException;
+import java.lang.annotation.Annotation;
import java.util.Calendar;
import java.util.Date;
import java.util.Enumeration;
import java.util.GregorianCalendar;
+import java.util.HashSet;
import java.util.Properties;
+import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -33,6 +36,8 @@ import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.ext.MessageBodyWriter;
import org.apache.tuscany.sca.assembly.Binding;
import org.apache.tuscany.sca.binding.rest.RESTBinding;
@@ -43,8 +48,10 @@ import org.apache.tuscany.sca.common.http.ThreadHTTPContext;
import org.apache.tuscany.sca.core.ExtensionPointRegistry;
import org.apache.tuscany.sca.extensibility.ClassLoaderContext;
import org.apache.wink.common.internal.registry.ProvidersRegistry;
+import org.apache.wink.common.model.wadl.WADLGenerator;
import org.apache.wink.server.handlers.HandlersChain;
import org.apache.wink.server.handlers.MessageContext;
+import org.apache.wink.server.handlers.RequestHandler;
import org.apache.wink.server.handlers.ResponseHandler;
import org.apache.wink.server.internal.DeploymentConfiguration;
import org.apache.wink.server.internal.servlet.RestServlet;
@@ -53,9 +60,13 @@ import org.apache.wink.server.internal.servlet.RestServlet;
*
*/
public class TuscanyRESTServlet extends RestServlet {
+ private static final long serialVersionUID = 89997233133964915L;
+
private static final Logger logger = Logger.getLogger(TuscanyRESTServlet.class.getName());
+
+ private static final Annotation[] annotations = new Annotation[0];
- private static final long serialVersionUID = 89997233133964915L;
+
private ExtensionPointRegistry registry;
private RESTBinding binding;
private Class<?> resourceClass;
@@ -89,7 +100,14 @@ public class TuscanyRESTServlet extends RestServlet {
try {
//store in thread local
ThreadHTTPContext.setHTTPContext(bindingContext);
- super.service(request, response);
+
+ // handle special ?wadl request
+ String query = request.getQueryString();
+ if(query != null && query.indexOf("wadl") >= 0) {
+ handleWadlRequest(request, response);
+ } else {
+ super.service(request, response);
+ }
} finally {
//remove
ThreadHTTPContext.removeHTTPContext();
@@ -165,6 +183,51 @@ public class TuscanyRESTServlet extends RestServlet {
return config;
}
+
+ private void handleWadlRequest(HttpServletRequest request, HttpServletResponse response) {
+ try {
+ org.apache.wink.common.model.wadl.Application wadlDocument = null;
+ WADLGenerator generator = new WADLGenerator();
+ Set<Class<?>> classes = new HashSet<Class<?>>();
+ classes.add(resourceClass);
+ wadlDocument = generator.generate(binding.getURI(), classes);
+
+ MessageBodyWriter<org.apache.wink.common.model.wadl.Application> writer =
+ this.getDeploymentConfiguration().getProvidersRegistry().
+ getMessageBodyWriter(org.apache.wink.common.model.wadl.Application.class,
+ org.apache.wink.common.model.wadl.Application.class,
+ annotations,
+ MediaType.APPLICATION_XML_TYPE,
+ null);
+
+ writer.writeTo(wadlDocument,
+ org.apache.wink.common.model.wadl.Application.class,
+ org.apache.wink.common.model.wadl.Application.class,
+ annotations,
+ MediaType.APPLICATION_XML_TYPE,
+ null, response.getOutputStream());
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ }
+
+ class TuscanyWadlRequestHandler implements RequestHandler {
+
+ @Override
+ public void init(Properties properties) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void handleRequest(MessageContext messageContext, HandlersChain handlersChain) throws Throwable {
+ // TODO Auto-generated method stub
+
+ }
+
+ }
/**
* TuscanyResponseHandler