Foros del Web » Programación para mayores de 30 ;) » Java »

Problema con metodo execute y @Result struts2

Estas en el tema de Problema con metodo execute y @Result struts2 en el foro de Java en Foros del Web. Hola, estoy utilizando struts2 y me he estancado en un Action, utilizo un método execute para obtener una lista de objetos y que luego la ...
  #1 (permalink)  
Antiguo 10/09/2009, 02:13
 
Fecha de Ingreso: diciembre-2008
Mensajes: 233
Antigüedad: 15 años, 4 meses
Puntos: 1
Problema con metodo execute y @Result struts2

Hola, estoy utilizando struts2 y me he estancado en un Action, utilizo un método execute para obtener una lista de objetos y que luego la página jsp me lo muestre, pero me da un error, parece que no encuentra la página jsp, y por lo que he visto por internet la anotación @Result parece correcta. El código del action es el siguiente:

package es.aena.sgma.controlresiduos.web.struts.action;

import java.util.Collection;

import org.apache.struts2.convention.annotation.ParentPac kage;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.interceptor.validation.SkipVali dation;

import com.opensymphony.xwork2.ActionSupport;

import es.aena.sgma.controlresiduos.data.vo.TipoResiduoVo ;
import es.aena.sgma.controlresiduos.service.TipoResiduoSe rvice;


@ParentPackage("default")
@Result(name = "SUCCESS", location="/jsp/controlresiduos/listaTiposResiduos.jsp")
public class ListarTiposResiduosAction extends ActionSupport{

private static final long serialVersionUID = 3127836877224957489L;

private Collection<TipoResiduoVo> tiposresiduos;
private TipoResiduoService tiporesiduoService;

public Collection<TipoResiduoVo> getTiposresiduos() {
return tiposresiduos;
}

public void setTiposresiduos(Collection<TipoResiduoVo> tiposresiduos) {
this.tiposresiduos = tiposresiduos;
}

public TipoResiduoService getTiporesiduoService() {
return tiporesiduoService;
}

public void setTiporesiduoService(TipoResiduoService tiporesiduoService) {
this.tiporesiduoService = tiporesiduoService;
}

@Override
@SkipValidation
public String execute() throws Exception {
this.setTiposresiduos(this.getTiporesiduoService() .obtenerTodosLosTiposResiduo());
return SUCCESS;
}

}


las trazas de error que salen en el servidor weblogic son:

<10-sep-2009 10H04' CEST> <Error> <HTTP> <BEA-101020> <[weblogic.servlet.interna
l.WebAppServletContext@20a5a96 - appName: 'sgma', name: '/sgma', context-path: '
/sgma'] Servlet failed with Exception
java.lang.NullPointerException
at weblogic.servlet.internal.ServletResponseImpl.send Error(ServletRespon
seImpl.java:600)
at org.apache.struts2.dispatcher.Dispatcher.sendError (Dispatcher.java:72
5)
at org.apache.struts2.dispatcher.Dispatcher.serviceAc tion(Dispatcher.jav
a:485)
at org.apache.struts2.dispatcher.FilterDispatcher.doF ilter(FilterDispatc
her.java:395)
at weblogic.servlet.internal.FilterChainImpl.doFilter (FilterChainImpl.ja
va:42)
Truncated. see log file for complete stacktrace
>

y lo que me muestra el navegador es lo siguiente:

