0

My Custom Validation Classes

1.UserAvailablity.java


    package com.vicky.finalYearProject.customValidations;
        
        import java.lang.annotation.ElementType;
        import java.lang.annotation.Retention;
        import java.lang.annotation.RetentionPolicy;
        import java.lang.annotation.Target;
        
        import javax.validation.Constraint;
        import javax.validation.Payload;
        
        @Constraint(validatedBy = UserAvailabilityValidator.class)
        @Target({ElementType.METHOD, ElementType.FIELD})
        @Retention(RetentionPolicy.RUNTIME)
        public @interface UserAvailability {
            
            public String message() default "Email is already Registered";
            
            public Class<?>[] groups() default { };
            
            public Class<? extends Payload>[] payload() default { };
            
        }


2.UserAvailabilityValidator.class


    package com.vicky.finalYearProject.customValidations;
        
        import javax.validation.ConstraintValidator;
        import javax.validation.ConstraintValidatorContext;
        
        import org.springframework.beans.factory.annotation.Autowired;
        
        import com.vicky.finalYearProject.Service.CheckUserAvailabilityService;
        
        public class UserAvailabilityValidator implements ConstraintValidator<UserAvailability, String>{
        
            @Autowired
            CheckUserAvailabilityService availabilityService;
            
            @Override
            public void initialize(UserAvailability constraintAnnotation) {
                ConstraintValidator.super.initialize(constraintAnnotation);
                
            }
            
            @Override
            public boolean isValid(String email, ConstraintValidatorContext context) {
                
                boolean available = false;
        
                available = availabilityService.isAvailable(email);//return true or false
                        
                return available;
            }
        
        }


My Entities

  1. User.java

    package com.vicky.finalYearProject.Entity;
        
        import javax.persistence.Column;
        import javax.persistence.Entity;
        import javax.persistence.GeneratedValue;
        import javax.persistence.GenerationType;
        import javax.persistence.Id;
        import javax.persistence.Table;
        import javax.persistence.UniqueConstraint;
        import javax.validation.Valid;
        import javax.validation.constraints.NotNull;
        import javax.validation.constraints.Pattern;
        
        import org.hibernate.validator.constraints.Length;
        import org.springframework.stereotype.Component;
        
        import com.vicky.finalYearProject.customValidations.UserAvailability;
        
        @Entity
        @Component
        @Table( name = "customers",
                    uniqueConstraints=
                    @UniqueConstraint(columnNames={"email"})
                )
        public class User {
            
            @Id
            @Column(name = "id")
            @GeneratedValue(strategy = GenerationType.IDENTITY)
            private int id;
            
            @NotNull
            @Column(name = "email", length = 50)
            @Pattern(regexp = "^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$")
            @UserAvailability//custom validator
            private String email;
            
            @NotNull
            @Column(name = "password")
            @Length(min = 1 , message = "Enter Valid Password")
            private String password;
            
            @NotNull
            @Column(name = "firstName")
            @Length(min = 1 , message = "Enter Valid firstName")
            private String firstName;
            
            @NotNull
            @Column(name = "middleName")
            @Length(min = 1 , message = "Enter Valid middleName")
            private String middleName;
            
            @NotNull
            @Column(name = "lastName")
            @Length(min = 1 , message = "Enter Valid lastName")
            private String lastName;
            
            public int getId() {
                return id;
            }
        
            public void setId(int id) {
                this.id = id;
            }
        
            public String getEmail() {
                return email;
            }
        
            public void setEmail(String email) {
                this.email = email;
            }
        
            public String getPassword() {
                return password;
            }
        
            public void setPassword(String password) {
                this.password = password;
            }
        
            public String getFirstName() {
                return firstName;
            }
        
            public void setFirstName(String firstName) {
                this.firstName = firstName;
            }
        
            public String getMiddleName() {
                return middleName;
            }
        
            public void setMiddleName(String middleName) {
                this.middleName = middleName;
            }
        
            public String getLastName() {
                return lastName;
            }
        
            public void setLastName(String lastName) {
                this.lastName = lastName;
            }
        
            @Override
            public String toString() {
                return "User [id=" + id + ", email=" + email + ", password=" + password + ", firstName=" + firstName
                        + ", middleName=" + middleName + ", lastName=" + lastName + "]";
            }
        }


