示例#1
0
  public void testI18nComponentDisposeItselfFromComponentStack() throws Exception {
    stack.getContext().put(ActionContext.LOCALE, Locale.getDefault());

    TextFieldTag t = new TextFieldTag();
    t.setPageContext(pageContext);
    t.setName("textFieldName");

    LocalizedTextUtil.addDefaultResourceBundle("org.apache.struts2.components.temp");

    I18nTag tag = new I18nTag();
    tag.setName("org.apache.struts2.components.tempo");
    tag.setPageContext(pageContext);

    try {
      t.doStartTag();
      tag.doStartTag();
      assertEquals(tag.getComponent().getComponentStack().peek(), tag.getComponent());
      tag.doEndTag();
      assertEquals(t.getComponent().getComponentStack().peek(), t.getComponent());
      t.doEndTag();
    } catch (Exception e) {
      e.printStackTrace();
      fail(e.toString());
    }
  }
示例#2
0
  @Before
  public void onSetUp() {
    smtpPort = smtpPort + (int) (Math.random() * 100);

    LocalizedTextUtil.addDefaultResourceBundle(Constants.BUNDLE_KEY);

    // Initialize ActionContext
    ConfigurationManager configurationManager = new ConfigurationManager();
    configurationManager.addContainerProvider(new XWorkConfigurationProvider());
    Configuration config = configurationManager.getConfiguration();
    Container container = config.getContainer();

    ValueStack stack = container.getInstance(ValueStackFactory.class).createValueStack();
    stack.getContext().put(ActionContext.CONTAINER, container);
    ActionContext.setContext(new ActionContext(stack.getContext()));

    ActionContext.getContext().setSession(new HashMap<String, Object>());

    // change the port on the mailSender so it doesn't conflict with an
    // existing SMTP server on localhost
    JavaMailSenderImpl mailSender = (JavaMailSenderImpl) applicationContext.getBean("mailSender");
    mailSender.setPort(getSmtpPort());
    mailSender.setHost("localhost");

    // populate the request so getRequest().getSession() doesn't fail in BaseAction.java
    ServletActionContext.setRequest(new MockHttpServletRequest());
  }
示例#3
0
  /**
   * Prepare a request, including setting the encoding and locale.
   *
   * @param request The request
   * @param response The response
   */
  public void prepare(HttpServletRequest request, HttpServletResponse response) {
    String encoding = null;
    if (defaultEncoding != null) {
      encoding = defaultEncoding;
    }

    Locale locale = null;
    if (defaultLocale != null) {
      locale = LocalizedTextUtil.localeFromString(defaultLocale, request.getLocale());
    }

    if (encoding != null) {
      try {
        request.setCharacterEncoding(encoding);
      } catch (Exception e) {
        LOG.error("Error setting character encoding to '" + encoding + "' - ignoring.", e);
      }
    }

    if (locale != null) {
      response.setLocale(locale);
    }

    if (paramsWorkaroundEnabled) {
      request.getParameter(
          "foo"); // simply read any parameter (existing or not) to "prime" the request
    }
  }
示例#4
0
  /**
   * Prepare a request, including setting the encoding and locale.
   *
   * @param request The request
   * @param response The response
   */
  public void prepare(HttpServletRequest request, HttpServletResponse response) {
    String encoding = null;
    if (defaultEncoding != null) {
      encoding = defaultEncoding;
    }
    // check for Ajax request to use UTF-8 encoding strictly
    // http://www.w3.org/TR/XMLHttpRequest/#the-send-method
    if ("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))) {
      encoding = "UTF-8";
    }

    Locale locale = null;
    if (defaultLocale != null) {
      locale = LocalizedTextUtil.localeFromString(defaultLocale, request.getLocale());
    }

    if (encoding != null) {
      applyEncoding(request, encoding);
    }

    if (locale != null) {
      response.setLocale(locale);
    }

    if (paramsWorkaroundEnabled) {
      request.getParameter(
          "foo"); // simply read any parameter (existing or not) to "prime" the request
    }
  }
示例#5
0
  private Container init_PreloadConfiguration() {
    Configuration config = configurationManager.getConfiguration();
    Container container = config.getContainer();

    boolean reloadi18n =
        Boolean.valueOf(container.getInstance(String.class, StrutsConstants.STRUTS_I18N_RELOAD));
    LocalizedTextUtil.setReloadBundles(reloadi18n);

    return container;
  }
