How do I use the Converter in XStream to append CDATA in the element

115 views Asked by At

I would like to append the <![CDATA[]]> to XML element by using XSteam. I have implemented an CDataConverter for my task. However, the result is not as expected which shown &gt instead >. Does anyone know what the problem is and how can l solve the problem. Thank you very much.

Actual Result:

<item>
  <name>Item Name</name>
  <description>
    <>&lt;![CDATA[Item Description]]&gt;</>
  </description>
</item>

Expected Result:

<item>
  <name>Item Name</name>
  <description>
    <![CDATA[ Item Description ]]>
  </description>
</item>

Below is the sample code for your erference.

CDataConverter .java

import com.thoughtworks.xstream.converters.Converter;
import com.thoughtworks.xstream.converters.MarshallingContext;
import com.thoughtworks.xstream.converters.UnmarshallingContext;
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;

public class CDataConverter implements Converter {

    public void marshal(Object value, HierarchicalStreamWriter writer, MarshallingContext context) {
        writer.startNode("");
        writer.setValue("<![CDATA[" + value + "]]>");
        writer.endNode();
    }

    public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
        return reader.getValue();
    }

    public boolean canConvert(Class clazz) {
        return String.class.isAssignableFrom(clazz);
    }

}

Item.java

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamConverter;

@XStreamAlias("item")
public class Item {

    @XStreamAlias("name")
    private String name;

    @XStreamAlias("description")
    @XStreamConverter(CDataConverter.class)
    private String description;

    public Item(String name, String description) {
        this.name = name;
        this.description = description;
    }

    public String getName() {
        return name;
    }

    public String getDescription() {
        return description;
    }

}
0

There are 0 answers