My xml form Mapping with User class... by form:form

*

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib prefix= "form" uri ="http://www.springframework.org/tags/form" %>

<body bgcolor = "black">
    <h1 style="color: white">ADD USER INFORMATION</h1>
    
    <hr>
    
    <div style="color: white">
    
        <form:form  action ="${pageContext.request.contextPath}/user/conformation" 
                    modelAttribute="user" 
                    method="post">
                    
                    First Name : <form:input path="firstName"/>
                    <form:errors path ="firstName" cssClass="error"/>
                    <br><br>
                    
                    Middle Name: <form:input path="middleName"/>
                    <form:errors path ="middleName" cssClass="error"/>
                    <br><br>
                    
                    Last Name: <form:input path="lastName"/>
                    <form:errors path ="lastName" cssClass="error"/>
                    <br><br>
                    
                    Email : <form:input path="email"/>
                    <form:errors path ="email" cssClass="error"/>
                    <br><br>
                    
                    password : <form:input type="password" path="password"/>
                    <form:errors path ="password" cssClass="error"/>
                    <br><br>                    
                    
                    <input type = "Submit" value="next"/>
                    
        </form:form>
        
    </div>
    
    <hr>
    
    <a href="${pageContext.request.contextPath}/" style="color: white"> cancle </a>
    
</body>
</html>

*

ERROR I GOT when I submit My jsp page


    Aug 11, 2020 12:29:33 PM org.hibernate.hql.internal.QueryTranslatorFactoryInitiator initiateService
        INFO: HHH000397: Using ASTQueryTranslatorFactory
        Hibernate: select user0_.id as id1_0_, user0_.email as email2_0_, user0_.firstName as firstNam3_0_, user0_.lastName as lastName4_0_, user0_.middleName as middleNa5_0_, user0_.password as password6_0_ from customers user0_ where user0_.email='sdghag@jsjdhak.zdhzg'
        Aug 11, 2020 12:29:40 PM org.apache.catalina.core.StandardWrapperValve invoke
        SEVERE: Servlet.service() for servlet [dispatcher] in context with path [/finalYearProject2] threw exception [Request processing failed; nested exception is javax.validation.ValidationException: HV000028: Unexpected exception during isValid call.] with root cause
        java.lang.NullPointerException
            at com.vicky.finalYearProject.customValidations.UserAvailabilityValidator.isValid(UserAvailabilityValidator.java:26)
            at com.vicky.finalYearProject.customValidations.UserAvailabilityValidator.isValid(UserAvailabilityValidator.java:1)
            at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateSingleConstraint(ConstraintTree.java:180)
            at org.hibernate.validator.internal.engine.constraintvalidation.SimpleConstraintTree.validateConstraints(SimpleConstraintTree.java:62)
            at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateConstraints(ConstraintTree.java:75)
            at org.hibernate.validator.internal.metadata.core.MetaConstraint.doValidateConstraint(MetaConstraint.java:130)
            at org.hibernate.validator.internal.metadata.core.MetaConstraint.validateConstraint(MetaConstraint.java:123)
            at org.hibernate.validator.internal.engine.ValidatorImpl.validateMetaConstraint(ValidatorImpl.java:555)
            at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForSingleDefaultGroupElement(ValidatorImpl.java:518)
            at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForDefaultGroup(ValidatorImpl.java:488)
            at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForCurrentGroup(ValidatorImpl.java:450)
            at org.hibernate.validator.internal.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:400)
            at org.hibernate.validator.internal.engine.ValidatorImpl.validate(ValidatorImpl.java:172)
            at org.hibernate.cfg.beanvalidation.BeanValidationEventListener.validate(BeanValidationEventListener.java:116)
            at org.hibernate.cfg.beanvalidation.BeanValidationEventListener.onPreInsert(BeanValidationEventListener.java:80)
            at org.hibernate.action.internal.EntityIdentityInsertAction.preInsert(EntityIdentityInsertAction.java:197)
            at org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:75)
            at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:645)
            at org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:282)
            at org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:263)
            at org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:317)
            at org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:332)
            at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:289)
            at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:196)
            at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:127)
            at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:192)
            at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:38)
            at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:177)
            at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:32)
            at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:73)
            at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:713)
            at org.hibernate.internal.SessionImpl.save(SessionImpl.java:705)
            at org.hibernate.internal.SessionImpl.save(SessionImpl.java:700)
            at com.vicky.finalYearProject.DAO.UserDaoImplimantation.addUser(UserDaoImplimantation.java:16)
            at com.vicky.finalYearProject.Service.PurchaseService.purchase(PurchaseService.java:46)
            at com.vicky.finalYearProject.Controller.UserController.purchaseconformed(UserController.java:74)
            at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
            at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.base/java.lang.reflect.Method.invoke(Method.java:567)
            at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)
            at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
            at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)
            at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:888)
            at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793)
            at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
            at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)
            at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
            at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
            at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
            at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
            at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
            at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:320)
            at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:126)
            at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:90)
            at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
            at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:118)
            at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
            at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137)
            at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
            at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)
            at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
            at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:158)
            at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
            at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)
            at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
            at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:200)
            at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
            at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116)
            at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
            at org.springframework.security.web.csrf.CsrfFilter.doFilterInternal(CsrfFilter.java:117)
            at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
            at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
            at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:92)
            at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:77)
            at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
            at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
            at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)
            at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
            at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56)
            at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
            at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
            at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:215)
            at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:178)
            at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)
            at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
            at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
            at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
            at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
            at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
            at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
            at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)
            at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
            at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
            at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373)
            at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
            at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
            at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590)
            at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
            at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
            at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
            at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
            at java.base/java.lang.Thread.run(Thread.java:835)

