Example #1
0
  @CacheEvict(value = "users", allEntries = true)
  @Transactional(propagation = Propagation.NOT_SUPPORTED)
  public List<User> bulkDeleteUser(UserBulkDeleteRequest bulkDeleteForm, BindingResult result) {
    List<User> users = new ArrayList<>();
    for (long id : bulkDeleteForm.getIds()) {
      final UserDeleteRequest deleteRequest = new UserDeleteRequest.Builder().id(id).build();

      final BeanPropertyBindingResult r = new BeanPropertyBindingResult(deleteRequest, "request");
      r.setMessageCodesResolver(messageCodesResolver);

      TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);
      transactionTemplate.setPropagationBehavior(TransactionTemplate.PROPAGATION_REQUIRES_NEW);
      User user = null;
      try {
        user =
            transactionTemplate.execute(
                new TransactionCallback<User>() {
                  public User doInTransaction(TransactionStatus status) {
                    try {
                      return deleteUser(deleteRequest, r);
                    } catch (BindException e) {
                      throw new RuntimeException(e);
                    }
                  }
                });
        users.add(user);
      } catch (Exception e) {
        logger.debug("Errors: {}", r);
        result.addAllErrors(r);
      }
    }
    return users;
  }
 @Test
 public void testValidate_noContext() {
   BeanPropertyBindingResult errors =
       new BeanPropertyBindingResult(httpConnector, "httpConnector");
   httpConnector.validate(httpConnector, errors);
   assertEquals(1, errors.getFieldErrorCount());
   assertEquals("service.connector.port.required", errors.getFieldError("port").getCode());
 }
  @Test
  public void testValidTransaction() {
    Transaction trx = new Transaction(1L, 10D, "test", null);
    BeanPropertyBindingResult result = new BeanPropertyBindingResult(trx, "transaction");
    ValidationUtils.invokeValidator(validator, trx, result);

    assertThat(result.hasErrors(), equalTo(false));
  }
  @Test
  public void testTransactionIdInvalid() {
    Transaction trx = new Transaction(null, 10D, "test", null);

    BeanPropertyBindingResult result = new BeanPropertyBindingResult(trx, "transaction");
    ValidationUtils.invokeValidator(validator, trx, result);

    assertThat(result.hasErrors(), equalTo(true));
    assertThat(result.getErrorCount(), equalTo(1));
  }
  public void testWithMultiValueWithFormatter() throws Exception {
    this.tag.setPath("stringArray");
    this.tag.setItems(new Object[] {"   foo", "   bar", "   baz"});
    BeanPropertyBindingResult bindingResult =
        new BeanPropertyBindingResult(this.bean, COMMAND_NAME);
    FormattingConversionService cs = new FormattingConversionService();
    cs.addFormatterForFieldType(
        String.class,
        new Formatter<String>() {
          public String print(String object, Locale locale) {
            return object;
          }

          public String parse(String text, Locale locale) throws ParseException {
            return text.trim();
          }
        });
    bindingResult.initConversion(cs);
    getPageContext()
        .getRequest()
        .setAttribute(BindingResult.MODEL_KEY_PREFIX + COMMAND_NAME, bindingResult);

    int result = this.tag.doStartTag();
    assertEquals(Tag.SKIP_BODY, result);

    String output = getOutput();

    // wrap the output so it is valid XML
    output = "<doc>" + output + "</doc>";

    SAXReader reader = new SAXReader();
    Document document = reader.read(new StringReader(output));
    Element spanElement1 = (Element) document.getRootElement().elements().get(0);
    Element checkboxElement1 = (Element) spanElement1.elements().get(0);
    assertEquals("input", checkboxElement1.getName());
    assertEquals("checkbox", checkboxElement1.attribute("type").getValue());
    assertEquals("stringArray", checkboxElement1.attribute("name").getValue());
    assertEquals("checked", checkboxElement1.attribute("checked").getValue());
    assertEquals("   foo", checkboxElement1.attribute("value").getValue());
    Element spanElement2 = (Element) document.getRootElement().elements().get(1);
    Element checkboxElement2 = (Element) spanElement2.elements().get(0);
    assertEquals("input", checkboxElement2.getName());
    assertEquals("checkbox", checkboxElement2.attribute("type").getValue());
    assertEquals("stringArray", checkboxElement2.attribute("name").getValue());
    assertEquals("checked", checkboxElement2.attribute("checked").getValue());
    assertEquals("   bar", checkboxElement2.attribute("value").getValue());
    Element spanElement3 = (Element) document.getRootElement().elements().get(2);
    Element checkboxElement3 = (Element) spanElement3.elements().get(0);
    assertEquals("input", checkboxElement3.getName());
    assertEquals("checkbox", checkboxElement3.attribute("type").getValue());
    assertEquals("stringArray", checkboxElement3.attribute("name").getValue());
    assertNull("not checked", checkboxElement3.attribute("checked"));
    assertEquals("   baz", checkboxElement3.attribute("value").getValue());
  }
