Serializar array elemento null[Resolvido]

14 respostas
S

ola a todos
seguinte estou usando o DataTable.net, vraptor (341) e hibernate.
quando serializo a lista e tem elementos nulo da erro de java.lang.NullPointerException, sem elementos nulos funciona normal.
andei pesquisando ate achei uma discussão sobre isso no github mas sem solução.
tentei assim ArrayList<ArrayList<Object>> objectListados = new ArrayList<ArrayList<Object>>();
e assim ArrayList<Object[]> objectListados = new ArrayList<Object[]>();
ambos dão erro.

uma solução que encontrei e varrer a lista ou vetor e vendo aonde ta nulo e colocar string vazia “”, mas é bizarro, como é comun acontecer isso acho que deve ter uma solução real para isso.

obrigado gente

segue o codigo

ArrayList<ArrayList<Object>> objectListados = new ArrayList<ArrayList<Object>>();
		
		ArrayList<Object> o = new ArrayList<Object>();
		ArrayList<Object> x = new ArrayList<Object>();
		
		o.add("1.1");
		o.add("1.1");
		o.add("1.3");

		x.add("2.1");
		x.add(null); /* aqui com valor funciona mesmo que seja ""*/
		x.add("2.3");
		
		objectListados.add(o);
		
		objectListados.add(x);
		
		DataTableModel dtModel = new DataTableModel();  
	    
	    dtModel.setsEcho(new Long(new Date().getTime()).toString());  
	    
	    dtModel.setiTotalRecords(objectListados.size());  
	    
	    dtModel.setiTotalDisplayRecords(100);  

	    dtModel.setAaData(objectListados.toArray()); 
	    
	    
	    result.use(Results.json()).withoutRoot().from(dtModel).include("aaData").recursive().serialize();

14 Respostas

Rafael_Guerreiro

Eu faço algo parecido... Mas a minha dtModel tem o atributo aaData como uma List de List<String> ou seja, não uso Object...

Talvez isso possa resolver...

Olha como eu implementei:
public class DataTablesResult {

	private String sEcho;
	private List&lt;List&lt;String&gt;&gt; aaData = new ArrayList&lt;List&lt;String&gt;&gt;();
	private long iTotalRecords = 0;
	private long iTotalDisplayRecords = 0;

	public DataTablesResult(ResourceBundle bundle, String sEcho,
			List&lt;? extends DataTables&gt; list, long iTotalRecords,
			long iTotalDisplayRecords) {
		this.sEcho = sEcho;
		this.setAaData(list, bundle);
		this.setiTotalRecords(iTotalRecords);
		this.setiTotalDisplayRecords(iTotalDisplayRecords);
	}

	private void setAaData(List&lt;? extends DataTables&gt; list,
			ResourceBundle bundle) {
		if (list == null)
			list = new ArrayList&lt;DataTables&gt;();

		for (DataTables item : list)
			aaData.add(item.toListString(bundle));
	}

	private void setiTotalRecords(long iTotalRecords) {
		if (iTotalRecords &gt; 0)
			this.iTotalRecords = iTotalRecords;
	}

	private void setiTotalDisplayRecords(long iTotalDisplayRecords) {
		if (iTotalDisplayRecords &gt; 0)
			this.iTotalDisplayRecords = iTotalDisplayRecords;
	}
}
public class Customer implements DataTables {

	@Id
	@Column(name = &quot;SFC&quot;, columnDefinition = &quot;char&quot;)
	private String code;

	@Column(name = &quot;NAME&quot;, length = 255)
	private String name;

	@Column(name = &quot;CNPJ&quot;, length = 15, columnDefinition = &quot;char&quot;)
	private String cnpj;

