2015-03-19 9 views
1

Я пытаюсь реализовать пользовательский валидатор, как показано ниже. Это то, что появляется в моем классе EmailValidator.java который находится внутри пакета валидаторов:Невозможно загрузить аннотированный класс: validators.EmailValidator, вызванный java.lang.ClassNotFoundException: validators.EmailValidator

package validators; 

import javax.faces.application.FacesMessage; 
import javax.faces.component.UIComponent; 
import javax.faces.context.FacesContext; 
import javax.faces.validator.FacesValidator; 
import javax.faces.validator.Validator; 
import javax.faces.validator.ValidatorException; 
import javax.mail.internet.AddressException; 
import javax.mail.internet.InternetAddress; 

@FacesValidator("validators.EmailValidator") 
public class EmailValidator implements Validator { 

    private static boolean isValidEmailAddress(String email) { 
     boolean result = true; 
     try { 
      InternetAddress emailAddr = new InternetAddress(email); 
      emailAddr.validate(); 
     } catch (AddressException ex) { 
      result = false; 
     } 
     return result; 
    } 

    /** 
    * 
    * @param context 
    * @param component 
    * @param value 
    */ 
    @Override 
    public void validate(FacesContext context, 
         UIComponent component, 
         Object value) throws ValidatorException { 
     try { 
      String emailAddress = (String)value; 

      if (!isValidEmailAddress(emailAddress)) { 
       FacesMessage message = new FacesMessage("Email address format is not valid."); 
       throw new ValidatorException(message); 
      } 

     } catch (ClassCastException e) { 
      FacesMessage message = new FacesMessage("Value must be a a String."); 
      throw new ValidatorException(message); 
     } 

    } 

} 

Это является частью моей страницы JSP, которая использует этот валидатор:

<b:inputText id="email" placeholder="Email" required="true" requiredMessage="Value is required" value="#{createAccountBean.email}"> 
     <f:validator validatorId="validators.EmailValidator" /> 
</b:inputText> 
<h:message id="emailMsg" style="color: red" for="email" /> 

Но это ошибка сервера GlassFish дает мне:

Severe: Unable to load annotated class: validators.EmailValidator 
Severe: java.lang.ClassNotFoundException: validators.EmailValidator 
    at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1783) 
    at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1633) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:340) 
    at com.sun.faces.util.Util.loadClass(Util.java:325) 
    at com.sun.faces.config.AnnotationScanner.processClassList(AnnotationScanner.java:309) 
    at com.sun.faces.config.DelegateToGlassFishAnnotationScanner.getAnnotatedClasses(DelegateToGlassFishAnnotationScanner.java:85) 
    at com.sun.faces.config.DelegatingAnnotationProvider.getAnnotatedClasses(DelegatingAnnotationProvider.java:85) 
    at com.sun.faces.config.ConfigManager$AnnotationScanTask.call(ConfigManager.java:932) 
    at com.sun.faces.config.ConfigManager$AnnotationScanTask.call(ConfigManager.java:884) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at com.sun.faces.config.ConfigManager.initialize(ConfigManager.java:383) 
    at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:221) 
    at org.apache.catalina.core.StandardContext.contextListenerStart(StandardContext.java:5394) 
    at com.sun.enterprise.web.WebModule.contextListenerStart(WebModule.java:743) 
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:5932) 
    at com.sun.enterprise.web.WebModule.start(WebModule.java:691) 
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:1041) 
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:1024) 
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:747) 
    at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:2286) 
    at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:1932) 
    at com.sun.enterprise.web.WebApplication.start(WebApplication.java:139) 
    at org.glassfish.internal.data.EngineRef.start(EngineRef.java:122) 
    at org.glassfish.internal.data.ModuleInfo.start(ModuleInfo.java:291) 
    at org.glassfish.internal.data.ApplicationInfo.start(ApplicationInfo.java:352) 
    at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:500) 
    at com.sun.enterprise.v3.server.ApplicationLoaderService.processApplication(ApplicationLoaderService.java:406) 
    at com.sun.enterprise.v3.server.ApplicationLoaderService.postConstruct(ApplicationLoaderService.java:243) 
    at org.jvnet.hk2.internal.ClazzCreator.postConstructMe(ClazzCreator.java:329) 
    at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:377) 
    at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:461) 
    at org.glassfish.hk2.runlevel.internal.AsyncRunLevelContext.findOrCreate(AsyncRunLevelContext.java:227) 
    at org.glassfish.hk2.runlevel.RunLevelContext.findOrCreate(RunLevelContext.java:84) 
    at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2258) 
    at org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:105) 
    at org.jvnet.hk2.internal.ServiceHandleImpl.getService(ServiceHandleImpl.java:87) 
    at org.glassfish.hk2.runlevel.internal.CurrentTaskFuture$QueueRunner.oneJob(CurrentTaskFuture.java:1162) 
    at org.glassfish.hk2.runlevel.internal.CurrentTaskFuture$QueueRunner.run(CurrentTaskFuture.java:1147) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

Я не уверен, что я делаю неправильно. Любые намеки будут оценены.

+0

Где находится класс? –

+0

Вы упомянули JSF 1.x? В противном случае тег [jsp] не нужен. – Tiny

+1

@ По-моему, это должно быть 2+. В противном случае он не сможет скомпилировать его, поскольку аннотация '@ FacesValidator' будет отсутствовать. :) –

ответ

-1

попытаться изменить ClassNotFoundException в Исключение

+0

ClassCastException к исключению;) –