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
> > 
> 
> 

Odpovedet emailem