Zdravim, Mate pravdu, s tim whiteSpace to XMLSpy (mensi duvera) i Suni Multi-Schema Validator (vetsi duvera) zkousne a XML prohlasi za validni. Zajimave, opet jsem se dozvedel neco noveho :)
Takze dostavate validni XML a neni kde si stezovat. Pak bych mozna zvazil reseni typu nejake normalizace prichoziho XML dokumentu do podoby, kterou by JAXB2 zkouslo. Tj. trivialni SAX handler, ktery u vsech, ci jen vybranych elementu (dle konfigurace) odrizne pocatecni a koncovy whitespace. Sice ta normalizace zabere par ms navic, ale ty rychle ziskate zpet tim, ze nasledne pouzijete JAXB2 misto JAXB1 - dle perf porovnani na netu by na tom JAXB2 melo byt podstatne rychleji a to nemluvim o vetsim komforu jeho pouziti. Jakmile Koshuke aspol JAXB2 zafixuji, normalizacni fazi jednoduse vyradite a nemusite uz nikdy resit prechod na JAXB2. Jen napad jak obejit pouziti tech bindingu a psani vlastnich konvertoru. Honza -----Původní zpráva----- Od: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] za uživatele Rastislav Siekel Odesláno: Tuesday, October 30, 2007 14:33 Komu: 'Java' Předmět: RE: JAXB - unmarshal s white space Ahoj Honza, prešiel som bugzillu na JAXB a už je to tam zapísané ako bug 396 (https://jaxb.dev.java.net/issues/show_bug.cgi?id=396). To čo píšete znie síce rozumne ale predstavte si situáciu - zákazník z programu tretej strany posiela ku mne XML podľa tejto mojej schémy. Ak v posielanom XML sú nejaké white space okolo dátumov alebo enumeration, ja dostanem NULL, z toho usúdim, že tam mám dať default hodnotu a zapíšem podľa toho dáta do DB. Výsledok: 1. On nedostane žiadnu chybu, pretože to čo poslal JE VALIDNÉ xml (aj keď vy tvrdíte, že nie je). 2. Ja neviem o žiadnej chybe, pretože nechať napr. tento konkrétny dátum NULL je povolený ťah. 3. Ale dáta sú chybné. Ako som už písal minule, JAXB 1 to rieši presne podľa mojich požiadaviek, takže nevidím dôvod ho nepoužiť. Ale vďaka za názor, aspoň som zistil, že sa o tom už v JAXB komunite vie. Rastislav "Bedo" Siekel > -----Original Message----- > From: [EMAIL PROTECTED] > [mailto:[EMAIL PROTECTED] On Behalf Of Jan Moravec > Sent: 30. októbra 2007 12:37 > To: 'Java' > Subject: RE: JAXB - unmarshal s white space > > Zdravim, > > Mozna to zni prilis trivialne, ale co kdybyste to XML > generoval jako validni, tj. bez white space v dateTime > hodnotach a yhnul se tak nutnosti psani vlastnich konvertoru. > Pokud Vam jde o citelnost, preci muzete i pak generovat > citelne XML s odradkovanim mezi elementy apod. > > Prijde mim, ze jdete zcela zbytecne hlavou proti zdi a drzel > bych se hesla ze vzdy je lepsi odstranit pricinu problemu > (whitespace v dateTime), nez resit/obchazet dusledky (JAXB2 > odmita XML zpracovat + pisu si vlastni konvertory + musim > pouzivat externi/interni JAXB binding predpis apod). > > Jinak pokud mate problem s JAXB2, zeptejte se primo v jejich > konferenci. > Moje zkusenost s ni je vice nez pozitivni a odpovedi jsem mel > vzdy do max druheho dne. > > Honza > > -----Původní zpráva----- > Od: [EMAIL PROTECTED] > [mailto:[EMAIL PROTECTED] za uživatele Rastislav Siekel > Odesláno: Tuesday, October 30, 2007 08:47 > Komu: 'Java' > Předmět: RE: JAXB - unmarshal s white space > > > Nie, existuje atribút "binding" ktorý umožňuje zadať názov > externého súboru, ktorý bude tiež slúžiť na generovanie JAVA > zdrojákov. Ale aj tak ostáva nutnosť písať si pre skoro každý > typ vlastný "tupý" handler, ktorý len otrimuje vstup . Ale > nejde mi do hlavy, že by sa na to v JAXB, alebo vlastnej XML > Schéme fakt nemyslelo. > > Rastislav "Bedo" Siekel > > > > -----Original Message----- > > From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] > > On Behalf Of Lukas Zapletal > > Sent: 29. októbra 2007 11:19 > > To: Java > > Subject: Re: JAXB - unmarshal s white space > > > > No a ta vec musi byt soucasti toho schematu? Nemuzete to xjc > > generatoru rict nejak jinak? > > > > LZ > > > > 2007/10/29, Rastislav Siekel <[EMAIL PROTECTED]>: > > > > > > > > > Odpoviem si sám :-( > > > > > > Po niekoľkých dňoch hľadania som zistil, že bez niečoho > > podobného to > > > zrejme > > > nepôjde: > > > > > > XML Schéma: > > > ... > > > <jaxb:globalBindings> > > > <jaxb:javaType name="java.util.Date" > > xmlType="xs:dateTime" > > > parseMethod="xxx.yyy.jaxb.DateConverter.parseDateTime" > > > > > printMethod="xxx.yyy.jaxb.DateConverter.printDateTime" /> > > > </jaxb:globalBindings> ... > > > > > > A musím si samozrejme napísať Triedu > > "xxx.yyy.jaxb.DateConverter". A > > > neplatí to len pre dátumy, ale aj pre "enumeration" a > > vlastne všetky > > > typy okrem čísel. > > > Toto riešenie mi fakt nepripadá vhodné, pretože > potrebujem vytvoriť > > > schému pre heterogénne prostredie a druhá strana nemá vedieť, že > > > používam nejaký JAXB. > > > > > > Takže výsledok - sú možné 2 riešenia: > > > 1. Používať starý dobrý JAXB 1. > > > 2. Prispôsobiť XML tomu, že hodnoty musia byť bez white space na > > > jednom riadku vrátane štartovacieho a ukončovacieho tagu. > > > > > > Ja osobne pôjdem prvou cestou. > > > > > > > > > Ak by ste mi niekto tieto zistenia vyvrátil, bol by som > > šťastný človek > > > ;-) > > > > > > Rastislav "Bedo" Siekel. > > > > > > > > > ________________________________ > > > From: [EMAIL PROTECTED] > > [mailto:[EMAIL PROTECTED] > > > On Behalf Of Rastislav Siekel > > > Sent: 22. októbra 2007 15:13 > > > To: 'Java' > > > Subject: JAXB - unmarshal s white space > > > > > > > > > > > > Zdravím vospolok, > > > > > > asi to bude len nejaká blbosť, ale nemôžem prísť na to, > ako donútiť > > > JAXB robiť unmarshalling, ak je vstupné XML well-formated. > > Pokiaľ je > > > na vstupe niečo ako: > > > > > > <dtZadania>2007-09-30T15:23:24.000</dtZadania> > > > > > > - je všetko v poriadku. > > > > > > > > > Ak tam je dátum vrátane \n: > > > > > > <dtZadania> > > > 2007-09-30T15:23:24.000 > > > </dtZadania> > > > > > > tak mi to proste vráti NULL. > > > > > > > > > Schéma bola najprv: > > > <xsd:element name="dtZadania" type=""xsd:dateTime" minOccurs="0" > > > maxOccurs="1" /> > > > > > > teraz je: > > > > > > > > > > > > <xsd:element name="dtZadania" minOccurs="0" maxOccurs="1"> > > > <xsd:simpleType> > > > <xsd:restriction base="xsd:dateTime"> > > > <xsd:whiteSpace value="collapse" /> > > > </xsd:restriction> > > > </xsd:simpleType> > > > </xsd:element> > > > > > > > > > Poraďte niekto, kde sa to nastavuje? > > > > > > Rastislav "Bedo" Siekel > > > > > > P.S. JAXB je vo verzii 2.1.5 > > > > > > ________________________________ > > > > > > Ing. Rastislav Siekel > > > Prosoft s.r.o., Kuzmányho 8, 010 01 Žilina, Slovakia E-mail : > > > <[EMAIL PROTECTED]> Tel : 041/562 54 91 Fax : 041/562 54 > 97 Mobil : > > > 0905 34 00 20 > > > > > > > > > -- > > Lukas Zapletal > > http://lukas.zapletalovi.com > > > >