2012-04-09 28 views
5

Farklı türler içerebilen Object'lere sahip fasulyelerim var. Şimdi XML oluşturduğumda, seri hale getirilmiş nesneye class niteliğini ekler. Örneğin, sınıfın basit adını değiştirmek istiyorum.XStream ve Object sınıf serileştirme

Örnek Java:

public class MyParentClass { 

private Object childObjectAttribute; // Can be any instance of any interface ... 

// Getters & setters etc.. 

XStream başlatma:

public XStream getXStream() 
{ 
    XStream xstream = new XStream(); 
    Class<?>[] c = { MyInterfaceImpl.class }; // MyInterfaceImpl has of course @XStreamAlias("MyInterface") 
    xstream.processAnnotations(c); 
    xstream.alias(MyInterface.class.getSimpleName(), MyInterface.class, MyInterfaceImpl.class); 
    return xstream; 
} 

Örnek XML:

<myParentClass> 
    <childObjectAttribute class="com.example.PossibleClass"/> 
</myParentClass> 

Ben PossibleClass veya başka bir şey com.example.PossibleClass değiştirmek istiyorum. Mümkün mü?

+0

ı hakkında söyleyebileceğim tek şey Paket adı olmadan 'PossibleClass'', çoklu paketler bu ismin bir sınıfını içerdiğinde serileştirme sorunlarına neden olabilir. Bunun için imkansız olabilir. –

cevap

6

Evet yapabilirsin! Oluşturulan belgenin boyutunu azaltmaya yardımcı olur. Bunu yapmak için iyi bir uygulama.
XStream.alias() yöntemini kullanın.

Bu benim için çalışır. takma adıyla

<co.in.test.PersonX> 
    <firstName>Tito</firstName> 
    <lastName>George</lastName> 
</co.in.test.PersonX> 

<MyPerson> 
    <firstName>Tito</firstName> 
    <lastName>George</lastName> 
</MyPerson> 

aşağıda yaklaşım takma olmadan

PersonX person = new PersonX("Tito", "George"); 
XStream xstream = new XStream(); 
xstream.alias("MyPerson", PersonX.class); 
String str = xstream.toXML(person); 
System.out.println(str); 

çalışmıyor mu? Sınıfın basit ismi istiyorum ve eğer

workxstream.alias("PossibleClass", PossibleClass.class); 
+0

Ayrıntılı bir öğretici. [link] (http://xstream.codehaus.org/alias-tutorial.html) – titogeo

+1

Bunu zaten kullanıyorum ve hiçbir etkisi yok. – newbie

+0

Kodunuzu kopyalayabilir misiniz? – titogeo

0

Evet, yapabilirsiniz nesnenin paketi biliyoruz:

XStream xstream = new XStream(); 
xstream.aliasPackage("", "com.example"); 

Çıktı xml:

<myParentClass> 
    <childObjectAttribute class="PossibleClass"/> 
</myParentClass> 
+0

Lütfen bu cevabı göz ardı edin, bu hack'in işe yaramadığını buldum çünkü boş takma adı olan bir paket başka bir paketin sınıflarıyla birlikte serileştirme sorunlarına neden oluyor. – iberck

İlgili konular