Erro com DWR [Artigo MundoJava]

Pessoal, estou seguinto os exemplos de DWR da nova edição MundoJava, do artigo escrito por CésarFernando Moro, e está dando uns erros, segue abaixo:

10/04/2007 10:53:26 uk.ltd.getahead.dwr.util.CommonsLoggingOutput info
INFO: Exec[0]: obtemDados2.getDados()
10/04/2007 10:53:43 uk.ltd.getahead.dwr.util.CommonsLoggingOutput warn
WARNING: Method execution failed: 
java.lang.IllegalArgumentException: Missing method or missing parameter converters: obtemDados2.addDado
	at uk.ltd.getahead.dwr.impl.ExecuteQuery.execute(ExecuteQuery.java:122)
	at uk.ltd.getahead.dwr.impl.DefaultExecProcessor.handle(DefaultExecProcessor.java:48)
	at uk.ltd.getahead.dwr.impl.DefaultProcessor.handle(DefaultProcessor.java:81)
	at uk.ltd.getahead.dwr.AbstractDWRServlet.doPost(AbstractDWRServlet.java:162)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
	at java.lang.Thread.run(Thread.java:595)
10/04/2007 10:53:43 uk.ltd.getahead.dwr.util.CommonsLoggingOutput warn
WARNING: Erroring: id[9058_1176213223780] message[uk.ltd.getahead.dwr.OutboundVariable@121df2a]
10/04/2007 10:54:01 uk.ltd.getahead.dwr.util.CommonsLoggingOutput info
INFO: Exec[0]: obtemDados2.getDados()

Alguém pode me dizer o que pode estar de errado ??

Obrigado.

Será que não está faltando o parâmetro “converter” no dwr.xml?

Algo do tipo

<convert converter="bean" match="nome_da_sua_classe_com_o_pacote"/>

[quote=cassio]Será que não está faltando o parâmetro "converter" no dwr.xml?

Algo do tipo

<convert converter="bean" match="nome_da_sua_classe_com_o_pacote"/> [/quote]

Não, veja só:

&lt?xml version="1.0" encoding="UTF-8"?&gt
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" "http://www.getahead.ltd.uk/dwr/dwr10.dtd">

<dwr>

  <allow>
  	<create creator="new" scope="session" javascript="obtemDados">
  		<param name="class">mundojava.dwr.ObtemDados</param>
  	</create> 
  	 	
  	<create creator="new" scope="session" javascript="obtemDados2">
  		<param name="class">mundojava.dwr.ObtemDados2</param>
  	</create> 	
  	
  	<convert converter="mundojava.dwr.Cor" match="bean"></convert>
  	
  </allow>

</dwr>

Parece que vc trocou alhos por bugalhos…

repare bem, vc colocou

<convert converter="mundojava.dwr.Cor" match="bean"></convert>

mas deveria ser

<convert match="mundojava.dwr.Cor" converter="bean" />

repare que além de vc ter trocado, vc colocou como se o elemento tivesse um corpo, mas ele não tem. deve ser fechado como fiz acima.

Cassio, até agora funcionou belezinha !!! só que, no terceiro exemplo também está dnado um erro que não descobri o que pode ser, por favor, veja abaixo se vc pode me ajudar ?