Hibernaete.cfg.xml


    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC
            "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
            "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
        <session-factory>
              <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
              <property name="hibernate.connection.password">120699@mysqL</property>
              <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/final_year_project</property>
              <property name="hibernate.connection.username">root</property>
              <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
              <property name="hbm2ddl.auto">update</property>
              <property name="show_sql">true</property>
        </session-factory>
    </hibernate-configuration>

Spring Configuration

1.ViewResolverConfigrationClass.java


    package com.vicky.finalYearProject.Configuration;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.ViewResolver;
    import org.springframework.web.servlet.config.annotation.EnableWebMvc;
    import org.springframework.web.servlet.view.InternalResourceViewResolver;
    
    @Configuration
    @EnableWebMvc
    @ComponentScan(basePackages = "com.vicky.finalYearProject")
    public class ViewResolverConfigrationClass {
    
        @Bean
        public ViewResolver viewResolver() {
            
            InternalResourceViewResolver viewresolver = new InternalResourceViewResolver();
            
            viewresolver.setPrefix("/WEB-INF/view/");
            
            viewresolver.setSuffix(".jsp");
            
            return viewresolver;
        }
    }


2.DispecherServletConfigClass.java


    package com.vicky.finalYearProject.Configuration;
    
    import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
    
    public class DispecherServletConfigClass extends AbstractAnnotationConfigDispatcherServletInitializer {
    
        @Override
        protected Class<?>[] getRootConfigClasses() {
            return null;
        }
    
        @Override
        protected Class<?>[] getServletConfigClasses() {
            return new Class[] {ViewResolverConfigrationClass.class};
        }
    
        @Override
        protected String[] getServletMappings() {
            return new String[] {"/"};
        }
    }

