[RESOLVIDO] XStream

Bom dia.

Estou usando a biblioteca XStream 1.4.4 para recuperar Xml e transformar em Objetos.

Estou com a seguinte situação que não consigo resolver:

Tenho uma tag (docZip) que o valor dela é uma String Base64, porém, essa tag tem atributos.

A estrutura é a seguinte:

<retDistDFeInt>
     .......
    <loteDistDFeInt>
        <docZip schema="......." NSU=".....">valor em string base 64 ...............</docZip>
    </loteDistDFeInt>
</retDistDFeInt>

Estou tentando configurar da seguinte forma:

XStream xstream = new XStream();
xstream.alias("retDistDFeInt", RetornoDistribuicaoDFeInteresse.class);
xstream.alias("loteDistDFeInt", LoteDistribuicaoDFeInteresse.class);
xstream.useAttributeFor(RetornoDistribuicaoDFeInteresse.class, "xmlns");
xstream.useAttributeFor(RetornoDistribuicaoDFeInteresse.class, "versao");
xstream.addImplicitCollection( LoteDistribuicaoDFeInteresse.class, "listDocZip");
xstream.alias("docZip", DocZip.class);
xstream.useAttributeFor(DocZip.class, "schema");
xstream.useAttributeFor(DocZip.class, "NSU");
            
return (RetornoDistribuicaoDFeInteresse) xstream.fromXML( _xml );

Eu criei uma classe DocZip para poder pegar os atributos, mas não sei como fazer para pegar o valor da String Base64.

Alguém tem uma idéia de como fazer?!

Segue as classes:

public class DocZip implements Serializable{
    
    private String NSU;
    private String schema;
....



public class LoteDistribuicaoDFeInteresse implements Serializable {

    private List<DocZip> listDocZip;
....


public class RetornoDistribuicaoDFeInteresse implements Serializable {
    
    private String versao;
    private String xmlns;
...
...
    private LoteDistribuicaoDFeInteresse loteDistDFeInt;

Obrigado!

Até onde sei o XStream não possui tal facilidade.
Particularmente não gosto de utilizá-lo, pois o XML é montado com base nos atributos das classes, acho pouco flexível…

Você pode fazer assim:

Classe:

public class DocZip implements Serializable{
    
    private String NSU;
    private String schema;
    private String base64data;
}

XML

<docZip schema="......." NSU="....." base64Data="valor em string base 64" />

Valeu Carlos, mas não tenho como alterar.
O xml já vem “montado” pela receita federal =]

Consegui configurar o XStream para resolver essa questão!

Na classe onde tem o texto, deve-se colocar a notação:

@XStreamConverter(value=ToAttributedValueConverter.class, strings={"text"})

E, ao instanciar o XStream, deve-se chamar o método:

xstream.processAnnotations(SuaClasse.class);

No meu caso, ficou assim:

@XStreamConverter(value=ToAttributedValueConverter.class, strings={"base64data"})
public class DocZip implements Serializable{
    
    private String NSU;
    private String schema;
    
    private String base64data;
    ......
    ......


XStream xstream = new XStream();
xstream.processAnnotations(DocZip.class);
xstream.alias("docZip", DocZip.class);
xstream.useAttributeFor(DocZip.class, "schema");
xstream.useAttributeFor(DocZip.class, "NSU");

Se alguém precisar, ta ae =]