Я думаю, что я могу слишком сильно увеличивать масштаб с моей работой XStream, но я пытаюсь маршалировать поток XML, который содержит множество больших сложных объектов, и каждый из этих объектов имеет тенденцию иметь много теговнапример:
<name type="string">My Name</name>
<speed type="dice">2d6</speed>
Итак, я создал объект "TypedString", чтобы обернуть концепцию строки с атрибутом типа, например так:
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
public class TypedString {
@XStreamAsAttribute
private String type;
private String value;
public TypedString(String type, String value) {
this.type = type;
this.value = value;
}
// getters omitted
}
Теперь я знаюв этом должно быть что-то упущено - например, как я могу получить переменную «значение», используя содержимое тега (например, для первого примера, показанного выше, типом будет «строка», а значением будет «Мое имя»).
Я написал для этого краткий модульный тест:
public class TypedStringTest {
private XStream xStream;
@Before
public void setUp() {
xStream = new XStream();
xStream.processAnnotations(TypedString.class);
xStream.alias("name", TypedString.class);
}
@Test
public void testBasicUnmarshalling() {
TypedString typedString = (TypedString) xStream.fromXML("<name type=\"string\">Name</name>");
assertEquals("string", typedString.getType());
assertEquals("Name", typedString.getValue());
}
}
, который не выполняется во втором утверждении.
Есть ли аннотация, которую нужно добавить в класс TypedString, чтобы получить егоза работой ?Или я действительно увеличил масштаб здесь (например, все ли это нужно делать для аннотаций в классе, содержащем эти теги?).Аннотация @XStreamAsAttribute не выглядела так, как будто ее можно использовать из родительского тега - ее нужно было определить для объекта, представляющего тег, к которому применяется, из того, что я мог сказать.Поэтому я сделал то, что в противном случае было прославленной строкой, которую, как мне кажется, XStream должен собирать без моей неявной помощи.
В двух словах, где я заблудился?!