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;
}
[quote=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;
}[/quote]
Recebo a lista assim:
inputStream = new ByteArrayInputStream(listaImagens.get(i));
Pelo índice e exatamente nesta linha que está dando NullPointerException…
faz utilizando
for (byte[] bytes: listaImagens ){
inputStream = new ByteArrayInputStream(bytes);
}
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…
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)
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;
}
qual é essa linha ?
GaleriaImagemAction.java:84
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:
[code]/**
* 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;
}[/code]
<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;
}
Olá galera,
um amigo disse que devo por num array de bytes, ótima idéia… Só que não estou conseguindo:
[code]/**
* 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;
}[/code]
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