Tech Life

Ilustrační obrázek

Když “Kč”.matches(”Kč”) == false

13. 08. 2008 00:00    kategorie: Tech Life    autor: TZa    komentářů: 0

Co je to za záhadu, když se to navíc děje pouze na jednom serveru, zatímco na jiném je výraz true? Vypadá to jako další ze série neuvěřitelných chování, ale v tomto případě byly okolnosti takové, že nemá smysl to podávat jako hádanku a rovnou prozradím příčinu.
 

Tento kód (ukázka z nadpisu je minimalizovaná verze) byl součástí pravidla frameworku Drools. Framework jednotlivá pravidla kompiluje do syntetických tříd, které se pak podílejí na činnosti rule enginu. Bohužel podle dosavadních zjištění compileru nelze nastavit kódování, a proto využívá defaultní kódování. Do něj se řetězce nepodařilo převést a neúspěšně převedené znaky se nahrazují otazníkem. A výsledek výrazu “K?”.matches(”K?”) myslím nemusím uvádět :-).

Poučení 1: pokud není vývojový server 100% obrazem ostrého, přináší to problémy.

Poučení 2: situace, kdy za běhu nějaký řetězec obsahuje java kód určený - rovněž za běhu - ke zkompilování syntetické třídy, se podobá situaci, kdy se provádí běžná kompilace a ve zdrojáku jsou řetězce-literály: buď musíme počítat s určením kódování pro překladač, nebo řetězce externalizovat do resource bundlů, a ty pak prohnat utilitkou native2ascii. Napodobení utility native2ascii v javě může vypadat např. takto (viz metoda nativeToAscii) a po jeho aplikaci na zdroják pravidla už prošlo vše bez problémů.

Sdílet odkaz:
tisk

Diskuze k článku

K článku nebyl zatím přidán komentář.

Přidat příspěvek

 

Kontakt pro média


Máte zájem o další informace, odborný článek či přednášku na konferenci? Kontaktujte nás prosím na pr@etnetera.cz.

RSS - Tech life


RSS kanál Tech Life Blogu

Offlineblog

Offlineblog

Ljama


Komix z prostředí imaginární firmy.

ljama

Ještě jste ho nečetli? Tak tudy ...

 
Doporučujeme: Nabídka práce, volná pracovní místa - pracovní portál SPRÁVNÝKROK.CZ