I tried alot to figure out Even it works well without @UserAvailability in User.java Class
EVEN it works well with @UserAvailability when UserAvailabilityValidator.IsValid() returns false
Can Anyone please solve this issue For me...Thank you`enter code here

I THINK HIBERNATE IS AGAIN VALIDATING ALL CONSTRAINT AFTER SPRING THIS ERROR ERROR IS COME WHEN I TRY TO USE SAVE METHOD IN HIBERNATE

UserController.java


    package com.vicky.finalYearProject.Controller;
    
    import java.util.List;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.validation.Valid;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.validation.BindingResult;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.ModelAttribute;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    import com.vicky.finalYearProject.Entity.Department;
    import com.vicky.finalYearProject.Entity.Student;
    import com.vicky.finalYearProject.Entity.University;
    import com.vicky.finalYearProject.Service.StudentSignupService;
    
    @Controller
    @RequestMapping("/student")
    public class StudentController {
    
        @Autowired
        Student student;
        
        @Autowired
        StudentSignupService studentSignupSvc;
        
        List<String> universities;
        List<String> departments;
        
        @GetMapping("/signup")
        public String studentLogin(Model model) {
            
            universities = studentSignupSvc.getAllUniversity();
            departments = studentSignupSvc.getAllDepartment();
            
            model.addAttribute("student", student);
            model.addAttribute("universityOptions", universities);
            model.addAttribute("departmentOptions", departments);
            
            return "student/signup";
        }
        
        @PostMapping("/conformation") 
        public String studentConformation(
                            @Valid @ModelAttribute("student") Student student,
                            BindingResult result,
                            Model model,
                            HttpServletRequest request) {
            
            if(result.hasErrors()) {
                model.addAttribute("universityOptions", universities);
                model.addAttribute("departmentOptions", departments);
                return "student/signup";
            }
            else {
                
                String universityName = (String)request.getParameter("theUniversity");
                String departmentName = (String)request.getParameter("theDepartment");
                
                
                University university = studentSignupSvc.getUniversity(universityName);
                Department department = studentSignupSvc.getDepartment(departmentName);
                
                
                student.setUniversity(university);
                student.setDepartment(department);
    
                studentSignupSvc.signup(student);  //CAUSE OF ERROR If I comment this line everything work fine
//and sigup service is perfactly auto wired i checked it.
                
                return "student/studentConformation";
            }       
        }
    }

  • Does this answer your question? [What is a NullPointerException, and how do I fix it?](https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it) – Stultuske Aug 11 '20 at 07:38
  • Can we see your Spring configuration? Because if you're using component scanning your `UserAvailabilityValidator` class is missing an annotation – Jeroen Steenbeeke Aug 11 '20 at 07:45
  • yes i am using component scanning....my all configurations are Annotation based which is missing annotation @JeroenSteenbeeke – Vicky Manavadariya Aug 11 '20 at 07:50
  • You might need to add `@Component` to your `UserAvailabilityValidator`, though the answer by @kalusn suggests this may not be needed – Jeroen Steenbeeke Aug 11 '20 at 09:11

2 Answers2

0

In the UserAvailabilityValidator class, is the availabilityService well autowired ? If the service is null, you will have this error.

0

Spring ought to inject dependencies into any ConstraintValidator-implementing class, even without marking them as @Bean or @Component, so I'm guessing you are missing the spring wiring.

Do you have a LocalValidatorFactoryBean in your spring configuration? From the documentation:

import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;

@Configuration
public class AppConfig {

    @Bean
    public LocalValidatorFactoryBean validator() {
        return new LocalValidatorFactoryBean();
    }
}
kalusn
  • 76
  • 4
  • thank you for replying bro but it doesnt work...a Applied .. Same error occures – Vicky Manavadariya Aug 11 '20 at 08:23
  • Try to manually inject and use javax.validation.Validator in your UserController, and see if it works. I seem to recall that there is a bug/bad behaviour between hibernate and spring when it comes to validation; hibernate won't/doesn't autowire the spring validators. – kalusn Aug 11 '20 at 08:34
  • thank you so much i got it....Ya it doesnt auto wired bro...thanks alot – Vicky Manavadariya Aug 11 '20 at 09:58