Problema xstream java

Bom dia moçada!

Estou com um problema serio aqui comigo, procurei em varios lugares na net e nao achei solucao, inclusive implementei algo que vi aqui no forum e nao deu certo.

O meu problema é o seguinte:

Tenho um xml que usa & < > " ’ \r e, ao fazer o parse para String, ele nao consegue fazer isso, gerando o codigo abaixo:

<nfeProc versao="2.00" …

Como resolvo esse problema?

donatinho

pera ai vc está falando que está indo do objeto para XML(string) é isso?

Sim, do objeto para xml…

:shock:

Pra falar a verdade o meu objeto esta assim:

1 135100000000000 <nfeProc versao="2.00" continua com o xml ...

ont listaCatalogNFe é um List e CatalogoNFe é um objeto que contem tipoXml, numProt e xml, que sao todas variaveis de instancia String.

Quando faco isso:

String teste = (String) RetornoCatalogoNFe.toXML(cat);
System.out.println(teste);

é que ele nao entende os caracteres e coloca

& lt;nfeProc versao=& quot;2.00& quot; xmlns=& quot;http://www.portalfiscal.inf.br/nfe"& gt;& lt;NFe…

cara nuam é assim que funciona o xstream…

posta sua classe que vc quer serializar

Classe a ser tratada no xstream:


import java.util.List;

import br.inf.portalfiscal.nfe.xstream.ConfgXStream;
import br.inf.portalfiscal.xstream.ConfgXStreamCatalogo;

import com.thoughtworks.xstream.XStream;

public class RetornoCatalogoNFe {
	// variaveis de instancia
	private List<CatalogoNFeVO> listaCatalogo;
	
	// construtores
	public RetornoCatalogoNFe() {
	
	}
	
	public RetornoCatalogoNFe(List<CatalogoNFeVO> colecao) {
		this.listaCatalogo = colecao;
	}
	
	// metodos publicos
	public List<CatalogoNFeVO> getListaCatalogo() {
		return listaCatalogo;
	}

	public void setListaCatalogo(List<CatalogoNFeVO> listaCatalogo) {
		this.listaCatalogo = listaCatalogo;
	}
		
	public static String toXML(RetornoCatalogoNFe listaCatalogo) {
		XStream xstream = ConfgXStreamCatalogo.confCatalogo;
		return xstream.toXML(listaCatalogo);
	}	
		
	public static RetornoCatalogoNFe fromXML(String xml) {
		XStream xstream = ConfgXStreamCatalogo.confCatalogo;
		return (RetornoCatalogoNFe) xstream.fromXML(xml);
	}
}

Classe que contem os dados

public class CatalogoNFeVO {
	private String tipoXml;
	private String numProt;
	private String xml;
	
	public CatalogoNFeVO() {
	
	}
	
	public CatalogoNFeVO(String tipoXml, String numProt, String xml) {
		this.tipoXml = tipoXml;
		this.numProt = numProt;
		this.xml= xml;
		
	}
	
	public String getTipoXml() {
		return tipoXml;
	}

	public void setTipoXml(String tipoXml) {
		this.tipoXml = tipoXml;
	}

	public String getNumProt() {
		return numProt;
	}

	public void setNumProt(String numProt) {
		this.numProt = numProt;
	}

	public String getXml() {
		return xml;
	}

	public void setXml(String xml) {
		this.xml = xml;
	}
}

XStream propriamente :


import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
import com.thoughtworks.xstream.io.xml.XmlFriendlyReplacer;

public class ConfgXStreamCatalogo {
	// CATALOGO NFE
	public static XStream confCatalogo;
	
	static {
		// CATALOGO NFE
		confCatalogo = ConfgXStreamCatalogo.confCatalogo();
	}
	
	//INICIO Catalogo_nfe
	private static XStream confCatalogo() {
		XStream xstream = new XStream();
		
		
		xstream.addImplicitCollection(RetornoCatalogoNFe.class, "listaCatalogo", "catalogoNFe", CatalogoNFeVO.class);
		xstream.alias("retornoCatalogoNFe", RetornoCatalogoNFe.class);
		xstream.alias("catalogoNFe", CatalogoNFeVO.class);
		

		return xstream;	
	}	

	//FIM catalogo_nfe
	public static void main(String[] args) throws IOException {
		FileUtil fu = new FileUtil();
		
		CatalogoNFeVO catalogo = new CatalogoNFeVO();
		catalogo.setNumProt("444444444444444");
		catalogo.setTipoXml("1");
		catalogo.setTeste(fu.lerCopiarString(new File("z:\\arq\\proc\\procnfe200_t.xml")));
		
		List<CatalogoNFeVO> listaCat = new ArrayList<CatalogoNFeVO>();
		listaCat.add(catalogo);
		
		RetornoCatalogoNFe cat = new RetornoCatalogoNFe();
		cat.setListaCatalogo(listaCat);
		
		
		String teste = (String) RetornoCatalogoNFe.toXML(cat);
		System.out.println(teste);
		
	}
}

mas o campo xml é uam string portanto ele vai gravar como string e nuam como xml…

Galera, consegui resolver o meu problema!!!

Criei uma classe interna

private static XStream confCatalogo() {
		XStream xstream = new XStream(
				new DomDriver() {
					public HierarchicalStreamWriter createWriter(Writer out) {
						return new CatalogoNFePretty(out);
					}
				}
		);
		
		xstream.addImplicitCollection(RetornoCatalogoNFe.class, "listaCatalogo", "catalogoNFe", CatalogoNFeVO.class);
		xstream.alias("retornoCatalogoNFe", RetornoCatalogoNFe.class);
		xstream.alias("catalogoNFe", CatalogoNFeVO.class);
		
		return xstream;	
	}	

Obrigado nextuser pela ajuda, foi de grande valia.

Abracos

donatinho