	@Override
	public List&lt;String&gt; toListString(ResourceBundle bundle) {
		List&lt;String&gt; list = new ArrayList&lt;String&gt;();

		list.add(code);
		list.add(name);
		list.add(cnpj);

		return list;
	}
public interface DataTables {
	public List&lt;String&gt; toListString(ResourceBundle bundle);
}
Assim, eu só implemento a interface no modelo e cada entidade fica responsável por retornar os dados necessários...
S

opa bzla.
então meu problema é que uso hibernate, e ele devolve uma lista deste tipo assim ArrayList<Object[]>, quando realiza consulta especificando os campos.
e ai dentro de Object[] pode vir nulos

Rafael_Guerreiro

Eu também uso Hibernate…

E eu tenho somente 1 Controller e 1 DAO para tratar dessas tabelas… Mas a estrutura é bem mais complexa, se você quiser, eu posso te mostrar aqui…

S

nossa fico feliz.

por outro lado tava pensando em se era possível sobrescrever algum metódo o xstream para tratar isso.

Lucas_Cavalcanti

onde acontece o NullPointerException? qual é a stack?

S

ola
ele fala da @intercept porem nao condiz já coloquei accepts false em todas.

hql do hibernate
select tb0A.codigo, tb1A.nomePessoa, tb0A.email, tb0A.ramal, tb0A.ativo, tb0A.id from Senha as tb0A join tb0A.pessoa as tb1A where tb0A.ativo=:tb0Aativo

sql que o hibernate criou
Hibernate: select senha0_.codigo as col_0_0_, pessoa1_.nome as col_1_0_, senha0_.email as col_2_0_, senha0_.ramal as col_3_0_, senha0_.ativo as col_4_0_, senha0_.id as col_5_0_ from tbsenha senha0_ inner join tbpessoa pessoa1_ on senha0_.tbpessoa_id=pessoa1_.id where senha0_.ativo=?

segue o metodo
o parametro vem direto do hibernate query.list

public void getJsonDataTable(List<Object[]> objectListado, Result result) {

//		fiz essa gambi e funfa, mas so pra nao parar desenvolvimento
/*                   for (int i=0; i< objectListado.size(); i++){
			Object[] o = objectListado.get(i);
			for (int j = 0; j<o.length; j++){
				if (o[j] == null){
					o[j] = "";
				}
			}
		}
		*/
            DataTableModel dtModel = new DataTableModel();  
	    dtModel.setsEcho(new Long(new Date().getTime()).toString());  	    
	    dtModel.setiTotalRecords(objectListado.size());  	    
	    dtModel.setiTotalDisplayRecords(100);  
	    dtModel.setAaData(objectListado.toArray());   	    
	    result.use(Results.json()).withoutRoot().from(dtModel).include("aaData").serialize();  // erro é aqui
	}

segue o erro nativo

br.com.caelum.vraptor.InterceptionException: exception raised, check root cause for details: java.lang.NullPointerException
	at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:96)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.agile.sistema.vraptor.interceptador.LogadoIntercept.intercept(LogadoIntercept.java:39)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.agile.sistema.vraptor.interceptador.DatabaseIntercept.intercept(DatabaseIntercept.java:38)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.agile.sistema.vraptor.interceptador.ControleSenhaIntercept.intercept(ControleSenhaIntercept.java:64)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.agile.sistema.vraptor.interceptador.NoCacheInterceptor.intercept(NoCacheInterceptor.java:48)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:83)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:48)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:71)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:44)
	at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)
	at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:58)
	at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException
	at java.lang.Class.isAssignableFrom(Native Method)
	at br.com.caelum.vraptor.serialization.xstream.VRaptorClassMapper.serializedClass(VRaptorClassMapper.java:78)
	at com.thoughtworks.xstream.mapper.MapperWrapper.serializedClass(MapperWrapper.java:34)
	at com.thoughtworks.xstream.converters.collections.AbstractCollectionConverter.writeItem(AbstractCollectionConverter.java:58)
	at com.thoughtworks.xstream.converters.collections.ArrayConverter.marshal(ArrayConverter.java:45)
	at com.thoughtworks.xstream.core.TreeMarshaller.convert(TreeMarshaller.java:86)
	at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:78)
	at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:63)
	at com.thoughtworks.xstream.converters.collections.AbstractCollectionConverter.writeItem(AbstractCollectionConverter.java:64)
	at com.thoughtworks.xstream.converters.collections.ArrayConverter.marshal(ArrayConverter.java:45)
	at com.thoughtworks.xstream.core.TreeMarshaller.convert(TreeMarshaller.java:86)
	at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:78)
	at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.marshallField(AbstractReflectionConverter.java:157)
	at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$2.writeField(AbstractReflectionConverter.java:148)
	at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$2.visit(AbstractReflectionConverter.java:118)
	at com.thoughtworks.xstream.converters.reflection.PureJavaReflectionProvider.visitSerializableFields(PureJavaReflectionProvider.java:129)
	at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doMarshal(AbstractReflectionConverter.java:100)
	at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.marshal(AbstractReflectionConverter.java:58)
	at com.thoughtworks.xstream.core.TreeMarshaller.convert(TreeMarshaller.java:86)
	at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:78)
	at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:63)
	at com.thoughtworks.xstream.core.TreeMarshaller.start(TreeMarshaller.java:98)
	at com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.marshal(AbstractTreeMarshallingStrategy.java:38)
	at com.thoughtworks.xstream.XStream.marshal(XStream.java:837)
	at com.thoughtworks.xstream.XStream.marshal(XStream.java:826)
	at com.thoughtworks.xstream.XStream.toXML(XStream.java:801)
	at br.com.caelum.vraptor.serialization.xstream.XStreamSerializer.serialize(XStreamSerializer.java:142)
	at br.com.agile.sistema.HTML.DataTableListar.getJsonDataTable(DataTableListar.java:34)
	at br.com.agile.sistema.vraptor.controller.CadastroController.formUsuarioListar(CadastroController.java:39)
	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 br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:61)
	... 54 more
