import javax.portlet.PortletException;
import com.vaadin.Application;
+import com.vaadin.terminal.gwt.server.ServletPortletHelper.ApplicationClassException;
/**
* TODO Write documentation, fix JavaDoc tags.
private Class<? extends Application> applicationClass;
- @SuppressWarnings("unchecked")
@Override
public void init(PortletConfig config) throws PortletException {
super.init(config);
- final String applicationClassName = config
- .getInitParameter("application");
- if (applicationClassName == null) {
- throw new PortletException(
- "Application not specified in portlet parameters");
- }
-
try {
- applicationClass = (Class<? extends Application>) getClassLoader()
- .loadClass(applicationClassName);
- } catch (final ClassNotFoundException e) {
- throw new PortletException("Failed to load application class: "
- + applicationClassName);
+ applicationClass = ServletPortletHelper.getApplicationClass(
+ config.getInitParameter("application"),
+ config.getInitParameter(Application.ROOT_PARAMETER),
+ getClassLoader());
+ } catch (ApplicationClassException e) {
+ throw new PortletException(e);
}
}
import javax.servlet.http.HttpServletRequest;
import com.vaadin.Application;
-import com.vaadin.ui.Root;
+import com.vaadin.terminal.gwt.server.ServletPortletHelper.ApplicationClassException;
/**
* This servlet connects a Vaadin Application to Web.
// Loads the application class using the same class loader
// as the servlet itself
- // Gets the application class name
- final String applicationClassName = servletConfig
- .getInitParameter("application");
- if (applicationClassName == null) {
- String rootParam = servletConfig
- .getInitParameter(Application.ROOT_PARAMETER);
-
- // Validate the parameter value
- verifyRootClass(rootParam);
-
- // Application can be used if a valid rootLayout is defined
- applicationClass = Application.class;
- return;
- }
-
try {
- applicationClass = (Class<? extends Application>) getClassLoader()
- .loadClass(applicationClassName);
- } catch (final ClassNotFoundException e) {
- throw new ServletException("Failed to load application class: "
- + applicationClassName);
- }
- }
-
- private void verifyRootClass(String className) throws ServletException {
- if (className == null) {
- throw new ServletException(Application.ROOT_PARAMETER
- + " servlet parameter not defined");
- }
-
- // Check that the root layout class can be found
- try {
- Class<?> rootClass = getClassLoader().loadClass(className);
- if (!Root.class.isAssignableFrom(rootClass)) {
- throw new ServletException(className
- + " does not implement Root");
- }
- // Try finding a default constructor, else throw exception
- rootClass.getConstructor();
- } catch (ClassNotFoundException e) {
- throw new ServletException(className + " could not be loaded", e);
- } catch (SecurityException e) {
- throw new ServletException("Could not access " + className
- + " class", e);
- } catch (NoSuchMethodException e) {
- throw new ServletException(className
- + " doesn't have a public no-args constructor");
+ applicationClass = ServletPortletHelper.getApplicationClass(
+ servletConfig.getInitParameter("application"),
+ servletConfig.getInitParameter(Application.ROOT_PARAMETER),
+ getClassLoader());
+ } catch (ApplicationClassException e) {
+ throw new ServletException(e);
}
}
--- /dev/null
+package com.vaadin.terminal.gwt.server;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Root;
+
+class ServletPortletHelper {
+ public static class ApplicationClassException extends Exception {
+
+ public ApplicationClassException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ public ApplicationClassException(String message) {
+ super(message);
+ }
+ }
+
+ static Class<? extends Application> getApplicationClass(
+ String applicationParameter, String rootParameter,
+ ClassLoader classLoader) throws ApplicationClassException {
+ if (applicationParameter == null) {
+
+ // Validate the parameter value
+ verifyRootClass(rootParameter, classLoader);
+
+ // Application can be used if a valid rootLayout is defined
+ return Application.class;
+ }
+
+ try {
+ return (Class<? extends Application>) classLoader
+ .loadClass(applicationParameter);
+ } catch (final ClassNotFoundException e) {
+ throw new ApplicationClassException(
+ "Failed to load application class: " + applicationParameter,
+ e);
+ }
+ }
+
+ private static void verifyRootClass(String className,
+ ClassLoader classLoader) throws ApplicationClassException {
+ if (className == null) {
+ throw new ApplicationClassException(Application.ROOT_PARAMETER
+ + " init parameter not defined");
+ }
+
+ // Check that the root layout class can be found
+ try {
+ Class<?> rootClass = classLoader.loadClass(className);
+ if (!Root.class.isAssignableFrom(rootClass)) {
+ throw new ApplicationClassException(className
+ + " does not implement Root");
+ }
+ // Try finding a default constructor, else throw exception
+ rootClass.getConstructor();
+ } catch (ClassNotFoundException e) {
+ throw new ApplicationClassException(className
+ + " could not be loaded", e);
+ } catch (SecurityException e) {
+ throw new ApplicationClassException("Could not access " + className
+ + " class", e);
+ } catch (NoSuchMethodException e) {
+ throw new ApplicationClassException(className
+ + " doesn't have a public no-args constructor");
+ }
+ }
+}