Čas:27.8.2012 9:02:56
Od:Jan
Předmět:Je to dobré řešení?
Mám raději, když aplikace selže a já se o tom dovím a chybu v datech opravím. Změnu která nahrazuje znaky za jiné bych bral jen jako hotfix a spíš bych hledal cestu, jak ošetřit vstup. To že uživatelé dokáží (nebo spíš jejich klávesnice) zadat znaky které běžně nejdou zapsat je normální stav. Znám jednu klávesnici, která si občas k mezeře přidá nulový znak a ten se opravdu špatně hledá. V dokumentaci k P_OUTPUT_INVALID_CHAR_HANDLER se vůbec nepíše, zda lze logovat nahrazovací událost. Pokud ano, neměl bych k tomu výtku. Z logu se pak dají dohledat špatná data a ty opravit. V opačném případě řešíš jen důsledek a ne příčinu.
Čas:27.8.2012 11:22:24
Od:Petr Kostroun
Předmět:Re: Je to dobré řešení?
Ahoj Honzo, já tak trochu doufám že to jde, i když se přiznám, že jsem to ještě nestihl skontrolovat. Nastavil jsem logger pro cxf na warn, a přidal logovací input/output interceptory na endpoint. @InInterceptors(interceptors = "org.apache.cxf.interceptor.LoggingInInterceptor") @OutInterceptors(interceptors ="org.apache.cxf.interceptor.LoggingOutInterceptor"). Pokud to nezabere(rozuměj nelogujou to), tak přidám svoje vlastní proprietální řešení pomocí Reflexe. Všechny vstupy od uživatele jsou proti control znakům ošetřeny. Snad to bude stačit.
Čas:27.8.2012 12:49:42
Od:Tomáš
Předmět:Re: Re: Je to dobré řešení?
Dobrý den, mnohem jednodušší, než řešit to přes reflexi, mi přijde předat setProperty metodě vlastní upravenou implementaci InvalidCharHandler rozhraní, která bude logovat konvertování neplatného znaku. Případně podědit již existující třídu InvalidCharHandler.ReplacingHandler a do convertInvalidChar metody přidat zaznamenávání do logu.
Čas:27.8.2012 14:00:53
Od:Petr Kostroun
Předmět:Re: Re: Re: Je to dobré řešení?
Nevím, zda je to jednodušší. Potíž je v tom, že kdybych rozšířil ten InvalidCharHandler.ReplacingHandler, tak bych měl pouze zalogováno, že k nějaké takovéto chybě došlo, ale byla by dle mého potíž zjistit přesně kde, jelikož ten ReplacingHandler kontroluje znak po znaku. Mě by se spíš hodilo mít zalogovaný něco jako u entity id = 1 je koplej atribut a, což po pravdě nevím, jak ze Streamu při serializaci do xml dostat...
Čas:27.8.2012 20:16:51
Od:Maaartin
Předmět:Vidim jako to jako bug
Vubec nechapu jak k takovy chybe muze dojit. Ze v DB jsou znaky, co by tam byt nemely je jeden problem, to se stane a je to treba casem opravit. Ale PROC JE XML NEUMI POSLAT? Pro srovnani: Gson umi vsechny znaky, kdyz to nejde normalne, tak tam napise "\u0005". Nejaky "&5;" snad taky existuje, ne? Ten "spatny" znak je predpokladam v nakym VARCHAR-u. Tam je (ve vsech kodovanich co znam) legalni a stejne tak je legalni v Jave. Proto musi byt legalni ho i poslat.
Čas:5.9.2012 8:35:06
Od:Martin P.
Předmět:XML 1.1?
Ahoj, bolo by mozne vyriesit tento problem pouzitim XML 1.1? Tam su tieto znaky povolene (http://www.w3.org/TR/xml11/#sec-xml11). Uz som sa s podobnym problemom raz stretol, ale vtedy sme to vyriesili malym hackom, lebo nebol cas na poriadne riesenie. Rad by som vedel, ci by sa to dalo vyriesit elegantne s XML 1.1.
Diskuzní příspěvky
Jan Je to dobré řešení?
Petr Kostroun   Re: Je to dobré řešení?
Tomáš   Re: Re: Je to dobré řešení?
Petr Kostroun   Re: Re: Re: Je to dobré řešení?
Maaartin Vidim jako to jako bug
Martin P. XML 1.1?