Search in sources :

Example 46 with ForwardConfig

use of org.apache.struts.config.ForwardConfig in project sonar-java by SonarSource.

the class TestActionServlet method testProcessActionExtensionWithForwardConfig.

/**
 * Test that an ActionConfig's ForwardConfig can inherit from a
 * global ForwardConfig.
 */
public void testProcessActionExtensionWithForwardConfig() throws ServletException {
    ForwardConfig forwardConfig = new ForwardConfig();
    forwardConfig.setName("sub");
    forwardConfig.setExtends("success");
    baseAction.addForwardConfig(forwardConfig);
    moduleConfig.addActionConfig(baseAction);
    moduleConfig.addForwardConfig(baseForward);
    actionServlet.processActionConfigExtension(baseAction, moduleConfig);
    forwardConfig = baseAction.findForwardConfig("sub");
    assertEquals("'sub' forward's inheritance was not processed.", baseForward.getPath(), forwardConfig.getPath());
}
Also used : ForwardConfig(org.apache.struts.config.ForwardConfig)

Example 47 with ForwardConfig

use of org.apache.struts.config.ForwardConfig in project sonar-java by SonarSource.

the class TestActionServlet method testProcessForwardConfigClassSubConfigCustomClass.

/**
 * Make sure processForwardConfigClass() returns the same class instance
 * if the base config isn't using a custom class.
 */
public void testProcessForwardConfigClassSubConfigCustomClass() throws Exception {
    moduleConfig.addForwardConfig(baseForward);
    ForwardConfig customSub = new ActionForward();
    customSub.setName("failure");
    customSub.setExtends("success");
    moduleConfig.addForwardConfig(customSub);
    ForwardConfig result = actionServlet.processForwardConfigClass(customSub, moduleConfig, null);
    assertSame("The instance returned should be the param given it.", customSub, result);
}
Also used : ForwardConfig(org.apache.struts.config.ForwardConfig)

Example 48 with ForwardConfig

use of org.apache.struts.config.ForwardConfig in project sonar-java by SonarSource.

the class TestActionServlet method notestProcessForwardConfigClassError.

/**
 * Make sure the code throws the correct exception when it can't create an
 * instance of the base config's custom class.
 */
public void notestProcessForwardConfigClassError() throws Exception {
    ForwardConfig customBase = new CustomForwardConfigArg("success", "/success.jsp");
    moduleConfig.addForwardConfig(customBase);
    ForwardConfig customSub = new ActionForward();
    customSub.setName("failure");
    customSub.setExtends("success");
    moduleConfig.addForwardConfig(customSub);
    try {
        actionServlet.processForwardConfigClass(customSub, moduleConfig, null);
        fail("Exception should be thrown");
    } catch (UnavailableException e) {
    // success
    } catch (Exception e) {
        fail("Unexpected exception thrown.");
    }
}
Also used : UnavailableException(javax.servlet.UnavailableException) ForwardConfig(org.apache.struts.config.ForwardConfig) ServletException(javax.servlet.ServletException) UnavailableException(javax.servlet.UnavailableException)

Example 49 with ForwardConfig

use of org.apache.struts.config.ForwardConfig in project sonar-java by SonarSource.

the class TagUtils method computeURLWithCharEncoding.

/**
 * Compute a hyperlink URL based on the <code>forward</code>,
 * <code>href</code>, <code>action</code> or <code>page</code> parameter
 * that is not null. The returned URL will have already been passed to
 * <code>response.encodeURL()</code> for adding a session identifier.
 *
 * @param pageContext      PageContext for the tag making this call
 * @param forward          Logical forward name for which to look up the
 *                         context-relative URI (if specified)
 * @param href             URL to be utilized unmodified (if specified)
 * @param page             Module-relative page for which a URL should be
 *                         created (if specified)
 * @param action           Logical action name for which to look up the
 *                         context-relative URI (if specified)
 * @param params           Map of parameters to be dynamically included
 *                         (if any)
 * @param anchor           Anchor to be dynamically included (if any)
 * @param redirect         Is this URL for a <code>response.sendRedirect()</code>?
 * @param encodeSeparator  This is only checked if redirect is set to
 *                         false (never encoded for a redirect).  If true,
 *                         query string parameter separators are encoded
 *                         as &gt;amp;, else &amp; is used.
 * @param useLocalEncoding If set to true, urlencoding is done on the
 *                         bytes of character encoding from
 *                         ServletResponse#getCharacterEncoding. Use UTF-8
 *                         otherwise.
 * @return URL with session identifier
 * @throws java.net.MalformedURLException if a URL cannot be created for
 *                                        the specified parameters
 */