示例#6
0
 @Override
 public String intercept(ActionInvocation invocation) throws Exception {
   Map<String, Object> params = invocation.getInvocationContext().getParameters();
   Locale locale = null;
   // get session locale
   String session_locale = findLocaleParameter(params, sessionParameterName);
   Map<String, Object> session = invocation.getInvocationContext().getSession();
   if (null != session) {
     if (null == session_locale) {
       locale = (Locale) session.get(attributeName);
     } else {
       locale = LocalizedTextUtil.localeFromString(session_locale, null);
       // save it in session
       session.put(attributeName, locale);
     }
   }
   // get request locale
   String request_locale = findLocaleParameter(params, requestParameterName);
   if (null != request_locale) {
     locale = LocalizedTextUtil.localeFromString(request_locale, null);
   }
   if (null != locale) invocation.getInvocationContext().setLocale(locale);
   return invocation.invoke();
 }
示例#7
0
  @Before
  public void onSetUp() {
    smtpPort = (new Random().nextInt(9999 - 1000) + 1000);
    log.debug("SMTP Port set to: " + smtpPort);

    LocalizedTextUtil.addDefaultResourceBundle(Constants.BUNDLE_KEY);

    // Initialize ActionContext
    ConfigurationManager configurationManager = new ConfigurationManager();
    configurationManager.addContainerProvider(new XWorkConfigurationProvider());
    Configuration config = configurationManager.getConfiguration();
    Container container = config.getContainer();

    ValueStack stack = container.getInstance(ValueStackFactory.class).createValueStack();
    stack.getContext().put(ActionContext.CONTAINER, container);
    ActionContext.setContext(new ActionContext(stack.getContext()));

    ActionContext.getContext().setSession(new HashMap<String, Object>());

    // populate the request so getRequest().getProject() doesn't fail in BaseAction.java
    ServletActionContext.setRequest(new MockHttpServletRequest());
  }
示例#8
0
  /**
   * Merge all application and servlet attributes into a single <tt>HashMap</tt> to represent the
   * entire <tt>Action</tt> context.
   *
   * @param requestMap a Map of all request attributes.
   * @param parameterMap a Map of all request parameters.
   * @param sessionMap a Map of all session attributes.
   * @param applicationMap a Map of all servlet context attributes.
   * @param request the HttpServletRequest object.
   * @param response the HttpServletResponse object.
   * @param servletContext the ServletContextmapping object.
   * @return a HashMap representing the <tt>Action</tt> context.
   */
  public HashMap<String, Object> createContextMap(
      Map requestMap,
      Map parameterMap,
      Map sessionMap,
      Map applicationMap,
      HttpServletRequest request,
      HttpServletResponse response,
      ServletContext servletContext) {
    HashMap<String, Object> extraContext = new HashMap<String, Object>();
    extraContext.put(ActionContext.PARAMETERS, new HashMap(parameterMap));
    extraContext.put(ActionContext.SESSION, sessionMap);
    extraContext.put(ActionContext.APPLICATION, applicationMap);

    Locale locale;
    if (defaultLocale != null) {
      locale = LocalizedTextUtil.localeFromString(defaultLocale, request.getLocale());
    } else {
      locale = request.getLocale();
    }

    extraContext.put(ActionContext.LOCALE, locale);
    // extraContext.put(ActionContext.DEV_MODE, Boolean.valueOf(devMode));

    extraContext.put(StrutsStatics.HTTP_REQUEST, request);
    extraContext.put(StrutsStatics.HTTP_RESPONSE, response);
    extraContext.put(StrutsStatics.SERVLET_CONTEXT, servletContext);

    // helpers to get access to request/session/application scope
    extraContext.put("request", requestMap);
    extraContext.put("session", sessionMap);
    extraContext.put("application", applicationMap);
    extraContext.put("parameters", parameterMap);

    AttributeMap attrMap = new AttributeMap(extraContext);
    extraContext.put("attr", attrMap);

    return extraContext;
  }
