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?
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