public String computeURLWithCharEncoding(PageContext pageContext, String forward, String href, String page, String action, String module, Map params, String anchor, boolean redirect, boolean encodeSeparator, boolean useLocalEncoding) throws MalformedURLException {
    String charEncoding = "UTF-8";
    if (useLocalEncoding) {
        charEncoding = pageContext.getResponse().getCharacterEncoding();
    }
    // TODO All the computeURL() methods need refactoring!
    // Validate that exactly one specifier was included
    int n = 0;
    if (forward != null) {
        n++;
    }
    if (href != null) {
        n++;
    }
    if (page != null) {
        n++;
    }
    if (action != null) {
        n++;
    }
    if (n != 1) {
        throw new MalformedURLException(messages.getMessage("computeURL.specifier"));
    }
    // Look up the module configuration for this request
    ModuleConfig moduleConfig = getModuleConfig(module, pageContext);
    // Calculate the appropriate URL
    StringBuffer url = new StringBuffer();
    HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
    if (forward != null) {
        ForwardConfig forwardConfig = moduleConfig.findForwardConfig(forward);
        if (forwardConfig == null) {
            throw new MalformedURLException(messages.getMessage("computeURL.forward", forward));
        }
        if (forwardConfig.getPath().startsWith("/")) {
            url.append(request.getContextPath());
            url.append(RequestUtils.forwardURL(request, forwardConfig, moduleConfig));
        } else {
            url.append(forwardConfig.getPath());
        }
    } else if (href != null) {
        url.append(href);
    } else if (action != null) {
        ActionServlet servlet = (ActionServlet) pageContext.getServletContext().getAttribute(Globals.ACTION_SERVLET_KEY);
        String actionIdPath = RequestUtils.actionIdURL(action, moduleConfig, servlet);
        if (actionIdPath != null) {
            action = actionIdPath;
            url.append(request.getContextPath());
            url.append(actionIdPath);
        } else {
            url.append(instance.getActionMappingURL(action, module, pageContext, false));
        }
    } else /* if (page != null) */
    {
        url.append(request.getContextPath());
        url.append(this.pageURL(request, page, moduleConfig));
    }
    // Add anchor if requested (replacing any existing anchor)
    if (anchor != null) {
        String temp = url.toString();
        int hash = temp.indexOf('#');
        if (hash >= 0) {
            url.setLength(hash);
        }
        url.append('#');
        url.append(this.encodeURL(anchor, charEncoding));
    }
    // Add dynamic parameters if requested
    if ((params != null) && (params.size() > 0)) {
        // Save any existing anchor
        String temp = url.toString();
        int hash = temp.indexOf('#');
        if (hash >= 0) {
            anchor = temp.substring(hash + 1);
            url.setLength(hash);
            temp = url.toString();
        } else {
            anchor = null;
        }
        // Define the parameter separator
        String separator = null;
        if (redirect) {
            separator = "&";
        } else if (encodeSeparator) {
            separator = "&amp;";
        } else {
            separator = "&";
        }
        // Add the required request parameters
        boolean question = temp.indexOf('?') >= 0;
        Iterator keys = params.keySet().iterator();
        while (keys.hasNext()) {
            String key = (String) keys.next();
            Object value = params.get(key);
            if (value == null) {
                if (!question) {
                    url.append('?');
                    question = true;
                } else {
                    url.append(separator);
                }
                url.append(this.encodeURL(key, charEncoding));
                // Interpret null as "no value"
                url.append('=');
            } else if (value instanceof String) {
                if (!question) {
                    url.append('?');
                    question = true;
                } else {
                    url.append(separator);
                }
                url.append(this.encodeURL(key, charEncoding));
                url.append('=');
                url.append(this.encodeURL((String) value, charEncoding));
            } else if (value instanceof String[]) {
                String[] values = (String[]) value;
                for (int i = 0; i < values.length; i++) {
                    if (!question) {
                        url.append('?');
                        question = true;
                    } else {
                        url.append(separator);
                    }
                    url.append(this.encodeURL(key, charEncoding));
                    url.append('=');
                    url.append(this.encodeURL(values[i], charEncoding));
                }
            } else /* Convert other objects to a string */
            {
                if (!question) {
                    url.append('?');
                    question = true;
                } else {
                    url.append(separator);
                }
                url.append(this.encodeURL(key, charEncoding));
                url.append('=');
                url.append(this.encodeURL(value.toString(), charEncoding));
            }
        }
        // Re-add the saved anchor (if any)
        if (anchor != null) {
            url.append('#');
            url.append(this.encodeURL(anchor, charEncoding));
        }
    }
    // but only if url is not an external URL
    if ((href == null) && (pageContext.getSession() != null)) {
        HttpServletResponse response = (HttpServletResponse) pageContext.getResponse();
        if (redirect) {
            return (response.encodeRedirectURL(url.toString()));
        }
        return (response.encodeURL(url.toString()));
    }
    return (url.toString());
}
Also used : MalformedURLException(java.net.MalformedURLException) ModuleConfig(org.apache.struts.config.ModuleConfig) HttpServletResponse(javax.servlet.http.HttpServletResponse) ActionServlet(org.apache.struts.action.ActionServlet) HttpServletRequest(javax.servlet.http.HttpServletRequest) Iterator(java.util.Iterator) ForwardConfig(org.apache.struts.config.ForwardConfig)

