Criar método dentro do DAO, estou usando direito o List?

10 respostas
A

A dúvida é:
listaImagens está recebendo de fato os registros vindos do banco de dados? Estou acessando da forma correta tais registros através get(index)?

Vide:

/** * Método que traduz a URL de acesso a imagem * */ public String verImagem(){ if ((pessoaImagem != null) && (pessoaImagem.getPessoaInfoId() != null)) { List<byte[]> listaImagens = new ArrayList<byte[]>(); listaImagens = pessoaImagemDAO.recuperarPorId(pessoaImagem.getPessoaInfoId()); int limite = pessoaImagemDAO.recuperarPorId(pessoaImagem.getPessoaInfo().getIdPessoa()).size(); for (int i = 0; i < limite; i++){ System.out.println(listaImagens.isEmpty()); inputStream = new ByteArrayInputStream(listaImagens.get(i)); } } return SUCCESS; }

10 Respostas

A

andredecotia:
A dúvida é:
listaImagens está recebendo de fato os registros vindos do banco de dados? Estou acessando da forma correta tais registros através get(index)?

Vide:

/** * Método que traduz a URL de acesso a imagem * */ public String verImagem(){ if ((pessoaImagem != null) && (pessoaImagem.getPessoaInfoId() != null)) { List<byte[]> listaImagens = new ArrayList<byte[]>(); listaImagens = pessoaImagemDAO.recuperarPorId(pessoaImagem.getPessoaInfoId()); int limite = pessoaImagemDAO.recuperarPorId(pessoaImagem.getPessoaInfo().getIdPessoa()).size(); for (int i = 0; i < limite; i++){ System.out.println(listaImagens.isEmpty()); inputStream = new ByteArrayInputStream(listaImagens.get(i)); } } return SUCCESS; }

Recebo a lista assim:

inputStream = new ByteArrayInputStream(listaImagens.get(i));

Pelo índice e exatamente nesta linha que está dando NullPointerException…

W

faz utilizando

for  (byte[] bytes: listaImagens ){  
  inputStream = new ByteArrayInputStream(bytes);              
}
A

Minha URL de acesso é:

http://localhost:70/aviador/verImagemPeloId!verImagem.action?pessoaImagem.pessoaInfo.idPessoa=1

Aliás estou fazendo uma coisa que nunca fiz, digo, estou tentando acessar o Bean que é PessoaImagem (Foto do autor do livro) seu atributo (referência pra um outro objeto
que a PessoaInfo que é o autor do livro) a partir dele acessar o atributo dele que é o id (idPessoa)… Isso está certo? Pois não está funcionando…

A

Puxa Webskate, confesso q pensei q funcionaria mas continua o NullPointerm, veja:

29/10/2010 16:42:51 org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Servlet.service() for servlet default threw exception java.lang.NullPointerException at java.io.ByteArrayInputStream.<init>(Unknown Source) at br.com.nomeDoProjeto.GaleriaImagemAction.verImagem(GaleriaImagemAction.java:84) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:399) at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:262) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:224) at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:213) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216) at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:150) at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:48) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216) at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:123) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216) at com.opensymphony.xwork2.interceptor.ParametersInterceptor.intercept(ParametersInterceptor.java:161) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216) at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:105) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216) at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:83) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216) at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:207) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216) at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:74) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216) at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:127) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216) at org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:107) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216) at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:206) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216) at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:115) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216) at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:143) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216) at com.opensymphony.xwork2.interceptor.PrepareInterceptor.intercept(PrepareInterceptor.java:115) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216) at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:170) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216) at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:123) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216) at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:219) at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:218) at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:216) at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:50) at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:507) at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:421) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454) at java.lang.Thread.run(Unknown Source)

W

acho que o problema não está no for, posta o resto do código principalmente o código da linha que está dando o erro no stacktrace, e o seu código ficaria

* Método que traduz a URL de acesso a imagem
* */
public String verImagem(){
  if ((pessoaImagem != null) && (pessoaImagem.getPessoaInfoId() != null)) {
    List<byte[]> listaImagens = pessoaImagemDAO.recuperarPorId(pessoaImagem.getPessoaInfoId());
      for (byte[] bytes: listaImagens ){
	InputStream inputStream = new ByteArrayInputStream(bytes);     		
      }  	    
  }
  return SUCCESS;
}
A

Ainda está dando pau…

W

qual é essa linha ?
GaleriaImagemAction.java:84

A

Conseguí chegar a uma solução, todavia não está populando todas as fotos de um autor, popula apenas uma foto, o que será? Vide o código atualizadinho:

