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 > 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>
<><![CDATA[Item Description]]></>
</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;
}
}