From 09cd3b8ee729027f0938485ccc103d3e610bc545 Mon Sep 17 00:00:00 2001 From: pulquero Date: Sat, 8 Aug 2015 16:09:54 +0100 Subject: [PATCH 1/5] Fix to support restlets that serve static content. Fixes "No ClientDispatcher". --- .../ext/spring/RestletFrameworkServlet.java | 43 ++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/modules/org.restlet.ext.spring/src/org/restlet/ext/spring/RestletFrameworkServlet.java b/modules/org.restlet.ext.spring/src/org/restlet/ext/spring/RestletFrameworkServlet.java index 61b22f1e54..3de16ad59d 100644 --- a/modules/org.restlet.ext.spring/src/org/restlet/ext/spring/RestletFrameworkServlet.java +++ b/modules/org.restlet.ext.spring/src/org/restlet/ext/spring/RestletFrameworkServlet.java @@ -96,6 +96,35 @@ public class RestletFrameworkServlet extends FrameworkServlet { /** The bean name of the target Restlet. */ private volatile String targetRestletBeanName; + /** List of supported client protocols. */ + private volatile String clientProtocolsString; + + /** + * Creates an implicit {@link Component} for the {@link Application}. + * + * @return A new instance of {@link Component} + */ + protected Component createComponent() { + Component component = new Component(); + if (clientProtocolsString != null) { + final String[] clientProtocols = clientProtocolsString + .split(" "); + Client client; + + for (final String clientProtocol : clientProtocols) { + client = new Client(clientProtocol); + + if (client.isAvailable()) { + component.getClients().add(client); + } else { + log("[Restlet] Couldn't find a client connector for protocol " + + clientProtocol); + } + } + } + return component; + } + /** * Creates the Restlet {@link Context} to use if the target application does * not already have a context associated, or if the target restlet is not an @@ -106,7 +135,9 @@ public class RestletFrameworkServlet extends FrameworkServlet { * @return A new instance of {@link Context} */ protected Context createContext() { - return new Context(); + Component component = createComponent(); + Context parentContext = component.getContext(); + return parentContext.createChildContext(); } @Override @@ -177,4 +208,14 @@ protected void initFrameworkServlet() throws ServletException, public void setTargetRestletBeanName(String targetRestletBeanName) { this.targetRestletBeanName = targetRestletBeanName; } + + /** + * Sets the client protocols. + * + * @param clientProtocols + * Space-separated list of protocols (e.g. FILE CLAP). + */ + public void setClientProtocols(String clientProtocolsString) { + this.clientProtocolsString = clientProtocolsString; + } } From 80bdc565a2433cc47e39d2ab6a0d53f48743dc0a Mon Sep 17 00:00:00 2001 From: pulquero Date: Sat, 8 Aug 2015 16:29:11 +0100 Subject: [PATCH 2/5] Added missing imports. --- .../src/org/restlet/ext/spring/RestletFrameworkServlet.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/org.restlet.ext.spring/src/org/restlet/ext/spring/RestletFrameworkServlet.java b/modules/org.restlet.ext.spring/src/org/restlet/ext/spring/RestletFrameworkServlet.java index 3de16ad59d..3391007609 100644 --- a/modules/org.restlet.ext.spring/src/org/restlet/ext/spring/RestletFrameworkServlet.java +++ b/modules/org.restlet.ext.spring/src/org/restlet/ext/spring/RestletFrameworkServlet.java @@ -31,6 +31,8 @@ import javax.servlet.http.HttpServletResponse; import org.restlet.Application; +import org.restlet.Client; +import org.restlet.Component; import org.restlet.Context; import org.restlet.Restlet; import org.restlet.ext.servlet.ServletAdapter; From 0057d5253a4371573f4bac331202f3f76ca79186 Mon Sep 17 00:00:00 2001 From: pulquero Date: Sat, 8 Aug 2015 18:09:39 +0100 Subject: [PATCH 3/5] Added support for optional lookup of Component from spring context --- .../ext/spring/RestletFrameworkServlet.java | 47 +++++++++++++++++-- 1 file changed, 42 insertions(+), 5 deletions(-) diff --git a/modules/org.restlet.ext.spring/src/org/restlet/ext/spring/RestletFrameworkServlet.java b/modules/org.restlet.ext.spring/src/org/restlet/ext/spring/RestletFrameworkServlet.java index 3391007609..e447d45b88 100644 --- a/modules/org.restlet.ext.spring/src/org/restlet/ext/spring/RestletFrameworkServlet.java +++ b/modules/org.restlet.ext.spring/src/org/restlet/ext/spring/RestletFrameworkServlet.java @@ -92,22 +92,40 @@ public class RestletFrameworkServlet extends FrameworkServlet { private static final long serialVersionUID = 1L; + /** The Component. */ + private volatile Component component; + /** The adapter of Servlet calls into Restlet equivalents. */ private volatile ServletAdapter adapter; /** The bean name of the target Restlet. */ private volatile String targetRestletBeanName; + /** The bean name of the Component. */ + private volatile String componentBeanName; + /** List of supported client protocols. */ private volatile String clientProtocolsString; /** - * Creates an implicit {@link Component} for the {@link Application}. + * Creates an {@link Component} for the {@link Application} + * by trying to look one up from the web application context + * using the configured componentBeanName. + * If no component bean name is configured then a default Component is created. + *

+ * Additionally, if any client protocols are configured via clientProtocols + * then these are also added to the component. * * @return A new instance of {@link Component} */ protected Component createComponent() { - Component component = new Component(); + Component component; + if(getComponentBeanName() != null) { + component = (Component) getWebApplicationContext().getBean( + getComponentBeanName()); + } else { + component = new Component(); + } if (clientProtocolsString != null) { final String[] clientProtocols = clientProtocolsString .split(" "); @@ -137,9 +155,9 @@ protected Component createComponent() { * @return A new instance of {@link Context} */ protected Context createContext() { - Component component = createComponent(); - Context parentContext = component.getContext(); - return parentContext.createChildContext(); + this.component = createComponent(); + Context parentContext = this.component.getContext(); + return parentContext.createChildContext(); } @Override @@ -158,6 +176,15 @@ protected void doService(HttpServletRequest request, protected ServletAdapter getAdapter() { return this.adapter; } + /** + * Provides access to the {@link Component} used. + * Exposed so that subclasses may do additional configuration. + * + * @return The {@link Component}. + */ + protected Component getComponent() { + return this.component; + } /** * Returns the target Restlet from Spring's Web application context. @@ -211,6 +238,16 @@ public void setTargetRestletBeanName(String targetRestletBeanName) { this.targetRestletBeanName = targetRestletBeanName; } + /** + * Sets the bean name of the Component. + * + * @param componentBeanName + * The bean name. + */ + public void setComponentBeanName(String componentBeanName) { + this.componentBeanName = componentBeanName; + } + /** * Sets the client protocols. * From a8c58ffd43d94d468a2d53971bdea077a95b9615 Mon Sep 17 00:00:00 2001 From: pulquero Date: Sat, 8 Aug 2015 18:15:09 +0100 Subject: [PATCH 4/5] Compile fix --- .../src/org/restlet/ext/spring/RestletFrameworkServlet.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/org.restlet.ext.spring/src/org/restlet/ext/spring/RestletFrameworkServlet.java b/modules/org.restlet.ext.spring/src/org/restlet/ext/spring/RestletFrameworkServlet.java index e447d45b88..50296dcf6f 100644 --- a/modules/org.restlet.ext.spring/src/org/restlet/ext/spring/RestletFrameworkServlet.java +++ b/modules/org.restlet.ext.spring/src/org/restlet/ext/spring/RestletFrameworkServlet.java @@ -120,9 +120,9 @@ public class RestletFrameworkServlet extends FrameworkServlet { */ protected Component createComponent() { Component component; - if(getComponentBeanName() != null) { + if(componentBeanName != null) { component = (Component) getWebApplicationContext().getBean( - getComponentBeanName()); + componentBeanName; } else { component = new Component(); } From 5e54877c088c46ba4ccd0f290619325f7528ee02 Mon Sep 17 00:00:00 2001 From: pulquero Date: Sat, 8 Aug 2015 18:19:53 +0100 Subject: [PATCH 5/5] Compile fix --- .../src/org/restlet/ext/spring/RestletFrameworkServlet.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/org.restlet.ext.spring/src/org/restlet/ext/spring/RestletFrameworkServlet.java b/modules/org.restlet.ext.spring/src/org/restlet/ext/spring/RestletFrameworkServlet.java index 50296dcf6f..feda0e2437 100644 --- a/modules/org.restlet.ext.spring/src/org/restlet/ext/spring/RestletFrameworkServlet.java +++ b/modules/org.restlet.ext.spring/src/org/restlet/ext/spring/RestletFrameworkServlet.java @@ -122,7 +122,7 @@ protected Component createComponent() { Component component; if(componentBeanName != null) { component = (Component) getWebApplicationContext().getBean( - componentBeanName; + componentBeanName); } else { component = new Component(); }