/**
	 * Método que pega o retorno no formato JSON
	 * */
	public String getJSON() throws Exception {
		return mostraURLDeAcessoDaImagemRelacionadaAPessoa();
	} 

	/**
	 * Método que mostra a URL de acesso da imagem relacionada a pessoa
	 * */
	private String mostraURLDeAcessoDaImagemRelacionadaAPessoa() throws Exception {
		pessoaImagem.setUrl(concatenaURLRecuperaImagem(idPessoa));
		String[] arrayDeURL = new String[1];
		arrayDeURL[0] = pessoaImagem.getUrl();
		JsonConfig jsonConfig = new JsonConfig();
		jsonConfig.setJsonPropertyFilter(new PropertyFilter() {
			public boolean apply(Object source, String name, Object value) {
				return source instanceof PessoaImagem && name.equals("pessoaInfo");
			}
		});
		JSON json = JSONSerializer.toJSON(arrayDeURL, jsonConfig);
		Map<String, Object> modelMap = new HashMap<String, Object>();
		modelMap.put("total", 1);
		modelMap.put("linhas", json);
		setReturnJSON(JSONSerializer.toJSON(modelMap));
		return SUCCESS;
	}
	
	/**
	* Método que deixa dinâmica a busca pelas fotos do autor
	* */
	private String concatenaURLRecuperaImagem(int idPessoa){
		String url = "/nomeDoProjeto/verImagemPeloId!verImagem.action?pessoaInfo.idPessoa=" + idPessoa;
		return url;
	}
<action name="verImagem" class="br.com.editorasaraiva.repositoriodigital.action.GaleriaImagemAction" method="getJSON">
      		<result type="stream" />
   		 </action>
/**
	* Método que traduz a URL de acesso na imagem
	* */
	public String verImagem(){
		if ((pessoaImagem != null) && (pessoaInfo.getIdPessoa() != null)) {
	    	List<byte[]> listaImagens = pessoaImagemDAO.pegaImagensDoAutorPorId(pessoaInfo.getIdPessoa());
	      	for (byte[] bytesDaImagens: listaImagens){     
	      	  inputStream = new ByteArrayInputStream(bytesDaImagens);                 
	      	}  
	    }
	    return SUCCESS;
	 }
A

Olá galera,
um amigo disse que devo por num array de bytes, ótima idéia... Só que não estou conseguindo:

/**
	* Método que traduz a URL de acesso na imagem
	* */
	public String verImagem(){
		if ((pessoaImagem != null) && (pessoaInfo.getIdPessoa() != null)) {
	    	List<byte[]> listaImagens = pessoaImagemDAO.pegaImagensDoAutorPorId(pessoaInfo.getIdPessoa());
	      	
	    	InputStream[] arrayDeInputStreams = new InputStream[50];
	    	
	    	for (byte[] bytesDaImagens: listaImagens){     
	      	  	inputStream = new ByteArrayInputStream(bytesDaImagens);
	      	  	int i = 0;
	      	  	while(i < arrayDeInputStreams.length){
	      		  arrayDeInputStreams[i] = inputStream;
	      		  ++i;
	      	  	}
	      	  	
	      	  	//teste
	      	  	for (int j = 0; j < arrayDeInputStreams.length; j++) {
					System.out.println(arrayDeInputStreams[j]);
				}
	      	}  
	    }
	    return SUCCESS;
	 }
A

Bom, já estou conseguindo alocar tudo num array de InputStream, a questão é que na hora de exibir a foto na tela não está conseguindo, veja:

/** * Método que traduz a URL de acesso na imagem * */ public String verImagem(){ if ((pessoaImagem != null) && (pessoaInfo.getIdPessoa() != null)) { List<byte[]> listaImagens = pessoaImagemDAO.pegaImagensDoAutorPorId(pessoaInfo.getIdPessoa()); int quantidadeDeRegistrosDaBaseDeDados = pessoaImagemDAO.pegaImagensDoAutorPorId(pessoaInfo.getIdPessoa()).size(); for (int i = 0; i < quantidadeDeRegistrosDaBaseDeDados; i++){ inputStream = new ByteArrayInputStream(listaImagens.get(i)); arrayDeInputStreams[i] = inputStream; } } return SUCCESS; }

<action name="verImagem" class="br.com.editorasaraiva.repositoriodigital.action.GaleriaImagemAction" method="getJSON"> <result type="stream" /> </action>

A URL de acesso é: http://localhost:70/repositorioDigitalV3/repositorioDigitalV3/verImagemPeloId!verImagem.action?pessoaInfo.idPessoa=2

Criado 29 de outubro de 2010
Ultima resposta 1 de nov. de 2010
Respostas 10
Participantes 2