Ano, v podstate potrebuju funkcionalitu SoapUI, ktera na zaklade XSD mi vyrobi XML message. Potreboval bych to udelat vsak v runtime, v kodu.
Dne 20. dubna 2011 9:55 Juraj Kazda <[email protected]> napsal(a): > Napr. SoapUI generuje requesty na zaklade XSD/WSDL. > > -juraj. > > > > On 04/20/2011 09:33 AM, Dusan Msk wrote: > > Ja nejak tak v kutiku duse od zaciatku toho threadu pocitujem, ze autor > chce "generator xml na zaklade xsd" z akychysi vymyslenych hodnot ( > splnajucich podmienky na validitu vysledneho dokumentu ). Je to tak? > > To predsa technicky nie je ziaden problem, aj ked som sa osobne so ziadnou > takou utilitou zoci-voci este nestretol. Mozno take cosi vedia nejake > sofistikovanejsie xml/xsd editory typu komodo a spol. > > -- > Dusan > > 2011/4/19 Vladislav Krejčiřík <[email protected]> > >> Rozumim tomu co pisete, ja s tim souhlasim. Obecne to tak je. Ale jak jsem >> psal, u me je to hodne specificky priklad. XSD se nemeni za behu aplikace. >> Jsou pevne dane pred spustenim aplikace. Postup je takovy, ze uzivatel >> nahraje potrebna XSD do daneho adresare. Potom spusti aplikaci. Aplikace si >> tato XSD nahraje a pomoci XSOMu naparsuje. Pomoci XSOMu je schopna zjistit >> informace z anotaci... >> >> Data vim kam budu vyplnovat. U kazdeho elementu mam anotaci ktera >> obsahuje key, identifikator toho jakou hodnotu tam mam vlozit. Takze jak >> jsem psal, tak asi jedinym zpusobem ktery me napadl je projit objektovou >> reprezentaci XSD a vytvaret XML message. Tam kde narazim na element s >> anotaci tak tam vlozim podle zadaneho key hodnotu. Tuto message pak poslu. V >> podstate jak asi spravne pisete tak jiny zpusob ani neni mozny.. >> >> Je to velice specificke XSD. Mozna jsem mel rict ze XSD je vytvareno XSD >> designerem treti strany. Tento designer neumoznuje vytvorit jinou strukturu >> XSD nez ktera je pozadovana aplikaci. Tzn. jeden complexType se sequenci >> ktera obsahuje elementy ruznych typu. >> >> Diky za pripominky a navrhy >> >> >> >> >> >> >> >> >> >> >> >> 2011/4/19 Petr Novak <[email protected]> >> >>> >>> Stejně asi jako ostatní si myslím, že to, co chcete vytvořit je tak >>> trochu nesmysl. Možná to bude fungovat ve velmi omezené podobě na drobné >>> změny v xsd, ale i to, že žádná podobná knihovna asi vůbec neexistuje svědčí >>> o tom, že takto se tato problematika neřeší. >>> To budete psát parser s umělou inteligencí, který umí odpovídat na >>> jakýkoliv dotaz - ty příklady se slovenštinou byly přesný :) . Jak už tu >>> bylo několikrát uvedeno, těžko můžete vyplňovat data, která ani nevíte kam >>> budete vyplňovat, případně, když po Vás XSD bude vyžadovat nové položky, tak >>> to byste pak k tomu musel dynamicky dogenerovat i nějakou logiku v aplikaci, >>> která by je vypočítala a doplnila a nebo to napojit na křišťálovou kouli :). >>> >>> Nevím jak často a jak moc se Vám ta XSD mění a kdo je jejich dodavatelem >>> (jestli to je v rámci projektu, nebo externě). Ale z principu věci pokud >>> Vám někdo mění to XSD - tedy vzdálené rozhraní, tak buď musí dělat >>> kompatibilní změny, pak vy nemusíte nic měnit a nepotřebujete dynamické >>> generování XML, protože to Vaše naimplementované bude stále validní. A nebo >>> dělá nekompatibilní změny a pak vy musíte vytvořit novou knihovnu na základě >>> nového XSD - standardní Change-Request-management. Pak by ty XSD měly být >>> verzované, atd.. Navíc, pokud ta změna bude až takového rázu, že tam >>> přibude třeba datový element navíc, tak to stejně může znamenat, že musíte >>> upravit dotazy do DB, apod. abyste ty data vůbec získal a mohl je vložit do >>> XML. >>> >>> Vždy když slyším podobný požadavek od svých kolegů, tak jim vysvětlím, co >>> je to API a XSD je API a všem, co něco takového navrhují doporučuji >>> nastudovat http://wiki.apidesign.org/wiki/Main_Page a především celou >>> tu knížku Jardy Tulacha, a je úplně jedno, že to není o XSD, protože >>> principy jsou stále stejné. Ale chápu, že jste možná v situaci, kdy Vám to >>> API dodává třetí strana, která neumí držet zpětnou kompatibilitu a neustále >>> něco mění - pak jsou jen 2 řešení - buď změnit dodavatele a nebo udělat >>> mezivrstvu, která bude tuto nekompatibilitu řešit. I o tom je v té knize >>> povídáno - řešení závislostí na třetích stranách. >>> >>> Proto se asi v těchto případech používají různé integrační servery, ESB, >>> apod. - vlastně tvoří tu mezivrstvu. A tak mě napadá, že tím se můžete i >>> inspirovat a použít XSL. >>> >>> Udělat to více volně vázané, tedy vy budete generovat nějaké své >>> statické XML, které budete přes XSL transformovat na to požadované XML >>> odpovídající tomu XSD. Ale ani to XSL nedokážete asi generovat dynamicky >>> podle XSD. Ale mělo by to výhodu v tom, že nemusíte programovat, >>> kompilovat, deployovat, apod. Prostě jen budete měnit transformační >>> šablony umístěné v adresáři mimo. >>> >>> A nebo ještě mě napadlo použít šablony na generování toho XML z dat - >>> tedy třeba vzít freemarker, nebo velocity - udělat si v něm šablonu XML >>> elementů (prostě šablonu té message) a na patřičná místa doplňovat jen >>> hodnoty. A když se změní API v podobě změny XSD, tak hold musí někdo >>> sednout a ty šablony upravit pro tu novou verzi. A opět se nemusí řešit >>> žádná kompilace, apod. Prostě jen nahrajete nová XSD, upravíte šablonu, >>> vygenerujete si zkušební XML, proženete ho přes XSD validator, tím ověříte, >>> že vše je OK, že šablona generuje správná XML, která pak můžete v klidu >>> posílat dál do fronty. >>> >>> A nebo použít nějaký dynamický jazyk a skládat to jako DOM mimo javu, aby >>> ty změny byly jednodušeji zapracovatelné - groovy, ruby, apod. Vlastně je to >>> podobné těm šablonám, jen jiný způsob. >>> >>> Tak snad to dá zase trochu jiný pohled na Váš problém ... >>> >>> >>> >>> Dne 19.4.2011 15:27, Vladislav Krejčiřík napsal(a): >>> >>> Aplikace funguje nasledovne: >>> >>> Pri startu si aplikace natahne vsechny XSD ze zadaneho adresare. Pak >>> potrebuju ke kazde XSD definici udelat validni XML message do ni vlozit >>> potrebne hodnoty a poslat na zadanou queue. >>> >>> XSD definice ktere slouzi jako vstup jsou znacne omezene. Obsahuji jen >>> jeden ComplexType se sequenci elementu ruznych typu. Ale chapu ze tohle je >>> specialni pripad a obecne to jiste nelze.. >>> >>> >>> Postup vyuziti xjc pro vygenerovani pomocnych trid neni podle me v mem >>> pripade vhodny.. Situace je velice podobna pripadu, kdyz by se XSD menily za >>> behu. >>> >>> Je nejaky obecny postup sestavovani validnich XML message z dynamicky >>> se menicich XSD? >>> >>> Dekuji za vase nazory. >>> >>> >>> XSD muze vypadat takto: >>> >>> <?xml version="1.0" encoding="ibm852"?> >>> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> >>> <xs:complexType name="L1_L2_CyclicDataRM"> >>> <xs:annotation> >>> <xs:appinfo> >>> <Transport>EMS</Transport> >>> <MessageType>Queue</MessageType> >>> <MessageName>ems.topic.L1_L2_CyclicDataRM</MessageName> >>> <Timer>2000</Timer> >>> </xs:appinfo> >>> </xs:annotation> >>> <xs:sequence> >>> <xs:element name="Bucket__Brigade"> >>> <xs:complexType> >>> <xs:sequence> >>> <xs:element maxOccurs="unbounded" name="ArrayOfString" >>> type="xs:string"> >>> <xs:annotation> >>> <xs:documentation>Bucket >>> Brigade.ArrayOfString</xs:documentation> >>> </xs:annotation> >>> </xs:element> >>> <xs:element name="UInt2" type="xs:unsignedShort"> >>> <xs:annotation> >>> <xs:documentation>Bucket Brigade.UInt2</xs:documentation> >>> </xs:annotation> >>> </xs:element> >>> <xs:element name="Boolean" type="xs:boolean"> >>> <xs:annotation> >>> <xs:documentation>Bucket Brigade.Boolean</xs:documentation> >>> </xs:annotation> >>> </xs:element> >>> <xs:element name="Int1" type="xs:string"> >>> <xs:annotation> >>> <xs:documentation>Bucket Brigade.Int1</xs:documentation> >>> </xs:annotation> >>> </xs:element> >>> </xs:sequence> >>> </xs:complexType> >>> </xs:element> >>> <xs:element name="Square__Waves"> >>> <xs:complexType> >>> <xs:sequence> >>> <xs:element name="UInt1" type="xs:byte"> >>> <xs:annotation> >>> <xs:documentation>Square Waves.UInt1</xs:documentation> >>> </xs:annotation> >>> </xs:element> >>> <xs:element name="Real8" type="xs:double"> >>> <xs:annotation> >>> <xs:documentation>Square Waves.Real8</xs:documentation> >>> </xs:annotation> >>> </xs:element> >>> <xs:element name="Int2" type="xs:short"> >>> <xs:annotation> >>> <xs:documentation>Square Waves.Int2</xs:documentation> >>> </xs:annotation> >>> </xs:element> >>> </xs:sequence> >>> </xs:complexType> >>> </xs:element> >>> </xs:sequence> >>> </xs:complexType> >>> </xs:schema> >>> >>> >>> >>> >>> >>> 2011/4/19 Robert Novotny <[email protected]> >>> >>>> Vezmime si priklad zo slovenciny. Mam gramatiku, ktora hovori, ze >>>> slovenska veta ma mat: >>>> >>>> Podmet - prisudok - predmet. >>>> >>>> Validacia sa pyta, ci veta ,,Pes zerie granule" splna gramatiku. Vy vsak >>>> chcete riesit problem typu ,,potrebujem vyrobit slovensku vetu". Ako ma >>>> kniznica vediet, ci ma vygenerovat slovensku vetu ,,Pes zerie granule" >>>> alebo >>>> ,,Vyvojar miluje Javu" alebo ,,Ja mam psa"? >>>> >>>> Ako sa spominalo, JAXB na zaklade XSD vyrobi triedu s instancnymi >>>> premennymi podmet, prisudok, predmet a anotaciami zaisti, ze objekt sa >>>> serializuje spravne a teda ze vysledne XML bude splnat schemu. >>>> >>>> Ako nad tym uvazujem, tak bud chcete mat v kode obmedzene, aby ste >>>> nevymysleli nahodou spravu, ktora nedava zmysel (,,Vonku prsi"), lenze to >>>> vam zaisti prave typovy system, ktory je reprezentovany prave triedami, >>>> ktore su vygenerovane v JAXB. >>>> >>>> Vy hovorite, ze nechcete generovat ziadne triedy ,,ukladane na >>>> filesystem", ale mne to nie je jasne. Typicky workflow znamena, ze mam XSD, >>>> v kompilacnom kroku z neho vypadnu klasicke Java triedy a tie pouzivam >>>> uplne >>>> rovnako ako akekolvek ine triedy. Alebo mate situaciu, ked sa XSD meni za >>>> behu? >>>> >>>> RN >>>> >>>> >>>> >>>> On 19. 4. 2011 14:11, Vladislav Krejčiřík wrote: >>>> >>>> ok, mozna jsem to spatne popsal. Zkusim znovu. Ja nechci nic validovat, >>>> protoze nemam vlastne ani co. XSD mi definuje strukturu nejake message. Ja >>>> bych potreboval takovou messge umet vytvorit, "vygenerovat" z XSD definice. >>>> Myslel jsem ze bych ziskal nejakou objektovou reprezentaci te XML message >>>> kde bych nastrkal hodnoty co potrebuju. Potom bych uz jen XML message >>>> poslal >>>> do fronty. >>>> >>>> Nevim jestli existuje nejaka knihovna, ktera to umoznuje. Nebo budu >>>> muset rucne takovou XML vystavet.. >>>> >>>> >>>> >>>> >>>> >>>> Dne 19. dubna 2011 12:48 Lukas "lzap" Zapletal <[email protected] >>>> > napsal(a): >>>> >>>>> Vlado, >>>>> >>>>> myslim ze se tady snazis michat dve veci. DOM a XSD. Prvni jmenovany >>>>> slouzi >>>>> k manupulaci s (ted to zjednodusim) XML, druhy je urcen pro popis a >>>>> kontrolu >>>>> XML dokumentu. Krome jineho lze namapovat na JavaBeany a ruzne jine >>>>> struktury zname z pocitacovych jazyku. >>>>> >>>>> To co asi chces je nejprve dokument zvalidovat pomoci XSD schematu >>>>> (doporucuji ruzne tutorialy na netu), a pote jej proste a jednoudse >>>>> nacist >>>>> do DOMu a parsovat. Je mozne, ze nejaka DOM knihovna to bude umet >>>>> udelat "v >>>>> jednom", ale v podstate jsou to dve ruzne veci. >>>>> >>>>> Nebo jsem te mozna spatne pochopil. Zkus to reformulovat. >>>>> >>>>> http://en.wikipedia.org/wiki/Document_Object_Model >>>>> http://en.wikipedia.org/wiki/XML_Schema_(W3C) >>>>> >>>>> >>>>> ----- >>>>> Later, >>>>> Lukas >>>>> -- >>>>> View this message in context: >>>>> http://konference-java-cz.958153.n3.nabble.com/Vytvoreni-instance-XML-objektu-z-XSD-definice-tp2837707p2838272.html >>>>> Sent from the konference java.cz mailing list archive at Nabble.com. >>>>> >>>> >>>> >>>> >>>> -- >>>> >>>> /**************************************/ >>>> Best regards / S pozdravem >>>> Vladislav Krejčiřík >>>> http://www.vkrejcirik.info >>>> >>>> >>>> >>>> >>> >>> >>> -- >>> >>> /**************************************/ >>> Best regards / S pozdravem >>> Vladislav Krejčiřík >>> http://www.vkrejcirik.info >>> >>> >>> >>> >>> -- >>> Petr >>> >>> >> >> >> -- >> >> /**************************************/ >> Best regards / S pozdravem >> Vladislav Krejčiřík >> http://www.vkrejcirik.info >> >> >> > > -- /**************************************/ Best regards / S pozdravem Vladislav Krejčiřík http://www.vkrejcirik.info
