Xstream library generating xml with empty node

0

I am using the xstream 1.4.8 library with the following XML: / p>

<root>
    <att1>1</att1>
    <att2>2</att2>
  <nodeB xmlns:d8p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
    <d8p1:string>00042052</d8p1:string>
    <d8p1:string>00042053</d8p1:string>
    <d8p1:string>00042054</d8p1:string>
    <d8p1:string>00042055</d8p1:string>
  </nodeB>
<root/>

Converting the previous xml to an Entity and generating xml again, the <nodeB> is with spaces only, and in the java entity the field has an item in the all-blank list. But it should have 4 items in the list. See the resulting xml below:

<root>
 <att1>1</att1>
 <att2>2</att2>
 <nodeB>     


 </nodeB>
<root/>

The problem is when I use <d8p1:string> the parser generates the empty nodes and does not generate any errors.

import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;

@XStreamAlias("root")
public class Root {

    @XStreamAlias("att1")
    @XStreamAsAttribute
    private int att1;

    @XStreamAlias("att2")
    @XStreamAsAttribute
    private int att2;

    @XStreamAlias("nodeB") // Se eu colocar este campo gera erro ao encontrar o 'path : /root/nodeB/d8p1:string'
    private NodeB nodeB;

//  @XStreamImplicit(itemFieldName = "nodeB")
//  private List<String> d8p1 = new ArrayList<String>();

//  public List<String> getD8p1() {
//      return d8p1;
//  }
//
//  public void setD8p1(List<String> d8p1) {
//      this.d8p1 = d8p1;
//  }

    public int getAtt1() {
        return att1;
    }

    public void setAtt1(int att1) {
        this.att1 = att1;
    }

    public int getAtt2() {
        return att2;
    }

    public void setAtt2(int att2) {
        this.att2 = att2;
    }

    public NodeB getNodeB() {
        return nodeB;
    }

    public void setNodeB(NodeB nodeB) {
        this.nodeB = nodeB;
    }
}


import java.util.ArrayList;
import java.util.List;

import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import com.thoughtworks.xstream.annotations.XStreamImplicit;

@XStreamAlias("nodeB")
public class NodeB {

//  @XStreamAlias("str")
//  @XStreamAsAttribute
//  private String str; 

    @XStreamImplicit(itemFieldName = "d8p1")
//  @XStreamAlias("d8p1")
    @XStreamAsAttribute
    private List<String> d8p1 = new ArrayList<String>();

    public List<String> getD8p1() {
        return d8p1;
    }

    public void setD8p1(List<String> d8p1) {
        this.d8p1 = d8p1;
    }

//  public String getStr() {
//      return str;
//  }
//
//  public void setStr(String str) {
//      this.str = str;
//  }

}

Test

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

public class Teste {

    public static void main(String[] args) {
        try {
            String xml = 
                    "<root>"
                    + "<att1>1</att1>"
                    + "<att2>2</att2>"
                    + "<nodeB xmlns:d8p1='http://schemas.microsoft.com/2003/10/Serialization/Arrays'>"
                    +   "<d8p1:string>00042052</d8p1:string>"
                    +   "<d8p1:string>00042053</d8p1:string>"
                    +   "<d8p1:string>00042054</d8p1:string>"
                    +   "<d8p1:string>00042055</d8p1:string>"
                    + "</nodeB>"
                    + "</root>";
            XStream xStream = new XStream(new DomDriver());
            xStream.processAnnotations(Root.class);

            Root root = (Root) xStream.fromXML(xml);
            assert root != null;
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
    
asked by anonymous 07.12.2015 / 14:41

0 answers