Libraries uitgelicht – mei 2013

Je wilt even een csv bestand inlezen en mappen naar een entiteit voor verdere verwerking. Daar zijn genoeg libraries voor, waarvan openCSV wel de bekendste is

JSefa
Je wilt even een csv bestand inlezen en mappen naar een entiteit voor verdere verwerking. Daar zijn genoeg libraries voor, waarvan openCSV wel de bekendste is. Wat JSefa bijzonder maakt, is dat het een generieke java serializer voor XML, CSV en  FLR op basis van JSR 173(Stax) is. Daarnaast kun je JSefa ook uitbreiden om eigen formaten te ondersteunen. Het mooie is dat je door middel van annotaties aangeeft, hoe en op welke velden de mapping moet plaatsvinden en dit voor de verschillende formaten. Ideaal om bijvoorbeeld een JPA entiteit te decoreren met csv en/of xml annotaties . Daarna is serialisatie  een kwestie van factory oproepen met een reader of writer en de geannoteerde klasse en gaan.

De Java API
Het is voor sommigen een tweede natuur. Je hebt een bepaalde functionaliteit nodig voor je Java oplossing en via je zoekmachine vind je al snel een nieuwe library die je toevoegt aan je project. Veelal zit die functionaliteit in de standaard API van Java. Het is zeker waar dat sommige oplossingen omslachtige regels code vereisen en niet altijd evident zijn. Het is echter de vraag of dit de introductie van een nieuwe library rechtvaardigt of dat een eigen geschreven utility class voldoet.  De kunst is deze verborgen juweeltjes in de Java API te vinden en handig toe te passen in jouw oplossing. Misschien is dit toch een overweging voordat je op zoek gaat naar de zoveelste handige library van de benodigde functionaliteit. 

Log4J 2.0
Log4J is, ondanks dat het een echte klassieker is, waarschijnlijk de meest populaire library ooit. Duizenden applicaties gebruiken al vele jaren Log4J in het hart van hun systemen om kritische meldingen te loggen. Zal wel goed werken toch? Echte Log4J veteranen weten wel beter. Memory leaks, subtiele performance problemen, mysterieuze reacties als niet kan worden geschreven, een vaak verwarrende configuratie die runtime niet foutloos te wijzigen is.

Log4J 2.0 (http://logging.apache.org/log4j/2.x/) heeft als doel om verbeteringen te adopteren uit het alternatieve framework Logback. Een moderne, prettige API, gestroomlijnde configuratie die runtime gewijzigd kan worden zonder logging events te verliezen, hoge performance en robuust gedrag bij schrijfproblemen. Momenteel nog in beta, maar zeker een aanrader om te volgen.

JavaParser
Wellicht kan iedereen zich de volgende situatie wel voor de geest halen, je moet een refactoring doorvoeren, maar je favoriete IDE biedt deze mogelijk niet of levert een hele berg aan compilatie fouten op, welke vervolgens handmatig moeten worden aangepast. Met behulp van JavaParser is het mogelijk om je eigen refactoring tools te schrijven, deze library zorgt voor het inlezen van de source code en vervolgens kun je over de AST lopen en deze aanpassen en vervolgens weer wegschrijven. In een aantal gevallen loont het zeker om op deze manier slim een refactoring uit te voeren, maar er zijn natuurlijk nog tal van andere toepassingen te bedenken voor deze kleine maar krachtige library. Voor meer informatie zie http://code.google.com/p/javaparser

XMLUnit
Als je veel met webservices werkt, komt het geregeld voor dat je voor testcases stukken XML met elkaar wil vergelijken. Op het eerste oog lijkt dat een triviale klus, totdat je er ermee aan de slag gaat: je krijgt te maken met namespaces, al dan niet self closing elementen, niet exact te voorspellen waarden (zoals timestamps), noem maar op. XMLUnit biedt hierbij hulp met twee uitbreidingen op JUnit: XMLAssert en XMLTestCase. Hiermee kun je assertions maken voor:

  • overeenkomsten of verschillen tussen twee stukken XML;
  • het evalueren van XPath-expressies op een stuk XML;
  • het valideren van XML;
  • het resultaat van een XSL-transformatie van een stuk XML.

Als kers op de taart kun je XMLUnit naast XML ook HTML laten verwerken, zodat je deze assertions ook kunt gebruiken bij tests van webpagina’s.