/ / jak pozbyć się referencji klasy zewnętrznej w wynikach xstream? - java, xml, xstream

jak pozbyć się referencji zewnętrznej klasy w wyjściu xstream? - java, xml, xstream

Używam xstream do organizowania obiektu z klasą zagnieżdżoną w ciągu xml, Piszę to:

public static String java2xml(Object obj, Class<?> T) {

XStream xstream = new XStream(new StaxDriver());
xstream.processAnnotations(T);
String xml = xstream.toXML(obj);

return xml;
}

Ale dostałem <outer-class reference="../.."/> wewnątrz ciągu wyjściowego.

klasa obiektowa to:

public class Foo {
private String foocontent;
private Bar bar;

// getter and setter


public class Bar {
private String blabla;
// getter and setter
}

}

i robię Foo z tym kodem:

    Foo foo = new Foo();
Bar bar = foo.new Bar();
bar.setBlabla("hello");
foo.setBar(bar);
String fooxml = Xutil.java2xml(foo, Foo.class);
System.out.println(fooxml);

a cały xml to:

<?xml version="1.0" ?>
<me.mypackage.Foo>
<bar>
<blabla>hello</blabla>
<outer-class reference="../.."/>
</bar>
</me.mypackage.Foo>

Pytanie 1: Jak mogę się pozbyć outer-class część?

Pytanie 2: Jak zrobić ładnie sformatowany ciąg xml za pomocą xstream?

W poprzednim poście mam wiele emocjonalnych komentarzy i sprawiam, że moje pytanie jest niejasne, edytuję swój post i wymieniam pomoc, o którą proszę, dziękuję.

Odpowiedzi:

2 dla odpowiedzi № 1

Użyj PrettyPrintWriter aby uzyskać ładny format wraz z StringWriter następująco:

public static String java2xml(Object obj, Class<?> T) {
XStream xstream = new XStream(new StaxDriver());
xstream.processAnnotations(T);
StringWriter stringWriter = new StringWriter();
xstream.marshal(obj, new PrettyPrintWriter(stringWriter));
return stringWriter.toString();
}

Jeśli chodzi o <outer-class reference="../.."/> problem, jeśli nie odwołujesz się do żadnego z nich Foo członkowie klasy z Bar możesz się pozbyć <outer-class> tag, definiując Bar klasa jako static