13 september, 2012

Custom datumformat i ROME



ROME är ett ramverk som jag tänkt hylla har på bloggen ett flertal gånger men det har inte blivit av.
ROME (Rss and atOM utilitEs) skapar ordning i versions-soppan inom syndikeringsformaten, eller vad sägs om att skriva egen kod för att parsa/skapa/konvertera mellan följande format:
  • RSS 0.90
  • RSS 0.91 Netscape
  • RSS 0.91 Userland
  • RSS 0.92
  • RSS 0.93
  • RSS 0.94
  • RSS 1.0
  • RSS 2.0
  • Atom 0.3
  • Atom 1.0
Med ROME är det en enkel sak att konsumera feeds, skapa feeds och att konvertera mellan olika format. Något som annars är en diger uppgift, begrunda bara den mängd av olika datumformat som används inom dessa format. Den sajt jag jobbar med just nu använder ROME för att konsumera feeds från flera olika källor och en av dessa källor skickar datum på ett sätt som ROME inte kunde parsa, "2012-08-22 22:34" eller yyyy-MM-dd HH:mm som man säger inom Javavärlden. 

För att få ROME att kunna parsa detta datumformat måste det nya datumformatet definieras i filen rome.properties som skall placeras på classpath. Innehållet i rome.properties blir en enda rad:

datetime.extra.masks=yyyy-MM-dd HH:mm

Det går att lägga till flera customformat, i sådant fall separeras de av ett '|' tecken. Mönstret följer syntaxen i java.text.SimpleDateFormat

12 september, 2012

UTF-8 med BOM

EF BB BF who?
En enkel inläsning av en UTF-8 encodad textfil blev stökigare än väntat. Filen är en enkel semikolonseparerad fil med siffror i första kolumnen. Av någon anledning gick det inte att använda Integer.valueOf() på just det första värdet! Vaaarföör! NumberFormatException for String "1"... Say again please?! Efter en stunds koll av kod och fil så laddade jag ner en Hex-editor för att se vad som fanns där i starten av filen.

EF BB BF, glöm aldrig dessa. Dessa sköna bytes kallas BOM (Byte Order Mark) och Java gillar inte BOM. Men som vanligt finns det folk som löst det problem man ställs inför, i det här fallet hette lösningen BOMInputStream och den är din vän när du måste hantera UTF-8 encodade filer med BOM´s.

Man lär så länge man lever!