Mar 01, 2013 1:32:30 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [default] in context with path [/agile] threw exception
br.com.caelum.vraptor.InterceptionException: exception raised, check root cause for details: java.lang.NullPointerException
	at br.com.agile.sistema.vraptor.interceptador.DatabaseIntercept.intercept(DatabaseIntercept.java:44)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.agile.sistema.vraptor.interceptador.ControleSenhaIntercept.intercept(ControleSenhaIntercept.java:64)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.agile.sistema.vraptor.interceptador.NoCacheInterceptor.intercept(NoCacheInterceptor.java:48)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:83)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:48)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:71)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:44)
	at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)
	at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:58)
	at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)

valeuuuu

Lucas_Cavalcanti

bom, a gente pode considerar isso como um bug do VRaptor…

cria uma issue lá por favor?

quick fix (não tão quick assim =():

crie uma classe igual a essa no seu sistema:

mude o método serializedClass para retornar null se o type vier null (ou “” se reclamar do null)

crie uma classe igual a essa:
https://github.com/caelum/vraptor/blob/master/vraptor-core/src/main/java/br/com/caelum/vraptor/serialization/xstream/VRaptorXStream.java, apontando para o seu classMapper

crie essa classe:

@PrototypeScoped
@Component
public class CustomXStreamBuilderImpl extends XStreamBuilderImpl {
   //...

   @Override
   public XStream jsonInstance() {
		return configure(new SuaVRaptorXStream(extractor, getHierarchicalStreamDriver()));
	}
}

isso deve funcionar… se não funcionar dá um toque… se preferir podemos corrigir no VRaptor e gerar um jar snapshot pra vc ir usando enquanto não sai a próxima versão, que acha?

S

ola bom dia

Lucas tive um problema com a Custom, diz que o extractor não existe, ai coloquei ele como atributo da classe e setei ele no construtor ai funcionou em tempo de projeto.
em execução quis testar com todos os elemento não nulos pra garantir o que estava funcionando continua funcionando.
porem quando serializo volta só uns 3 campos do objeto.

o atributo Object[] aaData do dtModel não foi serializado apos a alteração.
result.use(Results.json()).withoutRoot().from(dtModel).include(“aaData”).serialize();

segue o JSON

{“sEcho”: “1362393582883”,“iTotalRecords”: 25,“iTotalDisplayRecords”: 100}

segue a custom com o atributo:

import com.thoughtworks.xstream.XStream;

import br.com.caelum.vraptor.interceptor.TypeNameExtractor;
import br.com.caelum.vraptor.ioc.Component;
import br.com.caelum.vraptor.ioc.PrototypeScoped;
import br.com.caelum.vraptor.serialization.xstream.XStreamBuilderImpl;
import br.com.caelum.vraptor.serialization.xstream.XStreamConverters;

@PrototypeScoped  
@Component  
public class CustomXStreamBuilderImpl extends XStreamBuilderImpl {  
   //...  
	
	private TypeNameExtractor extractor;
  
   public CustomXStreamBuilderImpl(XStreamConverters converters,
			TypeNameExtractor extractor) {
		super(converters, extractor);
		this.extractor = extractor;
	}

@Override  
   public XStream jsonInstance() {  
        return configure(new VRaptorXStream(extractor, getHierarchicalStreamDriver()));  
    }  
}
Lucas_Cavalcanti

vc usou a sua implementação de VRaptorXStream?

como ela está?

S

oi boa tarde, esta igual ao github. não alterei o fonte.
sei que o vetor com elementos diferentes de nulo funciona, ai fiz esse teste em cima dos fontes do gihub.
ai o json foi gerado sem o aaData…

qq coisa tamo ai

Lucas_Cavalcanti

To achando que é mais fácil gerar um snapshot pra você, com essa correção, o que acha?

S

pode ser !!!
eu só agradeço.

Lucas_Cavalcanti

Testa com esse jar:

https://docs.google.com/file/d/0B5GFjoo9gmuEY2RFQzBNZmlmYVU/edit?usp=sharing

S

valeu parece que rolou.

Criado 28 de fevereiro de 2013
Ultima resposta 6 de mar. de 2013
Respostas 14
Participantes 3