Example #6
0
  public void testMultiBind() throws Exception {
    BeanPropertyBindingResult result = new BeanPropertyBindingResult(new TestBean(), "testBean");
    result
        .getPropertyAccessor()
        .registerCustomEditor(TestBean.class, "friends", new FriendEditor());
    exposeBindingResult(result);

    BindStatus bindStatus = new BindStatus(getRequestContext(), "testBean.friends", false);

    getPageContext().setAttribute(SelectTag.LIST_VALUE_PAGE_ATTRIBUTE, bindStatus);
    this.tag.setValue(new TestBean("foo"));
    this.tag.doStartTag();
    this.tag.doEndTag();

    assertEquals("<option value=\"foo\">foo</option>", getOutput());
  }
  public void testWithCustomBinder() throws Exception {
    this.tag.setPath("myFloat");

    BeanPropertyBindingResult errors = new BeanPropertyBindingResult(this.rob, COMMAND_NAME);
    errors.getPropertyAccessor().registerCustomEditor(Float.class, new SimpleFloatEditor());
    exposeBindingResult(errors);

    assertEquals(Tag.SKIP_BODY, this.tag.doStartTag());

    String output = getOutput();
    assertTagOpened(output);
    assertTagClosed(output);

    assertContainsAttribute(output, "type", getType());
    assertValueAttribute(output, "12.34f");
  }
  public void testWithMultiValueWithEditor() throws Exception {
    this.tag.setPath("stringArray");
    this.tag.setItems(new Object[] {"   foo", "   bar", "   baz"});
    BeanPropertyBindingResult bindingResult =
        new BeanPropertyBindingResult(this.bean, COMMAND_NAME);
    MyStringTrimmerEditor editor = new MyStringTrimmerEditor();
    bindingResult.getPropertyEditorRegistry().registerCustomEditor(String.class, editor);
    getPageContext()
        .getRequest()
        .setAttribute(BindingResult.MODEL_KEY_PREFIX + COMMAND_NAME, bindingResult);

    int result = this.tag.doStartTag();
    assertEquals(Tag.SKIP_BODY, result);
    assertEquals(3, editor.allProcessedValues.size());

    String output = getOutput();

    // wrap the output so it is valid XML
    output = "<doc>" + output + "</doc>";

    SAXReader reader = new SAXReader();
    Document document = reader.read(new StringReader(output));
    Element spanElement1 = (Element) document.getRootElement().elements().get(0);
    Element checkboxElement1 = (Element) spanElement1.elements().get(0);
    assertEquals("input", checkboxElement1.getName());
    assertEquals("checkbox", checkboxElement1.attribute("type").getValue());
    assertEquals("stringArray", checkboxElement1.attribute("name").getValue());
    assertEquals("checked", checkboxElement1.attribute("checked").getValue());
    assertEquals("   foo", checkboxElement1.attribute("value").getValue());
    Element spanElement2 = (Element) document.getRootElement().elements().get(1);
    Element checkboxElement2 = (Element) spanElement2.elements().get(0);
    assertEquals("input", checkboxElement2.getName());
    assertEquals("checkbox", checkboxElement2.attribute("type").getValue());
    assertEquals("stringArray", checkboxElement2.attribute("name").getValue());
    assertEquals("checked", checkboxElement2.attribute("checked").getValue());
    assertEquals("   bar", checkboxElement2.attribute("value").getValue());
    Element spanElement3 = (Element) document.getRootElement().elements().get(2);
    Element checkboxElement3 = (Element) spanElement3.elements().get(0);
    assertEquals("input", checkboxElement3.getName());
    assertEquals("checkbox", checkboxElement3.attribute("type").getValue());
    assertEquals("stringArray", checkboxElement3.attribute("name").getValue());
    assertNull("not checked", checkboxElement3.attribute("checked"));
    assertEquals("   baz", checkboxElement3.attribute("value").getValue());
  }
  public void testWithErrors() throws Exception {
    this.tag.setPath("name");
    this.tag.setCssClass("good");
    this.tag.setCssErrorClass("bad");

    BeanPropertyBindingResult errors = new BeanPropertyBindingResult(this.rob, COMMAND_NAME);
    errors.rejectValue("name", "some.code", "Default Message");
    errors.rejectValue("name", "too.short", "Too Short");
    exposeBindingResult(errors);

    assertEquals(Tag.SKIP_BODY, this.tag.doStartTag());

    String output = getOutput();
    assertTagOpened(output);
    assertTagClosed(output);

    assertContainsAttribute(output, "type", getType());
    assertValueAttribute(output, "Rob");
    assertContainsAttribute(output, "class", "bad");
  }
  private boolean doValidate(PersistentEntity entity, Object o) {
    Validator v = datastore.getMappingContext().getEntityValidator(entity);
    if (v == null) {
      return true;
    }

    final Object skipValidation =
        datastore.getCurrentSession().getAttribute(o, SKIP_VALIDATION_ATTRIBUTE);
    if ((skipValidation instanceof Boolean) && (Boolean) skipValidation) {
      return true;
    }

    BeanPropertyBindingResult result = new BeanPropertyBindingResult(o, o.getClass().getName());
    v.validate(o, result);
    if (result.hasErrors()) {
      onErrors(o, result);
      return false;
    }

    return true;
  }
  public void testWithCollectionAndCustomEditor() throws Exception {
    PropertyEditor propertyEditor = new SimpleFloatEditor();

    TestBean target = new TestBean();
    target.setMyFloat(new Float("12.34"));

    BeanPropertyBindingResult errors = new BeanPropertyBindingResult(target, COMMAND_NAME);
    errors.getPropertyAccessor().registerCustomEditor(Float.class, propertyEditor);
    exposeBindingResult(errors);

    getPageContext()
        .setAttribute(
            SelectTag.LIST_VALUE_PAGE_ATTRIBUTE,
            new BindStatus(getRequestContext(), "testBean.myFloat", false));

    this.tag.setItems("${floats}");
    int result = this.tag.doStartTag();
    assertEquals(Tag.SKIP_BODY, result);
    String output = getOutput();
    output = "<doc>" + output + "</doc>";

    SAXReader reader = new SAXReader();
    Document document = reader.read(new StringReader(output));
    Element rootElement = document.getRootElement();

    List children = rootElement.elements();
    assertEquals("Incorrect number of children", 6, children.size());

    Element element = (Element) rootElement.selectSingleNode("option[text() = '12.34f']");
    assertNotNull("Option node should not be null", element);
    assertEquals("12.34 node not selected", "selected", element.attribute("selected").getValue());
    assertNull("No id rendered", element.attribute("id"));

    element = (Element) rootElement.selectSingleNode("option[text() = '12.35f']");
    assertNotNull("Option node should not be null", element);
    assertNull("12.35 node incorrectly selected", element.attribute("selected"));
    assertNull("No id rendered", element.attribute("id"));
  }
  public void testWithFloatCustom() throws Exception {
    PropertyEditor propertyEditor = new SimpleFloatEditor();
    BeanPropertyBindingResult errors = new BeanPropertyBindingResult(getTestBean(), COMMAND_NAME);
    errors.getPropertyAccessor().registerCustomEditor(Float.class, propertyEditor);
    exposeBindingResult(errors);

    this.tag.setPath("myFloat");

    Float[] array =
        new Float[] {
          new Float("12.30"), new Float("12.32"), new Float("12.34"), new Float("12.36"),
          new Float("12.38"), new Float("12.40"), new Float("12.42"), new Float("12.44"),
          new Float("12.46"), new Float("12.48")
        };

    this.tag.setItems(array);
    int result = this.tag.doStartTag();
    assertEquals(Tag.SKIP_BODY, result);

    String output = getWriter().toString();
    assertTrue(output.startsWith("<select "));
    assertTrue(output.endsWith("</select>"));

    SAXReader reader = new SAXReader();
    Document document = reader.read(new StringReader(output));
    Element rootElement = document.getRootElement();
    assertEquals("select", rootElement.getName());
    assertEquals("myFloat", rootElement.attribute("name").getValue());
    List children = rootElement.elements();
    assertEquals("Incorrect number of children", array.length, children.size());

    Element e = (Element) rootElement.selectSingleNode("option[text() = '12.34f']");
    assertEquals("'12.34' node not selected", "selected", e.attribute("selected").getValue());

    e = (Element) rootElement.selectSingleNode("option[text() = '12.32f']");
    assertNull("'12.32' node incorrectly selected", e.attribute("selected"));
  }
  void validateCompanies(List<VacancyTemplate> vacancyTemplates) {
    List<Company> companies = new ArrayList<>();
    Set<String> companyCaptions = new HashSet<String>();
    vacancyTemplates.forEach(
        vacancyTemplate -> companyCaptions.add(vacancyTemplate.getCompanyCaption()));

    companyCaptions.forEach(
        s -> {
          Company company = companyService.findByCaption(s);
          if (company == null) {
            company = new Company();
            company.setCaption(s);

            BeanPropertyBindingResult result = new BeanPropertyBindingResult(company, s);

            ValidationUtils.invokeValidator(validator, company, result);
            if (result.hasErrors()) {
              List<ObjectError> errors = result.getAllErrors();
              StringBuilder builder = new StringBuilder();
              builder.append(
                  String.format(
                      "Validate company '%s' . No of validation errors: %s", s, errors.size()));
              errors.forEach(
                  objectError -> {
                    builder.append("\n");
                    builder.append(objectError.getDefaultMessage());
                  });
              log.error(builder.toString());
            } else {
              companies.add(company);
            }
          }
        });

    saveAllCompanies(companies);
  }
  public void testCollectionOfPetsWithEditor() throws Exception {
    this.tag.setPath("pets");
    List allPets = new ArrayList();
    allPets.add(new ItemPet("Rudiger"));
    allPets.add(new ItemPet("Spot"));
    allPets.add(new ItemPet("Checkers"));
    allPets.add(new ItemPet("Fluffy"));
    allPets.add(new ItemPet("Mufty"));
    this.tag.setItems(allPets);
    this.tag.setItemLabel("label");
    this.tag.setId("myId");

    BeanPropertyBindingResult bindingResult =
        new BeanPropertyBindingResult(this.bean, COMMAND_NAME);
    PropertyEditorSupport editor = new ItemPet.CustomEditor();
    bindingResult.getPropertyEditorRegistry().registerCustomEditor(ItemPet.class, editor);
    getPageContext()
        .getRequest()
        .setAttribute(BindingResult.MODEL_KEY_PREFIX + COMMAND_NAME, bindingResult);

    int result = this.tag.doStartTag();
    assertEquals(Tag.SKIP_BODY, result);

    String output = getOutput();

    // wrap the output so it is valid XML
    output = "<doc>" + output + "</doc>";

    SAXReader reader = new SAXReader();
    Document document = reader.read(new StringReader(output));
    Element spanElement1 = (Element) document.getRootElement().elements().get(0);
    Element checkboxElement1 = (Element) spanElement1.elements().get(0);
    assertEquals("input", checkboxElement1.getName());
    assertEquals("checkbox", checkboxElement1.attribute("type").getValue());
    assertEquals("pets", checkboxElement1.attribute("name").getValue());
    assertEquals("checked", checkboxElement1.attribute("checked").getValue());
    assertEquals("Rudiger", checkboxElement1.attribute("value").getValue());
    assertEquals("RUDIGER", spanElement1.getStringValue());
    Element spanElement2 = (Element) document.getRootElement().elements().get(1);
    Element checkboxElement2 = (Element) spanElement2.elements().get(0);
    assertEquals("input", checkboxElement2.getName());
    assertEquals("checkbox", checkboxElement2.attribute("type").getValue());
    assertEquals("pets", checkboxElement2.attribute("name").getValue());
    assertEquals("checked", checkboxElement2.attribute("checked").getValue());
    assertEquals("Spot", checkboxElement2.attribute("value").getValue());
    assertEquals("SPOT", spanElement2.getStringValue());
    Element spanElement3 = (Element) document.getRootElement().elements().get(2);
    Element checkboxElement3 = (Element) spanElement3.elements().get(0);
    assertEquals("input", checkboxElement3.getName());
    assertEquals("checkbox", checkboxElement3.attribute("type").getValue());
    assertEquals("pets", checkboxElement3.attribute("name").getValue());
    assertNull("not checked", checkboxElement3.attribute("checked"));
    assertEquals("Checkers", checkboxElement3.attribute("value").getValue());
    assertEquals("CHECKERS", spanElement3.getStringValue());
    Element spanElement4 = (Element) document.getRootElement().elements().get(3);
    Element checkboxElement4 = (Element) spanElement4.elements().get(0);
    assertEquals("input", checkboxElement4.getName());
    assertEquals("checkbox", checkboxElement4.attribute("type").getValue());
    assertEquals("pets", checkboxElement4.attribute("name").getValue());
    assertEquals("checked", checkboxElement4.attribute("checked").getValue());
    assertEquals("Fluffy", checkboxElement4.attribute("value").getValue());
    assertEquals("FLUFFY", spanElement4.getStringValue());
    Element spanElement5 = (Element) document.getRootElement().elements().get(4);
    Element checkboxElement5 = (Element) spanElement5.elements().get(0);
    assertEquals("input", checkboxElement5.getName());
    assertEquals("checkbox", checkboxElement5.attribute("type").getValue());
    assertEquals("pets", checkboxElement5.attribute("name").getValue());
    assertEquals("checked", checkboxElement5.attribute("checked").getValue());
    assertEquals("Mufty", checkboxElement5.attribute("value").getValue());
    assertEquals("MUFTY", spanElement5.getStringValue());
  }
  public void testNew() throws Exception {
    MockHttpServletRequest request = new MockHttpServletRequest();
    request = new MockHttpServletRequest("GET", "/workCodeForm.html");
    MockHttpServletResponse response = new MockHttpServletResponse();
    simpleDispatcherServlet.service(request, response);
    ModelAndView mv = child.handleRequest(request, response);

    Map m = mv.getModel();
    log.debug("m = " + m);
    WorkCodeFormBacking backing = (WorkCodeFormBacking) m.get("workCodeFormBacking");
    log.debug(Constants.toReflexString(backing));

    MockPageContext ctx = new MockPageContext();
    Iterator i = m.keySet().iterator();
    while (i.hasNext()) {
      String key = (String) i.next();
      ctx.setAttribute(key, m.get(key));
    }

    RequestContext r = new RequestContext(request, m);

    BindStatus b = r.getBindStatus("workCodeFormBacking.workCode.description");
    log.debug("expression = " + b.getExpression());
    log.debug("value = " + b.getValue());

    String description =
        (String)
            ExpressionEvaluationUtils.evaluate(
                "test", "${workCodeFormBacking.workCode.description}", String.class, ctx);

    // request.addParameter(name, description);
    String parttime =
        (String)
            ExpressionEvaluationUtils.evaluate(
                "test", "${workCodeFormBacking.workCode.parttime}", String.class, ctx);
    String code =
        (String)
            ExpressionEvaluationUtils.evaluate(
                "test", "${workCodeFormBacking.workCode.code}", String.class, ctx);
    String id =
        (String)
            ExpressionEvaluationUtils.evaluate(
                "test", "${workCodeFormBacking.workCode.id}", String.class, ctx);
    String save =
        (String)
            ExpressionEvaluationUtils.evaluate(
                "test", "${workCodeFormBacking.save}", String.class, ctx);

    log.debug("description = " + description);
    log.debug("parttime = " + parttime);
    log.debug("code = " + code);
    log.debug("id = " + id);
    log.debug("save = " + save);

    HashMap newMap = new HashMap();
    newMap.put(
        r.getBindStatus("workCodeFormBacking.workCode.description").getExpression(), description);
    newMap.put(r.getBindStatus("workCodeFormBacking.workCode.parttime").getExpression(), parttime);
    newMap.put(r.getBindStatus("workCodeFormBacking.workCode.code").getExpression(), code);
    newMap.put(r.getBindStatus("workCodeFormBacking.workCode.id").getExpression(), id);
    newMap.put(r.getBindStatus("workCodeFormBacking.save").getExpression(), "save");

    request = new MockHttpServletRequest("POST", "/workCodeForm.html");
    i = newMap.keySet().iterator();
    while (i.hasNext()) {
      String key = (String) i.next();
      log.debug("add parameter " + key + "  " + newMap.get(key));
      request.addParameter(key, (String) newMap.get(key));
    }
    mv = child.handleRequest(request, response);
    m = mv.getModel();
    log.debug("m = " + m);
    BeanPropertyBindingResult br =
        (BeanPropertyBindingResult)
            m.get("org.springframework.validation.BindingResult.workCodeFormBacking");
    log.debug("field errors " + br.getFieldErrorCount());
    log.debug("errors " + br.getErrorCount());
    assertTrue(br.getFieldError("workCode.code") != null);
    assertTrue(br.getFieldError("workCode.description") != null);
    backing = (WorkCodeFormBacking) m.get("workCodeFormBacking");
    log.debug(response.getErrorMessage());
    log.debug(Constants.toReflexString(backing));
    log.debug("view = " + mv.getViewName());
    assertTrue("workCodeForm".equals(mv.getViewName()));
  }