示例#9
0
  @Override
  public String intercept(ActionInvocation invocation) throws Exception {

    ActionConfig config = invocation.getProxy().getConfig();
    ActionContext ac = invocation.getInvocationContext();
    Object action = invocation.getAction();

    // get the action's parameters
    final Map<String, String> parameters = config.getParams();

    if (parameters.containsKey(aliasesKey)) {

      String aliasExpression = parameters.get(aliasesKey);
      ValueStack stack = ac.getValueStack();
      Object obj = stack.findValue(aliasExpression);

      if (obj != null && obj instanceof Map) {
        // get secure stack
        ValueStack newStack = valueStackFactory.createValueStack(stack);
        boolean clearableStack = newStack instanceof ClearableValueStack;
        if (clearableStack) {
          // if the stack's context can be cleared, do that to prevent OGNL
          // from having access to objects in the stack, see XW-641
          ((ClearableValueStack) newStack).clearContextValues();
          Map<String, Object> context = newStack.getContext();
          ReflectionContextState.setCreatingNullObjects(context, true);
          ReflectionContextState.setDenyMethodExecution(context, true);
          ReflectionContextState.setReportingConversionErrors(context, true);

          // keep locale from original context
          context.put(ActionContext.LOCALE, stack.getContext().get(ActionContext.LOCALE));
        }

        // override
        Map aliases = (Map) obj;
        for (Object o : aliases.entrySet()) {
          Map.Entry entry = (Map.Entry) o;
          String name = entry.getKey().toString();
          String alias = (String) entry.getValue();
          Object value = stack.findValue(name);
          if (null == value) {
            // workaround
            Map<String, Object> contextParameters = ActionContext.getContext().getParameters();

            if (null != contextParameters) {
              value = contextParameters.get(name);
            }
          }
          if (null != value) {
            try {
              newStack.setValue(alias, value);
            } catch (RuntimeException e) {
              if (devMode) {
                String developerNotification =
                    LocalizedTextUtil.findText(
                        ParametersInterceptor.class,
                        "devmode.notification",
                        ActionContext.getContext().getLocale(),
                        "Developer Notification:\n{0}",
                        new Object[] {
                          "Unexpected Exception caught setting '"
                              + entry.getKey()
                              + "' on '"
                              + action.getClass()
                              + ": "
                              + e.getMessage()
                        });
                LOG.error(developerNotification);
                if (action instanceof ValidationAware) {
                  ((ValidationAware) action).addActionMessage(developerNotification);
                }
              }
            }
          }
        }

        if (clearableStack && (stack.getContext() != null) && (newStack.getContext() != null))
          stack
              .getContext()
              .put(
                  ActionContext.CONVERSION_ERRORS,
                  newStack.getContext().get(ActionContext.CONVERSION_ERRORS));
      } else {
        LOG.debug("invalid alias expression:" + aliasesKey);
      }
    }

    return invocation.invoke();
  }
  protected void setParameters(
      Object action, ValueStack stack, final Map<String, Object> parameters) {
    ParameterNameAware parameterNameAware =
        (action instanceof ParameterNameAware) ? (ParameterNameAware) action : null;

    Map<String, Object> params;
    Map<String, Object> acceptableParameters;
    if (ordered) {
      params = new TreeMap<String, Object>(getOrderedComparator());
      acceptableParameters = new TreeMap<String, Object>(getOrderedComparator());
      params.putAll(parameters);
    } else {
      params = new TreeMap<String, Object>(parameters);
      acceptableParameters = new TreeMap<String, Object>();
    }

    for (Map.Entry<String, Object> entry : params.entrySet()) {
      String name = entry.getKey();

      boolean acceptableName =
          acceptableName(name)
              && (parameterNameAware == null || parameterNameAware.acceptableParameterName(name));

      if (acceptableName) {
        acceptableParameters.put(name, entry.getValue());
      }
    }

    ValueStack newStack = valueStackFactory.createValueStack(stack);
    boolean clearableStack = newStack instanceof ClearableValueStack;
    if (clearableStack) {
      // if the stack's context can be cleared, do that to prevent OGNL
      // from having access to objects in the stack, see XW-641
      ((ClearableValueStack) newStack).clearContextValues();
      Map<String, Object> context = newStack.getContext();
      ReflectionContextState.setCreatingNullObjects(context, true);
      ReflectionContextState.setDenyMethodExecution(context, true);
      ReflectionContextState.setReportingConversionErrors(context, true);

      // keep locale from original context
      context.put(ActionContext.LOCALE, stack.getContext().get(ActionContext.LOCALE));
    }

    boolean memberAccessStack = newStack instanceof MemberAccessValueStack;
    if (memberAccessStack) {
      // block or allow access to properties
      // see WW-2761 for more details
      MemberAccessValueStack accessValueStack = (MemberAccessValueStack) newStack;
      accessValueStack.setAcceptProperties(acceptParams);
      accessValueStack.setExcludeProperties(excludeParams);
    }

    for (Map.Entry<String, Object> entry : acceptableParameters.entrySet()) {
      String name = entry.getKey();
      Object value = entry.getValue();
      try {
        newStack.setValue(name, value);
      } catch (RuntimeException e) {
        if (devMode) {
          String developerNotification =
              LocalizedTextUtil.findText(
                  ParametersInterceptor.class,
                  "devmode.notification",
                  ActionContext.getContext().getLocale(),
                  "Developer Notification:\n{0}",
                  new Object[] {
                    "Unexpected Exception caught setting '"
                        + name
                        + "' on '"
                        + action.getClass()
                        + ": "
                        + e.getMessage()
                  });
          LOG.error(developerNotification);
          if (action instanceof ValidationAware) {
            ((ValidationAware) action).addActionMessage(developerNotification);
          }
        }
      }
    }

    if (clearableStack && (stack.getContext() != null) && (newStack.getContext() != null))
      stack
          .getContext()
          .put(
              ActionContext.CONVERSION_ERRORS,
              newStack.getContext().get(ActionContext.CONVERSION_ERRORS));

    addParametersToContext(ActionContext.getContext(), acceptableParameters);
  }