Salı, Ağustos 01, 2006

XStream

Eğer büyük miktarda datayı java'dan XML'e veya XML'den java'ya hızlı bir şekilde, fazla memory harcamadan ve az kod yazarak çevirmek isterseniz open-source bir API olan XStream'i öneririm.

XStream'in diğer API'lardan ayrılan en büyük özelliklerinden biri hazır converter'ları. En çok kullanılan, hemen hemen tüm serializable java type'ları için converter'ları bulunduğu için yazmanız gereken kod miktarı çok azalıyor:
The core of XStream consists of a registry of Converters. The responsibility of a Converter is to provide a strategy for converting particular types of objects found in the object graph, to and from XML.

XStream is provided with Converters for common types such as primitives, String, File, Collections, arrays, and Dates.
Diğer bir önemli özelliği ise bu çevrimleri streaming kullanarak yapabiliyor olması. Çevirdiğiniz XML dosyası ne kadar büyük olursa olsun streaming yaparak çok az memory harcanır. HierarchicalStreamReader ve HierarchicalStreamWriter API'ları sayesinde de herhangi bir XML'in tamamını parse etmeden hangi seviyede olursa olsun istediğiniz bir kısmını çevirebilirsiniz.
XStream provides alternative implementations of java.io.ObjectInputStream and java.io.ObjectOutputStream, allowing streams of objects to be serialized or deserialized from XML. This is useful when processing large sets of objects, as only one needs to be in memory at a time.
Hızlı ve az memory kullanmasının en büyük nedenlerinden biri de default XML Parser olarak XPP3 kullanıyor olması. (XPP Sosnoski Benchmark'ları sonucu en iyi XML parser kabul ediliyor) İsterseniz bir parametre değiştirerek başka bir XML parser kullanmanız mümkün.
You require xstream-[version].jar and xpp3-[version].jar in the classpath. XPP3 is a very fast XML pull-parser implementation. If you do not want to include this dependency, you can use a standard JAXP DOM parser instead.
Tutorial'ına bir göz atıp hemen test edebilirsiniz:
http://xstream.codehaus.org/tutorial.html
XStream HierarchicalStreamWriter Tutorial

6 Yorum:

Anonymous Adsız dedi ki...

Mustafa Bey gerçekten çok güzel görünüyor XStream. Verdiğiniz linkteki örnekleri tek tek denersem sanırım çok faydalı olabilir benim için.

XML ayrıştırmak cidden önemli bir performans kriteri. Kaynakların kapasitesine göre en verimli yolu seçmek lazım. Bu konuda Java için çok fazla ürün var aslında. Bu bir yandan iyi , bir yandan da bazen kafa karıştırıcı. Ben geçen sene XML DOM ve SAX ayrıştırcıları üzerine bir çalışma yapmıştım. O günden bu güne yaptığım çalışma güncelliğini çok çabuk yitirdi. http://www.ceturk.com/makaleoku.asp?id=246 adresinde bir özetini bulabilirsiniz. Sonra da gündeme STAX ayrıştırıcıları geldi.
Acaba kurumsal uygulamalarda ayrıştırıcı seçerken nelere dikkat ediyorsunuz , kararlarinizi neler etkiliyor paylaşırsanız sevinirim.
Kolay gelsin

2:00 ÖS  
Blogger Mustafa Tan dedi ki...

Eğer konu sadece mevcut bir XML dosyasını Java objesine çevirmek ise bunun için XPP3 ya da VTD API'lerini tercih ediyorum. Bunlar şu an Java dünyasındaki en hızlı ve en az memory kullanan SAX mantığındaki XML ayrıştırıcılar.

Eğer Java objesinden XML de oluşturmamız gerekiyorsa o zaman bu linkteki XML Benchmark testler gibi kullanacağımız XML yapısına en uygun DOM parser'ı seçmeye çalışıyorum.

Eğer XML Streaming yapma imkanımız var ise XStream'in HierarchicalStreamWriter API'nı kullanıyorum. Bir ara bu konuyla ilgili bol örnek içeren bir blog hazırlıyayım.

3:22 ÖS  
Anonymous Adsız dedi ki...

XML streaming üzerine detaylı bir yazı çok iyi olur gerçekten . Ben de http://ibrahimdemir.wordpress.com/tag/xml-serisi/ adresinde elimden geldiğince XML'e giriş yapıp konuyu derinleştirmeye çalışacağım bana da bu konuda iyi bir referans olur. Ayrıca küçük organizasyonlarla öğrenici arkadaşlarla XML deneyimlerimi paylaşmak için bazı girişimler olacak. O seminerlerde iş hayatından örnekler verip gerçekten neyin ne olduğunu anlamalarını istiyorum. Bu BEST PRACTICIES olayı cidden çok önemli.
Kolay gelsin.

NOT: Mustafa Bey sizi de blogrolluma ekliyorum yazılarınız gerçekten çok farklı ve öğretici.

3:58 ÖS  
Blogger Tonguç dedi ki...

Selam,

Eger bu maliyetli islemlerde veritabaninin bulundugu donanımdan faydalanmak isterseniz bu hazir apileri denemek isteyebilirsiniz;

Oracle® Database XML Java API Reference 10g Release 2 (10.2)

Oracle® XML DB Developer's Guide 10g Release 2 (10.2) - Introduction to Oracle XML DB

Oracle® XML Developer's Kit Programmer's Guide 10g Release 2 (10.2) - Introduction to Oracle XML Developer's Kit

5:02 ÖS  
Blogger Tonguç dedi ki...

Paralelinde SQL-XML ve XML-SQL gecisleri icin guzel ronekler iceren bir makale gonderiyorum, siteni ziyaret edenlerin hayatini cok kolaylastirabilir bu cozumler Mustafa.
Gorusuruz.

7:05 ÖS  
Anonymous Adsız dedi ki...

Merabalar, ben veri modelleme aracı yapıyorum. Burda ihtiyacım olan şeylerden biri de: oluşturduğum şekillerin içersindeki verileri, xml olarak basmak.Bunun için xstream kullandım fakat şöyle bir hata alıyorum:

Exception in thread "JavaFX Application Thread" java.lang.OutOfMemoryError: Java heap space

sanırım RAM in yetmeyişinden kaynaklanıyor: doğrumu bilginiz var mı bu konuda?

7:16 ÖS  

Yorum Gönder

Kaydol: Kayıt Yorumları [Atom]

<< Ana Sayfa