java.lang.NullPointerException
at es.aena.sgma.controlresiduos.web.struts.action.Lis tarTiposResiduosAction.execute(ListarTiposResiduos Action.java:43)
at jrockit.reflect.VirtualNativeMethodInvoker.invoke( Ljava.lang.Object;[Ljava.lang.Object;)Ljava.lang.Object;(Unknown Source)
at java.lang.reflect.Method.invoke(Ljava.lang.Object;[Ljava.lang.Object;I)Ljava.lang.Object;(Unknown Source)
at com.opensymphony.xwork2.DefaultActionInvocation.in vokeAction(DefaultActionInvocation.java:440)
at com.opensymphony.xwork2.DefaultActionInvocation.in vokeActionOnly(DefaultActionInvocation.java:279)
at com.opensymphony.xwork2.DefaultActionInvocation.in voke(DefaultActionInvocation.java:242)
at com.opensymphony.xwork2.interceptor.DefaultWorkflo wInterceptor.doIntercept(DefaultWorkflowIntercepto r.java:163)
at com.opensymphony.xwork2.interceptor.MethodFilterIn terceptor.intercept(MethodFilterInterceptor.java:8 7)
at com.opensymphony.xwork2.DefaultActionInvocation.in voke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.validation.Annotati onValidationInterceptor.doIntercept(AnnotationVali dationInterceptor.java:50)
at com.opensymphony.xwork2.interceptor.MethodFilterIn terceptor.intercept(MethodFilterInterceptor.java:8 7)
at com.opensymphony.xwork2.DefaultActionInvocation.in voke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ConversionErro rInterceptor.intercept(ConversionErrorInterceptor. java:122)
at com.opensymphony.xwork2.DefaultActionInvocation.in voke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ParametersInte rceptor.doIntercept(ParametersInterceptor.java:195 )
at com.opensymphony.xwork2.interceptor.MethodFilterIn terceptor.intercept(MethodFilterInterceptor.java:8 7)
at com.opensymphony.xwork2.DefaultActionInvocation.in voke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ParametersInte rceptor.doIntercept(ParametersInterceptor.java:195 )
at com.opensymphony.xwork2.interceptor.MethodFilterIn terceptor.intercept(MethodFilterInterceptor.java:8 7)
at com.opensymphony.xwork2.DefaultActionInvocation.in voke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.StaticParamete rsInterceptor.intercept(StaticParametersIntercepto r.java:148)
at com.opensymphony.xwork2.DefaultActionInvocation.in voke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.CheckboxInterceptor .intercept(CheckboxInterceptor.java:93)
at com.opensymphony.xwork2.DefaultActionInvocation.in voke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.FileUploadIntercept or.intercept(FileUploadInterceptor.java:235)
at com.opensymphony.xwork2.DefaultActionInvocation.in voke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ModelDrivenInt erceptor.intercept(ModelDrivenInterceptor.java:89)
at com.opensymphony.xwork2.DefaultActionInvocation.in voke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ScopedModelDri venInterceptor.intercept(ScopedModelDrivenIntercep tor.java:128)
at com.opensymphony.xwork2.DefaultActionInvocation.in voke(DefaultActionInvocation.java:236)

el error "java.lang.NullPointerException" significa que apunta a un sitio vacío ¿no es cierto? Pero en el execute le digo que devuelva SUCCESS, y con el @Result le digo que me lo envíe a la página jsp "listaTiposResiduos.jsp". ¿Podéis decirme que estoy haciendo mal? Muchas gracias, un saludo
  #2 (permalink)  
Antiguo 10/09/2009, 02:28
 
Fecha de Ingreso: septiembre-2009
Mensajes: 9
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Problema con metodo execute y @Result struts2

En el result indicas mal el resultado de redireccion pones esto:

@Result(name = "SUCCESS", location="/jsp/controlresiduos/listaTiposResiduos.jsp")

y deberia ser

@Result(name = "SUCCESS", value="/jsp/controlresiduos/listaTiposResiduos.jsp")

value no location.

Saludos.
  #3 (permalink)  
Antiguo 10/09/2009, 04:53
 
Fecha de Ingreso: diciembre-2008
Mensajes: 233
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: Problema con metodo execute y @Result struts2

Hola, eso pensaba yo, pero eclipse no me deja poner value dentro del @Result, me dice que
"The attribute value is undefined for the annotation type Result",
y las únicas opciones que me da son: location, params y type. Muchas gracias, un saludo
  #4 (permalink)  
Antiguo 10/09/2009, 05:22
 
Fecha de Ingreso: septiembre-2009
Mensajes: 9
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Problema con metodo execute y @Result struts2

@ParentPackage("default")


te sobra esto tio
  #5 (permalink)  
Antiguo 10/09/2009, 07:05
 
Fecha de Ingreso: diciembre-2008
Mensajes: 233
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: Problema con metodo execute y @Result struts2

Hola, va a ser que no, lo he quitado, he compilado de nuevo, y ahora me dá las siguientes trazas de error:

<10-sep-2009 14H56' CEST> <Error> <HTTP> <BEA-101020> <[weblogic.servlet.interna
l.WebAppServletContext@1ac103a - appName: 'sgma', name: '/sgma', context-path: '
/sgma'] Servlet failed with Exception
java.lang.NullPointerException
at weblogic.servlet.internal.ServletResponseImpl.send Error(ServletRespon
seImpl.java:600)
at org.apache.struts2.dispatcher.Dispatcher.sendError (Dispatcher.java:72
5)
at org.apache.struts2.dispatcher.Dispatcher.serviceAc tion(Dispatcher.jav
a:485)
at org.apache.struts2.dispatcher.FilterDispatcher.doF ilter(FilterDispatc
her.java:395)
at weblogic.servlet.internal.FilterChainImpl.doFilter (FilterChainImpl.ja
va:42)
Truncated. see log file for complete stacktrace
>


y en vez de mostrar la página jsp en cuestión lo que muestra es el siguiente error:

Error 500--Internal Server Error
java.lang.NullPointerException
at es.aena.sgma.controlresiduos.web.struts.action.Lis tarTiposResiduosAction.execute(ListarTiposResiduos Action.java:43)
at jrockit.reflect.VirtualNativeMethodInvoker.invoke( Ljava.lang.Object;[Ljava.lang.Object;)Ljava.lang.Object;(Unknown Source)
at java.lang.reflect.Method.invoke(Ljava.lang.Object;[Ljava.lang.Object;I)Ljava.lang.Object;(Unknown Source)
at com.opensymphony.xwork2.DefaultActionInvocation.in vokeAction(DefaultActionInvocation.java:440)
at com.opensymphony.xwork2.DefaultActionInvocation.in vokeActionOnly(DefaultActionInvocation.java:279)
at com.opensymphony.xwork2.DefaultActionInvocation.in voke(DefaultActionInvocation.java:242)
at com.opensymphony.xwork2.interceptor.DefaultWorkflo wInterceptor.doIntercept(DefaultWorkflowIntercepto r.java:163)
at com.opensymphony.xwork2.interceptor.MethodFilterIn terceptor.intercept(MethodFilterInterceptor.java:8 7)
at com.opensymphony.xwork2.DefaultActionInvocation.in voke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.validation.Annotati onValidationInterceptor.doIntercept(AnnotationVali dationInterceptor.java:50)
at com.opensymphony.xwork2.interceptor.MethodFilterIn terceptor.intercept(MethodFilterInterceptor.java:8 7)
at com.opensymphony.xwork2.DefaultActionInvocation.in voke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ConversionErro rInterceptor.intercept(ConversionErrorInterceptor. java:122)
at com.opensymphony.xwork2.DefaultActionInvocation.in voke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ParametersInte rceptor.doIntercept(ParametersInterceptor.java:195 )
at com.opensymphony.xwork2.interceptor.MethodFilterIn terceptor.intercept(MethodFilterInterceptor.java:8 7)
at com.opensymphony.xwork2.DefaultActionInvocation.in voke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ParametersInte rceptor.doIntercept(ParametersInterceptor.java:195 )
at com.opensymphony.xwork2.interceptor.MethodFilterIn terceptor.intercept(MethodFilterInterceptor.java:8 7)
at com.opensymphony.xwork2.DefaultActionInvocation.in voke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.StaticParamete rsInterceptor.intercept(StaticParametersIntercepto r.java:148)
at com.opensymphony.xwork2.DefaultActionInvocation.in voke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.CheckboxInterceptor .intercept(CheckboxInterceptor.java:93)
at com.opensymphony.xwork2.DefaultActionInvocation.in voke(DefaultActionInvocation.java:236)
at org.apache.struts2.interceptor.FileUploadIntercept or.intercept(FileUploadInterceptor.java:235)
at com.opensymphony.xwork2.DefaultActionInvocation.in voke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ModelDrivenInt erceptor.intercept(ModelDrivenInterceptor.java:89)
at com.opensymphony.xwork2.DefaultActionInvocation.in voke(DefaultActionInvocation.java:236)
at com.opensymphony.xwork2.interceptor.ScopedModelDri venInterceptor.intercept(ScopedModelDrivenIntercep tor.java:128)
at com.opensymphony.xwork2.DefaultActionInvocation.in voke(DefaultActionInvocation.java:236)

así que no debe ser eso. Según veo, el error está en la linea 43, la sentencia

this.setTiposresiduos(this.getTiporesiduoService() .obtenerTodosLosTiposResiduo());

donde setTiposresiduos es un método setter que introduce una colección de tipos de residuo, getTiporesiduoService() es un método que devuelve un objeto de tipo TipoResiduoService, y obtenerTodosLosTiposResiduo() es un método de TipoResiduoService que me devuelve una colección de objetos. No comprendo dónde está el error, ¿en la forma de llamar a los métodos? ¿en el this.? Muchas gracias, un saludo
  #6 (permalink)  
Antiguo 14/09/2009, 04:16
 
Fecha de Ingreso: diciembre-2008
Mensajes: 233
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: Problema con metodo execute y @Result struts2

Hola, ya he resuelto el problema, y no era de struts, sino de spring. En el fichero Action, la línea

private TipoResiduoService tiporesiduoService;


debería ser

private TipoResiduoService tipoResiduoService;

debido a que en TipoResiduoServiceImpl, he utilizado la etiqueta @Component de Spring, y dentro de ella el nombre es tipoResiduoService; los dos nombres por lo visto deben ser exactamente iguales, y al no serlo, daba el error.
Gracias por todo, un saludo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:13.