Example #16
0
  @Test
  public void webMvcConfigurerExtensionHooks() throws Exception {

    StaticWebApplicationContext appCxt = new StaticWebApplicationContext();
    appCxt.setServletContext(new MockServletContext(new FileSystemResourceLoader()));
    appCxt.registerSingleton("controller", TestController.class);

    WebConfig webConfig = new WebConfig();
    webConfig.setApplicationContext(appCxt);
    webConfig.setServletContext(appCxt.getServletContext());

    String actual = webConfig.mvcConversionService().convert(new TestBean(), String.class);
    assertEquals("converted", actual);

    RequestMappingHandlerAdapter adapter = webConfig.requestMappingHandlerAdapter();
    assertEquals(1, adapter.getMessageConverters().size());

    ConfigurableWebBindingInitializer initializer =
        (ConfigurableWebBindingInitializer) adapter.getWebBindingInitializer();
    assertNotNull(initializer);

    BeanPropertyBindingResult bindingResult = new BeanPropertyBindingResult(null, "");
    initializer.getValidator().validate(null, bindingResult);
    assertEquals("invalid", bindingResult.getAllErrors().get(0).getCode());

    @SuppressWarnings("unchecked")
    List<HandlerMethodArgumentResolver> argResolvers =
        (List<HandlerMethodArgumentResolver>)
            new DirectFieldAccessor(adapter).getPropertyValue("customArgumentResolvers");
    assertEquals(1, argResolvers.size());

    @SuppressWarnings("unchecked")
    List<HandlerMethodReturnValueHandler> handlers =
        (List<HandlerMethodReturnValueHandler>)
            new DirectFieldAccessor(adapter).getPropertyValue("customReturnValueHandlers");
    assertEquals(1, handlers.size());

    HandlerExceptionResolverComposite composite =
        (HandlerExceptionResolverComposite) webConfig.handlerExceptionResolver();
    assertEquals(1, composite.getExceptionResolvers().size());

    RequestMappingHandlerMapping rmHandlerMapping = webConfig.requestMappingHandlerMapping();
    rmHandlerMapping.setApplicationContext(appCxt);
    HandlerExecutionChain chain =
        rmHandlerMapping.getHandler(new MockHttpServletRequest("GET", "/"));
    assertNotNull(chain.getInterceptors());
    assertEquals(2, chain.getInterceptors().length);
    assertEquals(LocaleChangeInterceptor.class, chain.getInterceptors()[0].getClass());
    assertEquals(ConversionServiceExposingInterceptor.class, chain.getInterceptors()[1].getClass());

    AbstractHandlerMapping handlerMapping =
        (AbstractHandlerMapping) webConfig.viewControllerHandlerMapping();
    handlerMapping.setApplicationContext(appCxt);
    assertNotNull(handlerMapping);
    assertEquals(1, handlerMapping.getOrder());
    HandlerExecutionChain handler =
        handlerMapping.getHandler(new MockHttpServletRequest("GET", "/path"));
    assertNotNull(handler.getHandler());

    handlerMapping = (AbstractHandlerMapping) webConfig.resourceHandlerMapping();
    handlerMapping.setApplicationContext(appCxt);
    assertNotNull(handlerMapping);
    assertEquals(Integer.MAX_VALUE - 1, handlerMapping.getOrder());
    handler = handlerMapping.getHandler(new MockHttpServletRequest("GET", "/resources/foo.gif"));
    assertNotNull(handler.getHandler());

    handlerMapping = (AbstractHandlerMapping) webConfig.defaultServletHandlerMapping();
    handlerMapping.setApplicationContext(appCxt);
    assertNotNull(handlerMapping);
    assertEquals(Integer.MAX_VALUE, handlerMapping.getOrder());
    handler = handlerMapping.getHandler(new MockHttpServletRequest("GET", "/anyPath"));
    assertNotNull(handler.getHandler());
  }
  List<Vacancy> validateVacancies(List<VacancyTemplate> vacancyTemplates) {
    Set<String> vacancyURLs = new HashSet<>();
    List<Vacancy> vacancies = new ArrayList<>();
    for (VacancyTemplate vt : vacancyTemplates) {
      Company company = companyService.findByCaption(vt.getCompanyCaption());
      if (company == null)
        log.error(
            "Job missing: '{}'. Reason: company '{}' not found",
            vt.getVacancyCaption(),
            vt.getCompanyCaption());
      else if (!vacancyURLs.contains(vt.getVacancyUrl())) {

        String pathSegment;

        try {
          pathSegment =
              UriUtils.encodePathSegment(vt.getVacancyUrl(), WebUtils.DEFAULT_CHARACTER_ENCODING);
        } catch (UnsupportedEncodingException uee) {
          log.error(uee.toString());
          continue;
        }

        vacancyURLs.add(pathSegment);

        Vacancy vacancy = new Vacancy();
        vacancy.setId(pathSegment);
        vacancy.setCaption(vt.getVacancyCaption());
        vacancy.setUrl(vt.getVacancyUrl());
        vacancy.setPriceMax(vt.getPriceMax());
        vacancy.setPriceMin(vt.getPriceMin());
        vacancy.setRegistrationDate(vt.getRegistrationDate());
        vacancy.setCurrency(currencyService.findByCaption(vt.getCurrencyCaption()));
        vacancy.setSite(vt.getSite());
        vacancy.setCity(vt.getCity());
        vacancy.setCompany(company);

        BeanPropertyBindingResult result =
            new BeanPropertyBindingResult(vacancy, vacancy.getCaption());

        ValidationUtils.invokeValidator(validator, vacancy, result);
        if (result.hasErrors()) {
          List<ObjectError> errors = result.getAllErrors();

          StringBuilder builder = new StringBuilder();
          builder.append(
              String.format(
                  "Validate vacancy '%s' . No of validation errors: %s",
                  vacancy.getCaption(), errors.size()));
          errors.forEach(
              objectError -> {
                builder.append("\n");
                builder.append(objectError.getDefaultMessage());
              });
          log.error(builder.toString());
        } else {
          vacancies.add(vacancy);
        }
      }
    }

    return vacancies;
  }