Example 50 with ForwardConfig

use of org.apache.struts.config.ForwardConfig in project sonar-java by SonarSource.

the class TestRequestUtils method testForwardURL3.

// Third module (custom forwardPattern)
public void testForwardURL3() {
    request.setAttribute(Globals.MODULE_KEY, moduleConfig3);
    request.setPathElements("/myapp", "/3/action.do", null, null);
    ForwardConfig forward = null;
    String result = null;
    // redirect=false, module=null
    forward = moduleConfig3.findForwardConfig("moduleForward");
    assertNotNull("moduleForward found", forward);
    result = RequestUtils.forwardURL(request, forward, null);
    assertNotNull("moduleForward computed", result);
    assertEquals("moduleForward value", "/forwarding/3/module/forward", result);
    // redirect=true, module=null
    forward = moduleConfig3.findForwardConfig("moduleRedirect");
    assertNotNull("moduleRedirect found", forward);
    result = RequestUtils.forwardURL(request, forward, null);
    assertNotNull("moduleRedirect computed", result);
    assertEquals("moduleRedirect value", "/forwarding/3/module/redirect", result);
    // redirect=false, module=/context
    forward = moduleConfig3.findForwardConfig("contextForward");
    assertNotNull("contextForward found", forward);
    result = RequestUtils.forwardURL(request, forward, null);
    assertNotNull("contextForward computed", result);
    assertEquals("contextForward value", "/forwarding/context/forward", result);
    // redirect=true, module=/context
    forward = moduleConfig3.findForwardConfig("contextRedirect");
    assertNotNull("contextRedirect found", forward);
    result = RequestUtils.forwardURL(request, forward, null);
    assertNotNull("contextRedirect computed", result);
    assertEquals("contextRedirct value", "/forwarding/context/redirect", result);
    // noslash, module=null
    forward = moduleConfig3.findForwardConfig("moduleNoslash");
    assertNotNull("moduleNoslash found", forward);
    result = RequestUtils.forwardURL(request, forward, null);
    assertNotNull("moduleNoslash computed", result);
    assertEquals("moduleNoslash value", "/forwarding/3/module/noslash", result);
    // noslash, module=/
    forward = moduleConfig3.findForwardConfig("contextNoslash");
    assertNotNull("contextNoslash found", forward);
    result = RequestUtils.forwardURL(request, forward, null);
    assertNotNull("contextNoslash computed", result);
    assertEquals("contextNoslash value", "/forwarding/context/noslash", result);
}
Also used : ForwardConfig(org.apache.struts.config.ForwardConfig)

Aggregations

ForwardConfig (org.apache.struts.config.ForwardConfig)63 ActionConfig (org.apache.struts.config.ActionConfig)14 UnavailableException (javax.servlet.UnavailableException)12 ServletException (javax.servlet.ServletException)10 ExceptionConfig (org.apache.struts.config.ExceptionConfig)10 MalformedURLException (java.net.MalformedURLException)8 ModuleConfig (org.apache.struts.config.ModuleConfig)8 IOException (java.io.IOException)6 MissingResourceException (java.util.MissingResourceException)6 ModuleConfigFactory (org.apache.struts.config.ModuleConfigFactory)6 SAXException (org.xml.sax.SAXException)6 HttpServletRequest (javax.servlet.http.HttpServletRequest)4 HttpServletResponse (javax.servlet.http.HttpServletResponse)4 ActionFormBean (org.apache.struts.action.ActionFormBean)4 ActionForward (org.apache.struts.action.ActionForward)4 ActionMapping (org.apache.struts.action.ActionMapping)4 ActionServlet (org.apache.struts.action.ActionServlet)4 FormPropertyConfig (org.apache.struts.config.FormPropertyConfig)4 ServletActionContext (org.apache.struts.chain.contexts.ServletActionContext)3 ArrayList (java.util.ArrayList)2