package org.simpleframework.xml.convert;
import java.io.StringWriter;
import org.simpleframework.xml.Attribute;
import org.simpleframework.xml.Default;
import org.simpleframework.xml.Element;
import org.simpleframework.xml.Serializer;
import org.simpleframework.xml.ValidationTestCase;
import org.simpleframework.xml.core.Persister;
import org.simpleframework.xml.strategy.Strategy;
import org.simpleframework.xml.stream.InputNode;
import org.simpleframework.xml.stream.OutputNode;
public class HideEnclosingConverterTest extends ValidationTestCase {
public static class EntryConverter implements Converter<Entry> {
private final Serializer serializer;
public EntryConverter() {
this.serializer = new Persister();
}
public Entry read(InputNode node) throws Exception {
return serializer.read(Entry.class, node);
}
public void write(OutputNode node, Entry entry) throws Exception {
if(!node.isCommitted()) {
node.remove();
}
serializer.write(entry, node.getParent());
}
}
@Default(required=false)
public static class Entry {
private final String name;
private final String value;
public Entry(@Element(name="name", required=false) String name, @Element(name="value", required=false) String value){
this.name = name;
this.value = value;
}
public String getName(){
return name;
}
public String getValue(){
return value;
}
}
@Default
public static class EntryHolder {
@Convert(EntryConverter.class)
private final Entry entry;
private final String name;
@Attribute
private final int code;
public EntryHolder(@Element(name="entry") Entry entry, @Element(name="name") String name, @Attribute(name="code") int code) {
this.entry = entry;
this.name = name;
this.code = code;
}
public Entry getEntry(){
return entry;
}
public String getName() {
return name;
}
public int getCode() {
return code;
}
}
public void testWrapper() throws Exception{
Strategy strategy = new AnnotationStrategy();
Serializer serializer = new Persister(strategy);
Entry entry = new Entry("name", "value");
EntryHolder holder = new EntryHolder(entry, "test", 10);
StringWriter writer = new StringWriter();
serializer.write(holder, writer);
System.out.println(writer.toString());
serializer.read(EntryHolder.class, writer.toString());
System.err.println(writer.toString());
String sourceXml = writer.toString();
assertElementExists(sourceXml, "/entryHolder");
assertElementHasAttribute(sourceXml, "/entryHolder", "code", "10");
assertElementExists(sourceXml, "/entryHolder/entry");
assertElementExists(sourceXml, "/entryHolder/entry/name");
assertElementHasValue(sourceXml, "/entryHolder/entry/name", "name");
assertElementExists(sourceXml, "/entryHolder/entry/value");
assertElementHasValue(sourceXml, "/entryHolder/entry/value", "value");
assertElementExists(sourceXml, "/entryHolder/name");
assertElementHasValue(sourceXml, "/entryHolder/name", "test");
}
}