11/04/2007 08:57:43 uk.ltd.getahead.dwr.util.CommonsLoggingOutput warn
WARNING: Method execution failed: 
java.lang.IllegalArgumentException: Missing bean opener: {
	at uk.ltd.getahead.dwr.convert.BeanConverter.convertInbound(BeanConverter.java:161)
	at uk.ltd.getahead.dwr.impl.DefaultConverterManager.convertInbound(DefaultConverterManager.java:162)
	at uk.ltd.getahead.dwr.impl.ExecuteQuery.execute(ExecuteQuery.java:144)
	at uk.ltd.getahead.dwr.impl.DefaultExecProcessor.handle(DefaultExecProcessor.java:48)
	at uk.ltd.getahead.dwr.impl.DefaultProcessor.handle(DefaultProcessor.java:81)
	at uk.ltd.getahead.dwr.AbstractDWRServlet.doPost(AbstractDWRServlet.java:162)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
	at java.lang.Thread.run(Thread.java:595)
11/04/2007 08:57:43 uk.ltd.getahead.dwr.util.CommonsLoggingOutput warn
WARNING: Erroring: id[3217_1176292663855] message[uk.ltd.getahead.dwr.OutboundVariable@1295fe8]

Obrigado.

Alguém, que tenha lido a edição 22 da MundoJava, conseguio executar sem problemas os exemplos com DWR ? ou tiveram problemas tb ?

Cola o javascript que vc está usando e pelo menos a assinatura do método que vc está chamando…

Meu dwr.xml:

&lt?xml version="1.0" encoding="UTF-8"?&gt
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" "http://www.getahead.ltd.uk/dwr/dwr10.dtd">

<dwr>

  <allow>
  
  	<create creator="new" scope="session" javascript="obtemDados">
  		<param name="class">mundojava.dwr.ObtemDados</param>
  	</create>   	 	
  	<create creator="new" scope="session" javascript="obtemDados2">
  		<param name="class">mundojava.dwr.ObtemDados2</param>
  	</create>
  	<create creator="new" scope="session" javascript="manipulaTipoArquivo">
  		<param name="class">mundojava.dwr.ManipulaTipoArquivo</param>
  	</create>  	
  	
  	<convert match="mundojava.dwr.Cor"         converter="bean" />
  	<convert match="mundojava.dwr.TipoArquivo" converter="bean" />
  	
  </allow>

</dwr>

Meu JSP:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Cadastro com DWR</title>

	<script type='text/javascript' src='/dwr_mj/dwr/interface/manipulaTipoArquivo.js'></script>
	<script type='text/javascript' src='/dwr_mj/dwr/engine.js'				 		 ></script>
	<script type='text/javascript' src='/dwr_mj/dwr/util.js'				 		 ></script>
	<script type='text/javascript'>
		function init(){
			DWRUtil.useLoadingMessage();
			atualizaTabela();
		}
		function grava(){
			DWRUtil.getValues(tipoArquivo);
			alert('Teste Gravar');
			if(tipoArquivo.id=='') tipoArquivo.id=-1;
			manipulaTipoArquivo.grava(tipoArquivo, atualizaTabela);
		}
		function limpa(){
			tipoArquivo = {id:'',nome:null,extensao:null};
			alert('Teste Limpar');
			DWRUtil.setValues(tipoArquivo);
		}
		
		var tipoArquivo;
		
		function preencheForm(atipoArquivo){
			tipoArquivo = atipoArquivo;
			DWRUtil.setValues(tipoArquivo);
		}
		function atualizaTabela(){
			manipulaTipoArquivo.lista(preencheTabela);
			limpa();
		}
		
		var getNome 	= function(tipoArquivo){return tipoArquivo.nome};
		var getId   	= function(tipoArquivo){return tipoArquivo.id};
		var getExtensao = function(tipoArquivo){return tipoArquivo.extensao};
		var getAltera   = function(tipoArquivo){
		                  	  return '<input type="button" value="Altera" onclick="recupera('+tipoArquivo.id+')"/>';
		                  };
		var getRemove   = function(tipoArquivo){
							  return '<input type="button" value="Remove" onclick="remove('+tipoArquivo.id+',\"+tipoArquivo.nome+'\')">';
						  }
		var tipoArquivoColunas = '<tr><th rowspan="1" colspan="1" BGCOLOR="#C8B4FF">Id      </th>'+
		                         '<tr><th rowspan="1" colspan="1" BGCOLOR="#C8B4FF">Nome    </th>'+
		                         '<tr><th rowspan="1" colspan="1" BGCOLOR="#C8B4FF">Extensão</th>'+
		                         '<tr><th rowspan="1" colspan="2" BGCOLOR="#C8B4FF">Ações   </th></tr>';

		function preencheTabela(tiposArquivos){
			if(tipoArquivos.length &gt 0){
				DWRUtil.setValues("tipoArquivoColunas", tipoArquivoColunas);
			}else{
			 	DWRUtil.setValues("tipoArquivoColunas", '');
			}
			DWRUtil.removeAllRows("tipoArquivoLinhas");
			DWRUtil.addRows("tipoArquivoLinhas",tipoArquivos,
			                 [getId, getNome, getExtensao, getAltera, getRemove],
			                 {
				                 rowCreator:function(options){
				                 	var row = document.createElement("tr");
				                 	var index = options.rowIndex * 50;
				                 	if(options.rowIndex%2 == 0){
				                 		row.style.backgroundColor = "rgb(255,255,255)";
				                 	}else{
				                 		row.style.backgroundColor = "rgb(240,220,255)";
				                 	}
				                 	return row;
				                 }
			                 });
		}
		function recupera(codigo){
			manipulaTipoArquivo.recupera({id:codigo},preencheForm);
		}
		function remove(codigo,nome){
			if(confirm("Deseja remover " + nome + " ? ")){
				manipulaTipoArquivo.remove({id:codigo},atualizaTabela);
			}
		}
	</script>

</head>
<body onload="init()">
	
	<h2>Tipos de Arquivos</h2>
	<table border="0" bgcolor="#888888" cellpadding="0">
		<thead id="tipoArquivoColunas"></thead>
		<tbody id="tipoArquivoLinhas" ></tbody>
	</table>
	<p></p>
	&lt;table&gt;
		&lt;tr&gt;
			&lt;td rowspan="1" colspan="1"&gt;Id:&lt;/td&gt;
			&lt;td rowspan="1" colspan="1"&gt;
				&lt;span id="id"&gt;&lt;/span&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td rowspan="1" colspan="1"&gt;Nome:&lt;/td&gt;
			&lt;td rowspan="1" colspan="1"&gt;&lt;input type="text" id="nome"     size="30"&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td rowspan="1" colspan="1"&gt;Extensão:&lt;/td&gt;
			&lt;td rowspan="1" colspan="1"&gt;&lt;input type="text" id="extensao" size=" 5"&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td rowspan="1" colspan="2" align="right"&gt;
				&lt;input type="button" value="Limpa" onclick="limpa()"&gt;
				&lt;input type="button" value="Grava" onclick="grava()"&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/table&gt;
	
&lt;/body&gt;
&lt;/html&gt;

Minha classe TipoArquivo:

package mundojava.dwr;

public class TipoArquivo {
	
	private int id;
	private String nome;
	private String extensao;
	
	public TipoArquivo(){
		
	}

	
	public String toString(){
		return getNome();
	}

	public String getExtensao() {
		return extensao;
	}

	public void setExtensao(String extensao) {
		this.extensao = extensao;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}
	
	public boolean equals(Object obj){
		boolean retValue = false;
		if(obj instanceof TipoArquivo){
			retValue = (((TipoArquivo)obj).getId()==getId());
		}
		return retValue;
	}

}

Minha classe ManipulaTipoArquivo:

package mundojava.dwr;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

public class ManipulaTipoArquivo {
	
	public ManipulaTipoArquivo(){
		
	}	
	
	private static Map&lt;Integer,TipoArquivo&gt; dados = 
		new TreeMap&lt;Integer,TipoArquivo&gt;();
	
	private static int idCount = 0;
	
	public void remove(TipoArquivo objeto)throws Exception{
		dados.remove(new Integer(objeto.getId()));
	}
	
	public TipoArquivo recupera(TipoArquivo objeto)throws Exception{
		return (TipoArquivo) dados.get(new Integer(objeto.getId()));
	}
	
	public void grava(TipoArquivo objeto)throws Exception{
		if(objeto.getId()==-1) objeto.setId(getNextId());
		dados.put(new Integer(objeto.getId()), objeto);
	}

	public List&lt;TipoArquivo&gt; lista() throws Exception{
		return new ArrayList&lt;TipoArquivo&gt;(dados.values());
	}
	
	private int getNextId(){
		return ++idCount;
	}
}

tá com cara de ser algo aqui olha:

function recupera(codigo){
 			manipulaTipoArquivo.recupera({id:codigo},preencheForm);
 		}
 		function remove(codigo,nome){
 			if(confirm("Deseja remover " + nome + " ? ")){
 				manipulaTipoArquivo.remove({id:codigo},atualizaTabela);
 			}
 		}

Porque vc tá passando assim: {id:codigo} ?

[quote=cassio]tá com cara de ser algo aqui olha:

function recupera(codigo){
 			manipulaTipoArquivo.recupera({id:codigo},preencheForm);
 		}
 		function remove(codigo,nome){
 			if(confirm("Deseja remover " + nome + " ? ")){
 				manipulaTipoArquivo.remove({id:codigo},atualizaTabela);
 			}
 		}

Porque vc tá passando assim: {id:codigo} ?[/quote]

Fiz conforme está no exemplo da revista!!

Tentei tirar {}, tentei colocar [] no lugar tb, mas continua mesma coisa !!
Acho que o problema deve ser em outro lugar, pq nem GRAVAR e LIMPAR está executando !!!

Valew.

Olá marceloplis e cassio. Também estou fazendo uns testes com DWR e tenho um probleminha toda a vez que tento passar um parâmetro na chamada do método de uma classe Java. Olha só o erro que dá:

Já testei a chamada desse método no contexto do DWR, e pra minha surpresa funcionou perfeitamente, no entanto, quando executo meu projeto não funciona.
Alguém sabe o que devo fazer para solucionar isso?

Olá pessoal, também fiz os exemplos do artigo de DWR da Mundo Java - n° 22 e funcionaram.
Para quem se interessar segue em anexo o arquivo .war do projeto.

Após muito tempo só acompanhando esta é minha primeira contribuição ao GUJ. :thumbup:

Boa sorte!

[quote=marcelo.tocchetto]Olá pessoal, também fiz os exemplos do artigo de DWR da Mundo Java - n° 22 e funcionaram.
Para quem se interessar segue em anexo o arquivo .war do projeto.

Após muito tempo só acompanhando esta é minha primeira contribuição ao GUJ. :thumbup:

Boa sorte![/quote]

Antes de mais nada gostaria de agradecer, muito obrigado !!!

Agora, por curiosidade, vc teve que mudar (arrumar) algum trecho do código que está na revista ??

Abraços.

Acho que não, os problemas que tive ao rodar foram ou de esquecer de adicionar algo no dwr.xml ou de digitar algum nome de método/atributo errado no javascript.
No exemplo 2 adicionei “var” ao funcoesColunas mas fiz o teste depois sem o “var” e funciona tb.

Abraço!

marceloplis -&gt Lembrei de algo importante.
O exemplo do cadastro não roda no Internet Explorer.
Estou usando o Firefox.