# NullPointerException auf validator methode Teil2?



## Fantasma (10. Jul 2011)

Hallo ich habe ein sehr Ähnliches Problem wie Bytemute:

Das problem ist wirklich sehr ähnlich, nur dass ich den Validator in eine eigene Klasse geschrieben habe. Auch hier soll der Validator prüfen, ob ein User bereits in der DB vorhanden ist, und Ruft indirekt einen DB Zugriff auf. (Das der DB Zugriff als solches funktioniert weis ich, weil er auch an anderen Stellen aufgerufen wird.)

Dennoch bekomme ich folgende Fehlermeldung:

```
java.lang.NullPointerException
	at com.vista.util.UsuarioExisteValidator.validate(UsuarioExisteValidator.java:32)
	at javax.faces.component.UIInput.validateValue(UIInput.java:1142)
	at javax.faces.component.UIInput.validate(UIInput.java:960)
	at javax.faces.component.UIInput.executeValidate(UIInput.java:1204)
	at javax.faces.component.UIInput.processValidators(UIInput.java:693)
	at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1081)
	at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1081)
	at javax.faces.component.UIForm.processValidators(UIForm.java:240)
	at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1081)
	at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1081)
	at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1159)
	at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:72)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:308)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:324)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:242)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:181)
	at org.jboss.modcluster.catalina.CatalinaContext$RequestListenerValve.event(CatalinaContext.java:285)
	at org.jboss.modcluster.catalina.CatalinaContext$RequestListenerValve.invoke(CatalinaContext.java:261)
	at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:88)
	at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:100)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.jboss.web.tomcat.service.request.ActiveRequestResponseCacheValve.invoke(ActiveRequestResponseCacheValve.java:53)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:362)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:654)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:951)
	at java.lang.Thread.run(Unknown Source)
```

Der Aufruf vom Validator im xhtml:

```
<h:outputLabel for="login" value="Login: *" />  
           		<p:inputText id="login"   
           			value="#{loginBean.login}" required="true" label="Login">  
           		<f:validator validatorId="usuarioExisteValidator" />
           		</p:inputText>  
           		<p:message for="login" />
```

Der Validator selbst:

```
@FacesValidator(value = "usuarioExisteValidator")
public class UsuarioExisteValidator implements Validator, Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	@EJB
	private ServicioSeguridad servSegur;

	@Override
	public void validate(FacesContext context, UIComponent toValidate, Object value)
			throws ValidatorException {
		
		String login = (String) value; 
		
		if (servSegur.existeUsuario(login)){
			FacesMessage message = new FacesMessage("Usuario login: "+login+" ya existe!");
			throw new ValidatorException(message);
		}
	}

}
```

Die Methode servSegur.existeUsuario in einer StatlessSessionBean:

```
public boolean existeUsuario(String login){
		Usuario compUsuario = usuario.buscarUsuario(login);
		if (compUsuario==null)return false;
		else return true;
		
	}
```

Und die Methode usuario.buscarUsuario(login) aus einem DAO (der auch als StatlessSessionBean implementiert ist.):*

```
public Usuario buscarUsuario(String login) {
		try{
			return em.createNamedQuery("Usuario.findByLogin", Usuario.class).setParameter("login", login)
				.getSingleResult();
		}catch (EntityNotFoundException ex){
			return null;
		}catch (NoResultException ex){
			return null;
		}
	}
```

* Wie gesagt diese letzte Methode wird auch noch von woanders aufgerufen und funktioniert. Ich teste 2x ob ein user schon existiert. einmal in der UI ueber den Validator(funst nicht), und einmal in der Logik in der Methode, die einen neuen User erstellt und diesen in die DB einfügt(funst). (Ist ein wunsch von unserem Prof sowas doppelt zu testen, deshalb).


----------



## Fantasma (11. Jul 2011)

Kann mir wirklich niemand helfen? braucht ihr vielleicht noch mehr infos?


----------



## Sym (11. Jul 2011)

Also,

in der Fehlermeldung steht ja drin, in welcher Zeile die NPE auftritt. Das ist doch ein Anhaltspunkt. Dann kannst Du das ja auch mit dem Debugger bearbeiten und stellst wahrscheinlich fest, dass die Bean null ist.

Und das könnte daran liegen, dass es sich um einen Validator handelt und Du die Bean nicht injecten kannst. (ByPassInterceptor ist hier ein Stichwort).

Was ist denn null?


----------

