Informatikai Navigátor Érdekes Java Programozói könyvtárak
|
|
- Tamás Soós
- 8 évvel ezelőtt
- Látták:
Átírás
1 2013. Július Informatikai Navigátor Érdekes Java Programozói könyvtárak Gondolatok a szoftverek használatáról és fejlesztéséről 9. szám
2 Informatikai Navigator Gondolatok a szoftverek használatáról és fejlesztéséről Tartalomjegyzék 1. JAXB - A Java és XML összekötése 3 2. BeanShell - Könnyűsúlyú scriptek Java nyelvbe ágyazva Apache Commons - BeanUtils Apache Commons - Lang Joda.org - Programozás dátumokkal és időkkel Apache Commons - Virtual File System Apache Commons - FileUpload Apache Commons - IO Az Active Directory elérése 104 Főszerkesztő: Nyiri Imre (imre.nyiri@gmail.com) 2
3 JAXB - A Java és XML összekötése 1. JAXB - A Java és XML összekötése Az XML adatok és a Java objektumok közötti leképzés fontos eszköze egy korszerű fejlesztői környezetnek. Sok olyan Java API létezik, amelyek XML-t kezelnek, de itt most az a kérdés, hogy egy XML-ben tárolt adatszerkezetet hogyan konvertálunk oda-vissza egy alkalmas Java objektumba. Ezt oldja meg a JDK 1.6 óta beépített részként működő JAXB könyvtár. A JAXB 1 az XML adatok és a Java objektumok közötti leképzést valósítja meg, aminek nyilvánvaló előnye az, hogy az XML adatstruktúrákat Java objektumként tudjuk kezelni és fordítva. A Java sok helyen felhasználja ezt a beépített szolgáltatást, erre jó példa az JAX-WS webservice technológia XML Java leképzése. A leképzés azt jelenti, hogy a Java objektum adattagjait (vagy más néven a property-ket) leképezzük (ezt nevezzük binding-nak) az XML tagekre. Ezt a feladatot a JAXB kifinomultan és rugalmasan képes ellátni. A fejlesztést végezhetjük a Java osztályokból kiindulva, de lehetséges az is, hogy az XML sémák alapján generáljuk a befogadó objektumok osztályait. A következő egyszerű példa az alapszintű használatba vezet be. Bevezető példa A Java osztályok Legyen a célunk az, hogy az 1-1. Programlistán látható Employee class objektumait XML formátumra alakítsuk (perzisztáljuk). Amint látjuk ez az osztály egy egyszerű JavaBean (más szavakkal POJO 2 ), aminek van néhány adatmezője, köztük az egyik az Address class maga is egy osztály, amit az 1-2. Programlista mutat. Mindez igazán egyszerű, de most szeretnénk egy olyan XML modellt rendelni ehhez, amibe egy Employee példány elmenthető. A JAXB 2.0 óta mindez úgy valósítható meg, hogy a Java 1 JAXB=Java API for XML Binding 2 POJO=Plain Old Java Object osztályt annotáljuk a -okkal. Tekintettel arra, hogy az Employee class reprezentálja az egész objektum kezdetét, így az őt leíró XML gyökérelemének is ez felel meg. Ezt reprezentálja aminek paraméterében még azt is megadtuk, hogy ez a gyökér XML tag az org.ceg.test XML névtérben lesz. annotáció azt mondja meg, hogy ez a class egyben egy XSD-beli típusnév is lenne, amit láthatunk is, amennyiben XML sémát szeretnénk a későbbiekben legenerálni. A névteret itt is meg kell adni. // 1 1. Programlista : Employee. j a v a package org. c s. t e s t ; import javax. xml. bind. annotation. XmlElement ; import javax. xml. bind. annotation. XmlRootElement ; import javax. xml. bind. annotation. XmlType ( namespace = " org. ceg. t e s t " namespace = " org. ceg. t e s t " ) public class Address a d d r e s s ( namespace = " org. ceg. t e s t " ) S t r i n g name S t r i n g sex int kor double s u l y ; Most az Employee mindegyik adattagját jelzéssel, ami azt jelenti, 3
4 JAXB - A Java és XML összekötése hogy ezen mezők mindegyikének egy-egy XML tag-et szeretnénk megfeleltetni. A tag neve a bean property neve lesz, de egy esetleges name annotáció attribútum megadással explicit is megadhatjuk, hogy mi legyen az adott XML címke neve. Esetünkben most csak a namespace paramétert használjuk próbaként, hagyjuk, hogy az XML tag nevek automatikusan képződjenek a class adatmezők nevéből. Az Address class annotálása ezek után már érthető. // 1 2. Programlista : Address. j a v a package org. c s. t e s t ; import javax. xml. bind. annotation. XmlElement ; import javax. xml. bind. annotation. XmlType namespace = " org. ceg. t e s t " ) public class S t r i n g s t r e e t int housenumber ; Az eddigiekben odáig jutottunk, hogy az Employee és Address osztályokat elláttuk JAXB annotációkkal, ezzel megteremtettük a lehetőségét annak, hogy kipróbáljuk a JAXB Java Object XML leképzési lehetőségét, amit marshallingnak nevezünk. Nézzük is meg a használatát! Az XML előállítása (marshaller) Az 1-3. Programlista a JAXB használatát szemlélteti, feladata az, hogy egy sorok között előállított e Employee objektumot XML fájlba mentse. Ehhez először a 26. sorban egy jaxb- Context objektum előállítása szükséges, amely az Employee class mentén ad egy kezelő kontextust, ezért volt szükséges ezt a newinstance() metódusban paraméterül átadni. A 27. sorban egy általános eljárással lekérünk a kontextustól egy jaxbmarshaller objektumot, ami a tényleges Java Object XML átalakítást fogja végezni. A 28. sor nem kötelező lépés, de mi azt szeretnénk, hogy az előállított XML szépen formázva nézzen ki. A 30. sor egy xmlfile nevű File objektum, ahova majd az eredményül kapott XML-t mentjük. Végül a 30. sorban elvégezzük a feladatot, azaz az e objektumot perzisztáljuk az xmlfile helyre. 1 // 1 3. Programlista : TestJAXBMarshaller. j a v a 2 3 package org. c s. t e s t ; 4 5 import java. i o. F i l e ; 6 import javax. xml. bind. JAXBContext ; 7 import javax. xml. bind. JAXBException ; 8 import javax. xml. bind. M a r s h a l l e r ; 9 10 public class TestJAXBMarshaller public s t a t i c void main ( S t r i n g [ ] a r g s ) 13 throws JAXBException Address a = new Address ( ) ; 16 a. housenumber = 1 2 ; 17 a. s t r e e t = " Váci út " ; Employee e = new Employee ( ) ; 20 e. a d d r e s s = a ; 21 e. kor = 3 2 ; 22 e. name = "Alma Ferenc " ; 23 e. sex = " f é r f i " ; 24 e. s u l y = 8 8 ; JAXBContext jaxbcontext = JAXBContext. newinstance ( Employee. class ) ; 27 M a r s h a l l e r j a x b M a r s h a l l e r = jaxbcontext. c r e a t e M a r s h a l l e r ( ) ; 4
5 JAXB - A Java és XML összekötése 28 j a x b M a r s h a l l e r. s e t P r o p e r t y ( M a r s h a l l e r.jaxb_formatted_output, Boolean.TRUE) ; 29 F i l e xmlfile = new F i l e ( "/home/ t a n u l a s /xml/employee. xml" ) ; 30 j a x b M a r s h a l l e r. marshal ( e, xmlfile ) ; A program lefuttatása után az 1-4. Programlista mutatja a legyártott Employee.xml fájl tartalmát. Az alábbiakat javasoljuk megfigyelni: A class nevek alapértelmezetten kisbetűvel kezdődnek. Az adatmező nevek teljesen megmaradnak. Az XML névtér minden olyan tag-hez bekerült, ahol ezt kértük -ok megadásánál. rendelkező objektumba pakoljuk az XML outputot, ilyen lehet például a StringWriter class, aminek a használatát a 1-5. Programlistáról tanulmányozhatjuk. Ekkor a marshal() metódus a writer objektumba teszi az eredményt, ahonnan azt String vagy StringBuffer objektumként is lekérhetjük. // 1 5. Programlista : S t r i n g W r i t e r S t r i n g W r i t e r w r i t e r = new S t r i n g W r i t e r ( ) ; j a x b M a r s h a l l e r. marshal ( e, w r i t e r ) ; S t r i n g data = w r i t e r. t o S t r i n g ( ) ; S t r i n g B u f f e r d a t a B u f f e r = w r i t e r. g e t B u f f e r ( ) ; // 1 4. P r o g r a m l i s t a : Employee. xml <?xml version=" 1. 0 " encoding="utf 8" standalone=" yes "? > <n s 2 : e m p l o y e e x m l n s : n s 2=" org. ceg. t e s t "> <a d d r e s s> < s t r e e t>váci út</ s t r e e t> <housenumber>12</ housenumber> </ a d d r e s s> <ns2:name>alma Ferenc</ ns2:name> <s e x> f é r f i</ s e x> <kor>32</ kor> <s u l y>8 8. 0</ s u l y> </ n s 2 :employee> Az esetek jelentős részénél nem mindig fájlba szeretnénk tenni az előállított XML-t, ezért a marshal() metódusnak is több alakja van. Tipikus használat, hogy egy Writer interface-szel Az XML visszaolvasása (unmarshaller) Most végezzük el a fordított feladatot, azaz írjunk egy olyan JAXB alapú programot, ami az XML Java Object beolvasást (unmarshalling) valósítja meg. Mindezt végezzük el a most előállított Employee.xml fájlra. Amennyiben nem lenne -olt (azaz szebben fogalmazva: annotált) befogadó Java class, akkor azt el kéne készítenünk, de ezek már itt vannak: Emloyee, Address. A feladat megoldását az 1-6. Programlista mutatja. 1 // 1 6. Programlista : TestJAXBUnmarshaller. j a v a 2 3 package org. c s. t e s t ; 4 5 import java. i o. F i l e ; 6 import javax. xml. bind. JAXBContext ; 7 import javax. xml. bind. JAXBException ; 8 import javax. xml. bind. Unmarshaller ; 9 10 public class TestJAXBUnmarshaller public s t a t i c void main ( S t r i n g [ ] a r g s ) 13 throws JAXBException JAXBContext jaxbcontext = JAXBContext. newinstance ( Employee. class ) ; 16 Unmarshaller jaxbunmarshaller = jaxbcontext. c r e a t e U n m a r s h a l l e r ( ) ; 17 F i l e xmlfile = new F i l e ( "/home/ t a n u l a s /xml/employee. xml" ) ; 18 Employee e = ( Employee ) jaxbunmarshaller. unmarshal ( xmlfile ) ; 5
6 JAXB - A Java és XML összekötése 19 System. out. p r i n t l n ( e. name ) ; 20 System. out. p r i n t l n ( e. a d d r e s s. s t r e e t ) ; A 15. sorban a már ismert módon egy JAXB- Context objektumot készítünk, amiben csak az Employee class játszik szerepet. Ezt azért emeltük most ki, mert általában több osztály is megadható lenne a gyártómetódusnak, erre majd a későbbiekben mutatunk példát. A 16. sorban természetesen most egy Unmarshaller objektumot kérünk le, hogy azt a 17. sorban megadott fájlra működtessük. Magát a beolvasást a 18. sor unmarshal() metódusa végzi, amelynek használatában nincs semmi különleges. Az utolsó 2 sor csak tesztelésként kiírja a képernyőre az XML fájlból létrehozott objektum 2 mezőjének az értékét. Az XML Java Object átalakításnál is gyakori eset, amikor nem fájlból érkezik az input XML, ezért az unmarshal() metódusnak is sok alakja van. A gyakorlatban talán az egyik leghasznosabb esetet mutatja az 1-7. Programlista, ahol egy Java String objektumban van az XML, amit egy StringReader objektum közbeiktatásával már át is adhatunk a metódusnak. // 1 7. Programlista : StringReader S t r i n g xmlstring = beolvasfromxmlfile ( ) ; StringReader r e a d e r = new StringReader ( xmlstring ) ; Employee em = ( Employee ) jaxbunmarshaller. unmarshal ( r e a d e r ) ; Az XML séma (XSD) előállítása Alapvetően fontos az XML világban, hogy annak a sémáját is lehetőleg birtokoljuk, így annak előállításához a JAXB a schemagen parancsot biztosítja, ami a JDK része. Amennyiben a java/javac elérhető, úgy ez a parancs is rendelkezésre áll. Használata egyszerű, mindössze meg kell adnunk azt a Java forrásfájlt, amiben egy JAXB annotált class található. Az Employee class-ra esetünkben ez a parancs futtatható: schemagen cp / opt / netbeans / myprojects / TestProjects / JavaTest / s r c / opt / n e t b e a n s / m y p r o j e c t s / T e s t P r o j e c t s / JavaTest / s r c / org / c s / t e s t / Employee. j a v a A -cp kapcsolót azért adtuk meg, hogy a beágyazott Address osztályt is megtalálja a parancs, hiszen ez a séma része kell legyen. A parancs lefutása után az 1-8. Programlista által tartalmazott sémát kapjuk meg. 1 // 1 8. P r o g r a m l i s t a : Employee XML séma 2 3 <?xml version=" 1. 0 " encoding="utf 8" standalone=" yes "?> 4 <x s:schema version=" 1. 0 " targetnamespace=" org. ceg. t e s t " x m l n s : t n s=" org. ceg. t e s t " x m l n s : x s=" h t t p : //www. w3. org /2001/XMLSchema"> 5 6 <xs: element name=" employee " type=" tns: employee "/> 7 8 <xs:complextype name=" employee "> 9 <x s : s e q u e n c e> 10 <x s : e l e m e n t name=" a d d r e s s " type=" t n s : a d d r e s s " minoccurs="0"/> 11 <x s : e l e m e n t name="name" type=" x s : s t r i n g " form=" q u a l i f i e d " minoccurs="0"/> 12 <x s : e l e m e n t name=" s e x " type=" x s : s t r i n g " minoccurs="0"/> 13 <x s : e l e m e n t name=" kor " type=" x s : i n t "/> 14 <xs: element name=" suly " type=" xs: double "/> 15 </ x s : s e q u e n c e> 16 </ xs:complextype> <xs:complextype name=" address "> 19 <x s : s e q u e n c e> 20 <x s : e l e m e n t name=" s t r e e t " type=" x s : s t r i n g " minoccurs="0"/> 21 <xs: element name="housenumber " type=" x s : i n t "/> 22 </ x s : s e q u e n c e> 23 </ xs:complextype> 24 </ x s :schema> 6
7 JAXB - A Java és XML összekötése Ránézésre tetszetős, az XSD típusok szépen leképződtek a megfelelő Java típusokról. A szerkezete is megfelelő. A 11. sor form="qualified" jelzése azt jelenti, hogy ez a tag a targetnamespace-ben (org.ceg.test) van. Az address complextype a várt módon, külön nevesítve megtalálható és a 10. sorban korrekt módon került használatra. Java osztályok generálása XML sémából A gyakorlatban az is sokszor előfordul, hogy az XSD már rendelkezésünkre áll. Nagyon sok munkát jelentene a megfelelő befogadó Java osztály létrehozása és -ok elhelyezése, de szerencsére a JAXB erre is tartalmaz egy JDK parancsot, aminek a neve xjc. A sémák általában valamilyen szabvány részeként állnak rendelkezésünkre, például: UBL (Universal Business Language), ebxml, OFX (Open Financial Exchange), de az is lehet, hogy a rendszerek közötti kommunikáció egy sémával, platformfüggetlen módon volt csak definiálható, ami nagy előny. Az Employee class alapján generált séma felhasználásával generáljuk le a Java osztályokat, azaz tegyünk úgy mintha azok még nem léteznének: x j c Employee. xsd Az eredményt az 1-9., és Programlisták tartalmazzák. 1 // 1 9. Programlista : Az x j c á l t a l g e n e r á l t Address o s z t á l y 2 3 // 4 // This f i l e was g e n e r a ted by t h e JavaTM A r c h i t e c t u r e f o r XML Binding (JAXB) Reference Implementation, v // See <a h r e f="h t t p :// j a v a. sun. com/xml/ j a x b">h t t p :// j a v a. sun. com/xml/ jaxb </a> 6 // Any m o d i f i c a t i o n s to t h i s f i l e w i l l be l o s t upon r e c o m p i l a t i o n o f t h e source schema. 7 // Generated on : at 0 6 : 4 9 : 0 4 PM GMT 8 // 9 package t e s t. ceg. org ; import javax. xml. bind. annotation. XmlAccessType ; 12 import javax. xml. bind. annotation. XmlAccessorType ; 13 import javax. xml. bind. annotation. XmlType ; / 16 <p>java c l a s s f o r address complex t y p e <p>the f o l l o w i n g schema fragment s p e c i f i e s t h e e x p e c t e d c o n t e n t contained 19 w i t h i n t h i s c l a s s <pre> 22 & l t ; complextype name="address"> 23 & l t ; complexcontent> 24 &l t ; r e s t r i c t i o n base=" h t t p ://www. w3. org /2001/XMLSchemaanyType"> 25 &l t ; sequence> 26 &l t ; element name=" s t r e e t " t y p e =" h t t p ://www. w3. org /2001/XMLSchema s t r i n g " minoccurs ="0"/> 27 &l t ; element name="housenumber" t y p e=" h t t p ://www. w3. org /2001/XMLSchema i n t "/> 28 &l t ; / sequence> 29 &l t ; / r e s t r i c t i o n > 30 &l t ; / complexcontent> 31 &l t ; / complextype> 32 </pre> / ( XmlAccessType. FIELD) name = " a d d r e s s ", proporder = 38 7
8 JAXB - A Java és XML összekötése 39 " s t r e e t ", 40 " housenumber" 41 ) 42 public class Address protected S t r i n g s t r e e t ; 46 protected int housenumber ; / 49 Gets t h e v a l u e o f t h e s t r e e t p r o p e r t y. 50 p o s s i b l e o b j e c t i S t r i n g / 54 public S t r i n g g e t S t r e e t ( ) return s t r e e t ; / 60 S e t s t h e v a l u e o f t h e s t r e e t p r o p e r t y. 61 v a l u e a l l o w e d o b j e c t i S t r i n g / 65 public void s e t S t r e e t ( S t r i n g value ) this. s t r e e t = value ; / 71 Gets t h e v a l u e o f t h e housenumber p r o p e r t y / 74 public int gethousenumber ( ) return housenumber ; / 80 S e t s t h e v a l u e o f t h e housenumber p r o p e r t y / 83 public void sethousenumber ( int value ) this. housenumber = value ; // Programlista : Az x j c á l t a l g e n e r á l t Employee o s z t á l y 2 3 // 4 // This f i l e was g e n e r a ted by t h e JavaTM A r c h i t e c t u r e f o r XML Binding (JAXB) Reference Implementation, v // See <a h r e f="h t t p :// j a v a. sun. com/xml/ j a x b">h t t p :// j a v a. sun. com/xml/ jaxb </a> 6 // Any m o d i f i c a t i o n s to t h i s f i l e w i l l be l o s t upon r e c o m p i l a t i o n o f t h e source schema. 7 // Generated on : at 0 6 : 4 9 : 0 4 PM GMT 8 // 9 package t e s t. ceg. org ; import javax. xml. bind. annotation. XmlAccessType ; 12 import javax. xml. bind. annotation. XmlAccessorType ; 13 import javax. xml. bind. annotation. XmlElement ; 14 import javax. xml. bind. annotation. XmlRootElement ; 8
9 JAXB - A Java és XML összekötése 15 import javax. xml. bind. annotation. XmlType ; / 18 <p>java c l a s s f o r employee complex t y p e <p>the f o l l o w i n g schema fragment s p e c i f i e s t h e e x p e c t e d c o n t e n t contained 21 w i t h i n t h i s c l a s s <pre> 24 & l t ; complextype name="employee"> 25 & l t ; complexcontent> 26 &l t ; r e s t r i c t i o n base=" h t t p ://www. w3. org /2001/XMLSchemaanyType"> 27 &l t ; sequence> 28 &l t ; element name="address " t y p e="org. ceg. t e s t address " minoccurs="0"/> 29 &l t ; element name="name" t y p e=" h t t p ://www. w3. org /2001/XMLSchema s t r i n g " minoccurs="0" form=" q u a l i f i e d "/> 30 &l t ; element name="sex " t y p e=" h t t p ://www. w3. org /2001/XMLSchema s t r i n g " minoccurs ="0"/> 31 &l t ; element name="kor " t y p e=" h t t p ://www. w3. org /2001/XMLSchema i n t "/> 32 &l t ; element name="s u l y " t y p e=" h t t p ://www. w3. org /2001/XMLSchema d o u b l e "/> 33 &l t ; / sequence> 34 &l t ; / r e s t r i c t i o n > 35 &l t ; / complexcontent> 36 &l t ; / complextype> 37 </pre> / ( namespace = " org. ceg. t e s t " ) ( XmlAccessType. FIELD) name = " employee ", proporder = " a d d r e s s ", 46 "name", 47 " sex ", 48 " kor ", 49 " s u l y " 50 ) 51 public class Employee protected Address a d d r e s s ; ( namespace = " org. ceg. t e s t " ) 56 protected S t r i n g name ; 57 protected S t r i n g sex ; 58 protected int kor ; 59 protected double s u l y ; / 62 Gets t h e v a l u e o f t h e address p r o p e r t y. 63 p o s s i b l e o b j e c t i Address / 67 public Address getaddress ( ) return a d d r e s s ; / 73 S e t s t h e v a l u e o f t h e address p r o p e r t y. 74 v a l u e a l l o w e d o b j e c t i Address / 9
10 JAXB - A Java és XML összekötése 78 public void setaddress ( Address value ) this. a d d r e s s = value ; / 84 Gets t h e v a l u e o f t h e name p r o p e r t y. 85 p o s s i b l e o b j e c t i S t r i n g / 89 public S t r i n g getname ( ) return name ; / 95 S e t s t h e v a l u e o f t h e name p r o p e r t y. 96 v a l u e a l l o w e d o b j e c t i S t r i n g / 100 public void setname ( S t r i n g value ) this. name = value ; / 106 Gets t h e v a l u e o f t h e sex p r o p e r t y. 107 p o s s i b l e o b j e c t i S t r i n g / 111 public S t r i n g getsex ( ) return sex ; / 117 S e t s t h e v a l u e o f t h e sex p r o p e r t y. 118 v a l u e a l l o w e d o b j e c t i S t r i n g / 122 public void s e t S e x ( S t r i n g value ) this. sex = value ; / 128 Gets t h e v a l u e o f t h e kor p r o p e r t y / 131 public int getkor ( ) return kor ; / 137 S e t s t h e v a l u e o f t h e kor p r o p e r t y / 140 public void setkor ( int value ) this. kor = value ; 10
11 JAXB - A Java és XML összekötése / 146 Gets t h e v a l u e o f t h e s u l y p r o p e r t y / 149 public double g e t S u l y ( ) return s u l y ; / 155 S e t s t h e v a l u e o f t h e s u l y p r o p e r t y / 158 public void s e t S u l y ( double value ) this. s u l y = value ; // Programlista : Az x j c á l t a l g e n e r á l t ObjectFactory o s z t á l y 2 3 // 4 // This f i l e was g e n e r a ted by t h e JavaTM A r c h i t e c t u r e f o r XML Binding (JAXB) Reference Implementation, v // See <a h r e f="h t t p :// j a v a. sun. com/xml/ j a x b">h t t p :// j a v a. sun. com/xml/ jaxb </a> 6 // Any m o d i f i c a t i o n s to t h i s f i l e w i l l be l o s t upon r e c o m p i l a t i o n o f t h e source schema. 7 // Generated on : at 0 6 : 4 9 : 0 4 PM GMT 8 // package t e s t. ceg. org ; import javax. xml. bind. JAXBElement ; 14 import javax. xml. bind. annotation. XmlElementDecl ; 15 import javax. xml. bind. annotation. XmlRegistry ; 16 import javax. xml. namespace. QName; / 20 This o b j e c t c o n t a i n s f a c t o r y methods f o r each 21 Java c o n t e n t i n t e r f a c e and Java element i n t e r f a c e 22 g e n e rated in t h e t e s t. ceg. org package. 23 <p>an ObjectFactory a l l o w s you to p r o g r a m a t i c a l l y 24 c o n s t r u c t new i n s t a n c e s o f t h e Java r e p r e s e n t a t i o n 25 f o r XML c o n t e n t. The Java r e p r e s e n t a t i o n o f XML 26 c o n t e n t can c o n s i s t o f schema d e r i v e d i n t e r f a c e s 27 and c l a s s e s r e p r e s e n t i n g t h e b i n d i n g o f schema 28 t y p e d e f i n i t i o n s, element d e c l a r a t i o n s and model 29 groups. Factory methods f o r each o f t h e s e are 30 p r o v i d e d in t h i s c l a s s / 34 public class ObjectFactory private f i n a l s t a t i c QName _Employee_QNAME = new QName( " org. ceg. t e s t ", " employee " ) ; / 39 Create a new ObjectFactory t h a t can be used to c r e a t e new i n s t a n c e s o f schema d e r i v e d c l a s s e s f o r package : t e s t. ceg. org / 42 public ObjectFactory ( ) 11
12 JAXB - A Java és XML összekötése / 46 Create an i n s t a n c e o Employee / 49 public Employee createemployee ( ) 50 return new Employee ( ) ; / 54 Create an i n s t a n c e o Address / 57 public Address c r e a t e A d d r e s s ( ) 58 return new Address ( ) ; / 62 Create an i n s t a n c e o <@link > / ( namespace = " org. ceg. t e s t ", name = " employee " ) 66 public JAXBElement<Employee> createemployee ( Employee value ) 67 return new JAXBElement<Employee>(_Employee_QNAME, Employee. class, null, value ) ; Szeretnénk kiemelni, hogy az Employee classhoz mi írtuk oda annotációt, mert az xjc ezt valami miatt nem tette meg. Ettől eltekintve korrekt Java forrás jött létre, gyakorlatilag kézzel is ezt írtuk meg korábban. Az Employee.xml XML fájl beolvasása ezekkel a generált osztályokkal természetesen ugyanúgy működik, ha kipróbáljuk. Az ObjectFactory osztály gyártómetódusokat ad az Employee és Address objektumok előállítására, de ezek csak kényelmi funkciók. Néhány apró változtatás A példa befejezéseként teszünk néhány változtatást az eredeti 2 Java osztályunkon, majd megnézzük, hogy milyen sémát lehet velük generálni. A megváltoztatott 2 bean-t az és Programlisták mutatják. // Programlista : Employee. j a v a package org. c s. t e s t. t t t ; import javax. xml. bind. annotation. XmlElement ; import javax. xml. bind. annotation. XmlRootElement ; import javax. xml. bind. annotation. XmlType ( namespace = " org. ceg. t e s t ", name = " Dolgozo " namespace = " org. ceg. t e s t " ) public class ( name=" cim", namespace = " http : / / org. c s. a d d r e s s " ) Address a d d r e s s ( name=" nev ", namespace = " org. ceg. t e s t " ) S t r i n g name ( name="nem" ) S t r i n g sex int kor double s u l y ; // Programlista : Address. j a v a package org. c s. t e s t. t t t ; import javax. xml. bind. annotation. XmlElement ; 12
13 JAXB - A Java és XML összekötése import javax. xml. bind. annotation. XmlType name=" cim", namespace = " org. ceg. t e s t " ) public class ( name=" utca " ) S t r i n g s t r e e t ; Ahol nem volt magyar az adatmező neve, ott magyar name értékre állítottuk a generált címke nevet. Példa: street utca. Az address mezőt egy minden eddigitől eltérő másik, nevű névtérbe ( name=" hazszam" ) int housenumber ; A változtatások ezek voltak: A schemagen parancs futtatása után most 2 XSD fájl keletkezett, amit az és Programlisták mutatnak. 1 // P r o g r a m l i s t a : schema1. xsd 2 3 <?xml version=" 1. 0 " encoding="utf 8" standalone=" yes "?> 4 <x s:schema version=" 1. 0 " targetnamespace=" org. ceg. t e s t " x m l n s : n s 1=" h t t p : // org. c s. a d d r e s s " x m l n s : t n s=" org. ceg. t e s t " xm 5 6 <xs: import namespace=" http: // org. cs. address " schemalocation=" schema2. xsd "/> 7 8 <xs: element name=" Dolgozo " type=" tns: employee "/> 9 10 <xs:complextype name=" employee "> 11 <x s : s e q u e n c e> 12 <xs: element r e f=" ns1:cim " minoccurs="0"/> 13 <x s : e l e m e n t name=" nev " type=" x s : s t r i n g " form=" q u a l i f i e d " minoccurs="0"/> 14 <x s : e l e m e n t name="nem" type=" x s : s t r i n g " minoccurs="0"/> 15 <x s : e l e m e n t name=" kor " type=" x s : i n t "/> 16 <xs: element name=" suly " type=" xs: double "/> 17 </ x s : s e q u e n c e> 18 </ xs:complextype> <xs:complextype name=" cim "> 21 <x s : s e q u e n c e> 22 <x s : e l e m e n t name=" utca " type=" x s : s t r i n g " minoccurs="0"/> 23 <xs: element name=" hazszam " type=" x s : i n t "/> 24 </ x s : s e q u e n c e> 25 </ xs:complextype> 26 </ x s :schema> 1 // P r o g r a m l i s t a : schema2. xsd 2 3 <?xml version=" 1. 0 " encoding="utf 8" standalone=" yes "?> 4 <xs:schema version=" 1. 0 " targetnamespace=" http: // org. cs. address " xmlns:ns1=" org. ceg. t e s t " xmlns:xs=" http: //www. w3. org 5 6 <x s : i m p o r t namespace=" org. ceg. t e s t " schemalocation=" schema1. xsd "/> 7 8 <xs: element name="cim " type=" ns1:cim "/> 9 </xs:schema > Mit tanulhatunk ebből? Az első, amit észrevehetünk, hogy az XML tag neveket megváltoztattuk, azaz nem automatikusan a Java bean property névből képződnek ott, ahol eredetileg angol mező nevek voltak. A másik lényeges és megjegyzésre érdemes momentum az, hogy a 2 névtér miatt 2 darab XSD keletkezett, amik egymást beimportálják. Ezzel lehetővé vált, hogy mindkét targetnamespace létezzen és a megfelelően adjuk meg a névtérbe tartozó XML sématípust. Az XML sémák fordítása Az előző példában minden alapvető dolgot megtanultunk, ezért a továbbiakban csak a tudásunkat mélyítjük egy kicsit tovább. Az Programlistán látható XML séma egy minden nap használt, produktív megoldás része. A következőkben megnézzük, hogy milyen Java kód gene- 13
14 JAXB - A Java és XML összekötése rálható erre és az egyes típusokhoz milyen Java típusok tartoznak majd. A sémával kapcsolatosan a következőkre hívjuk fel a figyelmet: Van benne 4 darab complextype A targetnamespace: urn:jaxbtest/xsd2java Mindegyik XSD skalár típus megtalálható benne Van olyan, ahol a maxoccurs="unbounded", azaz a címke akárhányszor ismétlődhet. Amikor nem adjuk meg egy sémarészhez a minoccurs és maxoccurs attribútumokat, akkor az elem pontosan 1 alkalommal kell, hogy előforduljon. A minoccurs="0" azt jelenti, hogy 0 darab is lehet 1 XML-ben ebből a tag-ból, míg a maxoccurs="unbounded" pedig azt engedi, hogy akármennyi. Ekkor itt egy Java tömb vagy List várható majd a generálás eredményeként. Ennyi előzmény után futtassuk le a következő xjc parancsot, ami legyártja a Java class-okat: x j c p c s. org. jaxb. t e s t j a x b T e s t. xsd A -p kapcsolóval azt adtuk meg, hogy a forrás milyen Java csomagba kerüljön, így a generált kód az cs/org/jaxb/test könyvtárba került. 1 // P r o g r a m l i s t a : jaxbtest. xsd 2 3 <?xml version=" 1. 0 " encoding="utf 8"?> 4 <x s:schema a t t r i b u t e F o r m D e f a u l t=" u n q u a l i f i e d " elementformdefault=" q u a l i f i e d " targetnamespace=" u r n : j a x b t e s t / xsd2java " xmlns:xs=" http: //www. w3. org /2001/XMLSchema"> 5 <x s : e l e m e n t name=" s e l e c t " type=" s c h : s e l e c t T y p e " x m l n s : s c h=" u r n : j a x b t e s t / x s d 2 j a v a "/> 6 <xs:complextype name=" datatype "> 7 <x s : s e q u e n c e minoccurs="0" maxoccurs="unbounded "> 8 <x s : e l e m e n t type=" sch:rowtype " name="row" x m l n s : s c h=" u r n : j a x b t e s t / x s d 2 j a v a "/> 9 </ x s : s e q u e n c e> 10 </ xs:complextype> 11 <xs:complextype name="rowtype"> 12 <x s : s e q u e n c e> 13 <x s : e l e m e n t type=" x s : s t r i n g " name=" t e s t S t r i n g "/> 14 <x s : e l e m e n t type=" x s : i n t e g e r " name=" t e s t I n t e g e r "/> 15 <x s : e l e m e n t type=" x s : i n t " name=" t e s t I n t "/> 16 <x s : e l e m e n t type=" x s : l o n g " name=" t e s t L o n g "/> 17 <x s : e l e m e n t type=" x s : s h o r t " name=" t e s t S h o r t "/> 18 <xs: element type=" xs: decimal " name=" testdecimal "/> 19 <x s : e l e m e n t type=" x s : f l o a t " name=" t e s t F l o a t "/> 20 <xs: element type=" xs: double " name=" testdouble "/> 21 <xs: element type=" xs: boolean " name=" testboolean "/> 22 <xs: element type=" xs: byte " name=" testbyte "/> 23 <x s : e l e m e n t type="xs:qname" name="testqname"/> 24 <xs: element type=" xs:datetime " name=" testdatetime "/> 25 <xs: element type=" xs: base64binary " name=" testbase64binary "/> 26 <xs: element type=" xs: hexbinary " name=" testhexbinary "/> 27 <xs: element type=" xs: unsignedint " name=" testunsignedint "/> 28 <xs: element type=" xs: unsignedshort " name=" testunsignedshort "/> 29 <xs: element type=" xs: unsignedbyte " name=" testunsignedbyte2 "/> 30 <xs: element type=" xs: time " name=" testtime "/> 31 <xs: element type=" xs: date " name=" testdate "/> 32 <xs: element type=" xs:anysimpletype " name=" testanysimpletype "/> 33 <x s : e l e m e n t type=" x s : d u r a t i o n " name=" t e s t D u r a t i o n "/> 34 </ x s : s e q u e n c e> 35 </ xs:complextype> 36 <xs:complextype name=" controlltype "> 37 <x s : s e q u e n c e> 38 <x s : e l e m e n t type=" x s : s t r i n g " name=" theme "/> 39 <xs: element type=" xs:datetime " name=" timestamp "/> 40 <x s : e l e m e n t type=" x s : s t r i n g " name=" query "/> 41 <x s : e l e m e n t type=" x s : s t r i n g " name=" t a b l e "/> 42 <x s : e l e m e n t type=" x s : s t r i n g " name=" d a t a s o u r c e "/> 43 <x s : e l e m e n t type=" x s : l o n g " name=" rowcnt "/> 44 <x s : e l e m e n t type=" x s : l o n g " name=" r e s u l t s e t i d "/> 45 </ x s : s e q u e n c e> 46 </ xs:complextype> 47 <xs:complextype name=" selecttype "> 48 <x s : s e q u e n c e> 49 <x s : e l e m e n t type=" s c h : c o n t r o l l T y p e " name=" c o n t r o l l " x m l n s : s c h=" u r n : j a x b t e s t / x s d 2 j a v a "/> 50 <x s : e l e m e n t type=" sch:datatype " name=" data " x m l n s : s c h=" u r n : j a x b t e s t / x s d 2 j a v a "/> 51 </ x s : s e q u e n c e> 52 </ xs:complextype> 53 </ x s :schema> 14
15 JAXB - A Java és XML összekötése 1 // Programlista : ControllType. j av a 2 3 // 4 // This f i l e was g e n e r a ted by t h e JavaTM A r c h i t e c t u r e f o r XML Binding (JAXB) Reference Implementation, v // See <a h r e f="h t t p :// j a v a. sun. com/xml/ j a x b">h t t p :// j a v a. sun. com/xml/ jaxb </a> 6 // Any m o d i f i c a t i o n s to t h i s f i l e w i l l be l o s t upon r e c o m p i l a t i o n o f t h e source schema. 7 // Generated on : at 0 2 : 5 9 : 4 5 PM GMT 8 // package c s. org. jaxb. t e s t ; import javax. xml. bind. annotation. XmlAccessType ; 14 import javax. xml. bind. annotation. XmlAccessorType ; 15 import javax. xml. bind. annotation. XmlElement ; 16 import javax. xml. bind. annotation. XmlSchemaType ; 17 import javax. xml. bind. annotation. XmlType ; 18 import javax. xml. datatype. XMLGregorianCalendar ; / 22 <p>java c l a s s f o r c o n t r o l l T y p e complex t y p e <p>the f o l l o w i n g schema fragment s p e c i f i e s t h e e x p e c t e d c o n t e n t contained w i t h i n t h i s c l a s s <pre> 27 &l t ; complextype name="c o n t r o l l T y p e"> 28 & l t ; complexcontent> 29 &l t ; r e s t r i c t i o n base=" h t t p ://www. w3. org /2001/XMLSchemaanyType"> 30 &l t ; sequence> 31 &l t ; element name="theme" t y p e=" h t t p ://www. w3. org /2001/XMLSchema s t r i n g "/> 32 &l t ; element name="timestamp " t y p e=" h t t p ://www. w3. org /2001/XMLSchemadateTime"/> 33 &l t ; element name="query " t y p e=" h t t p ://www. w3. org /2001/XMLSchema s t r i n g "/> 34 &l t ; element name=" t a b l e " t y p e=" h t t p ://www. w3. org /2001/XMLSchema s t r i n g "/> 35 &l t ; element name="d atasource " t y p e =" h t t p ://www. w3. org /2001/XMLSchema s t r i n g "/> 36 &l t ; element name="rowcnt " t y p e=" h t t p ://www. w3. org /2001/XMLSchema l o n g"/> 37 &l t ; element name=" r e s u l t s e t i d " t y p e=" h t t p ://www. w3. org /2001/XMLSchema l o n g"/> 38 &l t ; / sequence> 39 &l t ; / r e s t r i c t i o n > 40 &l t ; / complexcontent> 41 &l t ; / complextype> 42 </pre> / ( XmlAccessType. FIELD) name = " c o n t r o l l T y p e ", proporder = 48 "theme", 49 " timestamp ", 50 " query ", 51 " t a b l e ", 52 " d a t a s o u r c e ", 53 " rowcnt ", 54 " r e s u l t s e t i d " 55 ) 56 public class ControllType 57 ( r e q u i r e d = true ) 59 protected S t r i n g theme ; ( r e q u i r e d = true ) ( name = " datetime " ) 62 protected XMLGregorianCalendar timestamp ; ( r e q u i r e d = true ) 15
16 JAXB - A Java és XML összekötése 64 protected S t r i n g query ; ( r e q u i r e d = true ) 66 protected S t r i n g t a b l e ; ( r e q u i r e d = true ) 68 protected S t r i n g d a t a s o u r c e ; 69 protected long rowcnt ; 70 protected long r e s u l t s e t i d ; s e t t e r é s g e t t e r metódusok 73 / 74 Gets t h e v a l u e o f t h e timestamp p r o p e r t y p o s s i b l e o b j e c t i s link XMLGregorianCalendar / 81 public XMLGregorianCalendar gettimestamp ( ) 82 return timestamp ; / 86 S e t s t h e v a l u e o f t h e timestamp p r o p e r t y. 87 v a l u e 89 a l l o w e d o b j e c t i s link XMLGregorianCalendar / 93 public void settimestamp ( XMLGregorianCalendar value ) 94 this. timestamp = value ; // Programlista : RowType. j a v a 2 3 package c s. org. jaxb. t e s t ; 4 5 import java. math. BigDecimal ; 6 import java. math. B i g I n t e g e r ; 7 import javax. xml. bind. annotation. XmlAccessType ; 8 import javax. xml. bind. annotation. XmlAccessorType ; 9 import javax. xml. bind. annotation. XmlElement ; 10 import javax. xml. bind. annotation. XmlSchemaType ; 11 import javax. xml. bind. annotation. XmlType ; 12 import javax. xml. bind. annotation. a d a p t e r s. HexBinaryAdapter ; 13 import javax. xml. bind. annotation. a d a p t e r s. XmlJavaTypeAdapter ; 14 import javax. xml. datatype. Duration ; 15 import javax. xml. datatype. XMLGregorianCalendar ; 16 import javax. xml. namespace. QName; / 20 <p>java c l a s s f o r rowtype complex t y p e <p>the f o l l o w i n g schema fragment s p e c i f i e s t h e e x p e c t e d c o n t e n t contained w i t h i n t h i s c l a s s <pre> 25 & l t ; complextype name="rowtype"> 26 & l t ; complexcontent> 27 &l t ; r e s t r i c t i o n base=" h t t p ://www. w3. org /2001/XMLSchemaanyType"> 28 &l t ; sequence> 29 &l t ; element name=" t e s t S t r i n g " t y p e=" h t t p ://www. w3. org /2001/XMLSchema s t r i n g "/> 30 &l t ; element name=" t e s t I n t e g e r " t y p e=" h t t p ://www. w3. org /2001/XMLSchema i n t e g e r "/> 31 &l t ; element name=" t e s t I n t " t y p e=" h t t p ://www. w3. org /2001/XMLSchema i n t "/> 16
17 JAXB - A Java és XML összekötése 32 &l t ; element name="t e s t L o n g " t y p e =" h t t p ://www. w3. org /2001/XMLSchema l o n g"/> 33 &l t ; element name=" t e s t S h o r t " t y p e=" h t t p ://www. w3. org /2001/XMLSchema s h o r t "/> 34 &l t ; element name="t e s t D e c i m a l " t y p e=" h t t p ://www. w3. org /2001/XMLSchema decimal"/> 35 &l t ; element name=" t e s t F l o a t " t y p e=" h t t p ://www. w3. org /2001/XMLSchema f l o a t "/> 36 &l t ; element name="t e s t D o u b l e " t y p e=" h t t p ://www. w3. org /2001/XMLSchema d o u b l e "/> 37 &l t ; element name="t e s t B o o l e a n " t y p e=" h t t p ://www. w3. org /2001/XMLSchema boolean"/> 38 &l t ; element name="t e s t B y t e " t y p e=" h t t p ://www. w3. org /2001/XMLSchema b y t e "/> 39 &l t ; element name="testqname" t y p e=" h t t p ://www. w3. org /2001/XMLSchemaQName"/> 40 &l t ; element name="testdatetime " t y p e=" h t t p ://www. w3. org /2001/XMLSchemadateTime"/> 41 &l t ; element name="testbase64binary " t y p e=" h t t p ://www. w3. org /2001/XMLSchema base64binary"/> 42 &l t ; element name="testhexbinary " t y p e=" h t t p ://www. w3. org /2001/XMLSchema hexbinary"/> 43 &l t ; element name="t e s t U n s i g n e d I n t " t y p e=" h t t p ://www. w3. org /2001/XMLSchema u n s i g n e d I n t "/> 44 &l t ; element name="t e s t U n s i g n e d S h o r t " t y p e=" h t t p ://www. w3. org /2001/XMLSchema unsignedshort"/> 45 &l t ; element name="testunsignedbyte2 " t y p e=" h t t p ://www. w3. org /2001/XMLSchema unsignedbyte"/> 46 &l t ; element name="testtime " t y p e=" h t t p ://www. w3. org /2001/XMLSchema time"/> 47 &l t ; element name="t e s t D a t e " t y p e=" h t t p ://www. w3. org /2001/XMLSchema date"/> 48 &l t ; element name="testanysimpletype " t y p e=" h t t p ://www. w3. org /2001/XMLSchema anysimpletype"/> 49 &l t ; element name="t e s t D u r a t i o n " t y p e=" h t t p ://www. w3. org /2001/XMLSchema d u r a t i o n"/> 50 &l t ; / sequence> 51 &l t ; / r e s t r i c t i o n > 52 &l t ; / complexcontent> 53 &l t ; / complextype> 54 </pre> / ( XmlAccessType. FIELD) name = "rowtype", proporder = 60 " t e s t S t r i n g ", 61 " t e s t I n t e g e r ", 62 " t e s t I n t ", 63 " testlong ", 64 " t e s t S h o r t ", 65 " t e s t D e c i m a l ", 66 " t e s t F l o a t ", 67 " testdouble ", 68 " t e s t B o o l e a n ", 69 " t e s t B y t e ", 70 "testqname", 71 " testdatetime ", 72 " testbase64binary ", 73 " testhexbinary ", 74 " t e s t U n s i g n e d I n t ", 75 " t e s t U n s i g n e d S h o r t ", 76 " testunsignedbyte2 ", 77 " testtime ", 78 " t e s t D a t e ", 79 " testanysimpletype ", 80 " t e s t D u r a t i o n " 81 ) 82 public class RowType 83 ( r e q u i r e d = true ) 85 protected S t r i n g t e s t S t r i n g ; ( r e q u i r e d = true ) 87 protected B i g I n t e g e r t e s t I n t e g e r ; 88 protected int t e s t I n t ; 89 protected long testlong ; 90 protected short t e s t S h o r t ; ( r e q u i r e d = true ) 17
18 JAXB - A Java és XML összekötése 92 protected BigDecimal t e s t D e c i m a l ; 93 protected f l o a t t e s t F l o a t ; 94 protected double testdouble ; 95 protected boolean t e s t B o o l e a n ; 96 protected byte t e s t B y t e ; ( r e q u i r e d = true ) 98 protected QName testqname ; ( r e q u i r e d = true ) ( name = " datetime " ) 101 protected XMLGregorianCalendar testdatetime ; ( r e q u i r e d = true ) 103 protected byte [ ] testbase64binary ; ( r e q u i r e d = true, type = S t r i n g. class ) ( HexBinaryAdapter. class ) ( name = " hexbinary " ) 107 protected byte [ ] testhexbinary ; ( name = " u n s i g n e d I n t " ) 109 protected long t e s t U n s i g n e d I n t ; ( name = " unsignedshort " ) 111 protected int t e s t U n s i g n e d S h o r t ; ( name = " unsignedbyte " ) 113 protected short testunsignedbyte2 ; ( r e q u i r e d = true ) ( name = " time " ) 116 protected XMLGregorianCalendar testtime ; ( r e q u i r e d = true ) ( name = " date " ) 119 protected XMLGregorianCalendar t e s t D a t e ; ( r e q u i r e d = true ) ( name = " anysimpletype " ) 122 protected Object testanysimpletype ; ( r e q u i r e d = true ) 124 protected Duration t e s t D u r a t i o n ; s e t t e r é s g e t t e r metódusok A létrehozott Java osztályok közül most csak a ControllType és RowType egy-egy részlete került be a fenti programlistákba.a további generált Java forrásfájlok ezek: DataType.java a datatype complextype részére SelectType.java a selecttype complextype részére ObjectFactory kényelmi osztály Figyeljük meg a RowType tanulmányozásával, hogy az egyes XML séma típusok milyen Java típusokra képződtek le. required = true attribútuma azt jelenti, hogy ez a mező kötelezően megjelenő az XML, ami azért van, mert itt nem adtuk meg a minoccurs és maxoccurs paramétereket, tehát az előfordulás értéke 1. További érdekesség, hogy annotációnál létrejött a propordert is, ami felsorolásként tartalmazza azt a tag sorrendet, amit az érvényes XML-nek prezentálnia kell. Ez nem véletlen, hiszen ez az XSD xs:sequence részénél felsorolt elemeket jelenti. Dinamikus XML feldolgozás Gyakori feladat, hogy különféle XML szövegek érkeznek, amiket a típusuktól függően kell feldolgoznunk. Kommunikációs, integrációs környezetekben például egy sorba (Queue) érkezhetnek ezek az XML üzenetek, amiket más-más módon kell kezelnünk. Ebben a pontban azt mutatjuk 18
19 JAXB - A Java és XML összekötése meg, hogy az ilyen típusú feladatokat milyen módon tudjuk kezelni JAXB környezetben. Példaként tekintsük az és Programlistákat, amikhez tartozó XSD-ket is láthatjuk (1-20. és S t r i n g t i t l e int pages ; // Programlista : C l a s s F i r s t. j a v a package org. c s. jaxb. t e s t ; import javax. xml. bind. annotation. XmlElement ; import javax. xml. bind. annotation. XmlRootElement ; import javax. xml. bind. annotation. XmlType ( namespace = " org. c s. jaxb. t e s t " namespace = " org. c s. jaxb. t e s t " ) public class C l a s s F i r s S t r i n g name int value ; // P r o g r a m l i s t a : C l a s s F i r s t. xsd <?xml version=" 1. 0 " encoding="utf 8" standalone=" yes "?> <xs: schema version=" 1. 0 " targetnamespace=" org. c s. jaxb. t e s t " x m l n s : t n s=" org. c s. jaxb. t e s t " xmlns:xs=" h t t p : //www. w3. org / <x s : e l e m e n t name=" c l a s s F i r s t " type=" t n s : c l a s s F i r s t "/> <xs:complextype name=" c l a s s F i r s t "> <x s : s e q u e n c e > <x s : e l e m e n t name="name" type=" x s : s t r i n g " minoccurs=" 0"/> <x s : e l e m e n t name=" value " type=" x s : i n t "/> </x s : s e q u e n c e > </xs:complextype> </xs:schema> // Programlista : ClassSecond. j a v a package org. c s. jaxb. t e s t ; import javax. xml. bind. annotation. XmlElement ; import javax. xml. bind. annotation. XmlRootElement ; import javax. xml. bind. annotation. XmlType ( namespace = " org. c s. jaxb. t e s t " namespace = " org. c s. jaxb. t e s t " ) public class S t r i n g d e s c r i p t i o n ; // P r o g r a m l i s t a : ClassSecond. xsd <?xml version=" 1. 0 " encoding="utf 8" standalone=" yes "?> <xs: schema version=" 1. 0 " targetnamespace=" org. c s. jaxb. t e s t " x m l n s : t n s=" org. c s. jaxb. t e s t " xmlns:xs=" h t t p : //www. w3. org / <x s : e l e m e n t name=" c l a s s S e c o n d " type=" t n s : c l a s s S e c o n d "/> <xs:complextype name=" c l a s s S e c o n d "> <x s : s e q u e n c e > <x s : e l e m e n t name=" d e s c r i p t i o n " type=" x s : s t r i n g " minoccurs="0"/> <x s : e l e m e n t name=" t i t l e " type=" x s : s t r i n g " minoccurs=" 0"/> <x s : e l e m e n t name=" pages " type=" x s : i n t "/> </x s : s e q u e n c e > </xs:complextype> </xs:schema> A GenXML osztály (1-23. Programlista) segítségével legyártottuk a ClassFirst.xml és ClassSecond.xml XML fájlokat, ezek lesznek a minta üzenetek, amiket különféle módon kell feldolgozni. A sorok között létrehozzunk egyegy ClassFirst és ClassSecond objektumot. A 27. sor nagyon fontos, mert ez egy olyan Class[] tömböt hoz létre, ami azokat az osztályokat sorolja fel, amiket majd a JAXB kontextusban kezelni, ismerni akarunk. A 29. sor ennek megfelelően hoz létre egy JAXBContext objektumot, amitől a következő sorban egy Marshaller objektumot igénylünk. A sorokban mindkét előzetesen létrehozott objektumunkat XML fájlba perzisztáljuk. Most, hogy van 2 különböző XML üzenetünk, elérkeztünk oda, hogy be tudjuk mutatni az azok egyedi kezelését megvalósító XMLProcessor osztályt (1-24. Programlista). Nézzük meg röviden a működését! A sorok jelentése már bizonyára mindenkinek világos, ezért a 25. sorban lévő unmarshal() metódushívásra hívnánk fel először a figyelmet, ahol a beolvasott XML egy általános Object sta- 19
20 JAXB - A Java és XML összekötése tikus típusú objektumba kerül. A trükk igazából csak ennyi, mert utána az egyes elágazásokban az instanceof utasításra épülő döntés már segít a konkrét esetek szétválasztásában és feldolgozásában. 1 // Programlista : GenXML. j a v a 2 3 package org. c s. jaxb. t e s t ; 4 5 import java. i o. F i l e ; 6 import javax. xml. bind. JAXBContext ; 7 import javax. xml. bind. JAXBException ; 8 import javax. xml. bind. M a r s h a l l e r ; 9 import t e s t. ceg. org. Employee ; public class GenXML public s t a t i c void main ( S t r i n g [ ] a r g s ) throws JAXBException C l a s s F i r s t c f = new C l a s s F i r s t ( ) ; 16 c f. name = " N y i r i Imre " ; 17 c f. value = 5 ; ClassSecond c s = new ClassSecond ( ) ; 20 c s. d e s c r i p t i o n = "Ez egy j ó l e c k e v o l t. " ; 21 c s. pages = ; 22 c s. t i t l e = " I n f o r m a t i k a i Navigátor " ; F i l e x m l f i l e 1 = new F i l e ( "/home/ t a n u l a s /xml/ C l a s s F i r s t. xml" ) ; 25 F i l e x m l f i l e 2 = new F i l e ( "/home/ t a n u l a s /xml/ ClassSecond. xml" ) ; C l a s s [ ] c l a s s e s = new C l a s s [ ] C l a s s F i r s t. class, ClassSecond. class ; JAXBContext jaxbcontext = JAXBContext. newinstance ( c l a s s e s ) ; 30 M a r s h a l l e r j a x b M a r s h a l l e r = jaxbcontext. c r e a t e M a r s h a l l e r ( ) ; 31 j a x b M a r s h a l l e r. s e t P r o p e r t y ( M a r s h a l l e r.jaxb_formatted_output, Boolean.TRUE) ; 32 j a x b M a r s h a l l e r. marshal ( cf, x m l f i l e 1 ) ; 33 j a x b M a r s h a l l e r. marshal ( cs, x m l f i l e 2 ) ; // Programlista : XMLProcessor. j av a 2 3 package org. c s. jaxb. t e s t ; 4 5 import java. i o. F i l e ; 6 import javax. xml. bind. JAXBContext ; 7 import javax. xml. bind. JAXBException ; 8 import javax. xml. bind. Unmarshaller ; 9 10 public class XMLProcessor public s t a t i c void main ( S t r i n g [ ] a r g s ) throws JAXBException C l a s s [ ] c l a s s e s = new C l a s s [ ] org. c s. jaxb. t e s t. C l a s s F i r s t. class, 17 org. c s. jaxb. t e s t. ClassSecond. class 18 ; JAXBContext jaxbcontext = JAXBContext. newinstance ( c l a s s e s ) ; 21 Unmarshaller jaxbunmarshaller = jaxbcontext. c r e a t e U n m a r s h a l l e r ( ) ; F i l e x m l f i l e = new F i l e ( "/home/ t a n u l a s /xml/ ClassSecond. xml" ) ; 20
21 JAXB - A Java és XML összekötése Object xmlobject = jaxbunmarshaller. unmarshal ( x m l f i l e ) ; i f ( xmlobject instanceof C l a s s F i r s t ) C l a s s F i r s t c f = ( C l a s s F i r s t ) xmlobject ; 30 System. out. p r i n t l n ( c f. name ) ; 31 System. out. p r i n t l n ( c f. value ) ; else i f ( xmlobject instanceof ClassSecond ) ClassSecond c f = ( ClassSecond ) xmlobject ; 36 System. out. p r i n t l n ( c f. d e s c r i p t i o n ) ; 37 System. out. p r i n t l n ( c f. pages ) ; 38 System. out. p r i n t l n ( c f. t i t l e ) ; else System. out. p r i n t l n ( " I s m e r e t l e n XML! " ) ; Érdekes XML séma lehetőségek Ebben a pontban az Programlista sémáját néhány helyen megváltoztatjuk és tanulmányozzuk, hogy mindez milyen hatással van a generált Java osztályokra. Ez a módszer azért lesz tanulságos, mert azután mi is tudunk így annotált class-okat készíteni, azaz sokat tanulhatunk a -okról. Ismétlődések és XML tag számosságok Eddig nem mutattuk meg, hogy milyen lett a generált DataType class, pedig lehet belőle tanulni, emiatt nézzük is meg! Amit meg kell figyelnünk, az a protected List<RowType> row sor (45. sor), ugyanis a row tag 0 vagy több ismétlődéssel lehet a séma szerint, amit ez a konstrukció jól leképez. 1 // Programlista : DataType. j a v a 2 3 // 4 // This f i l e was g e n e r a ted by t h e JavaTM A r c h i t e c t u r e f o r XML Binding (JAXB) Reference Implementation, v // See <a h r e f="h t t p :// j a v a. sun. com/xml/ j a x b">h t t p :// j a v a. sun. com/xml/ jaxb </a> 6 // Any m o d i f i c a t i o n s to t h i s f i l e w i l l be l o s t upon r e c o m p i l a t i o n o f t h e source schema. 7 // Generated on : at 0 4 : 2 2 : 1 6 PM GMT 8 // package c s. org. jaxb. t e s t ; import java. u t i l. ArrayList ; 14 import java. u t i l. L i s t ; 15 import javax. xml. bind. annotation. XmlAccessType ; 16 import javax. xml. bind. annotation. XmlAccessorType ; 17 import javax. xml. bind. annotation. XmlType ; / 21 <p>java c l a s s f o r datatype complex t y p e <p>the f o l l o w i n g schema fragment s p e c i f i e s t h e e x p e c t e d c o n t e n t contained w i t h i n t h i s c l a s s <pre> 21
Programozási nyelvek Java
Programozási nyelvek Java Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 13. előadás Throwable Error Exception RuntimeException IOException Saját (általában) Nem ellenörzött kivételek (Unchecked
RészletesebbenProgramozás III CSOMAGOK. Az összetartozó osztályok és interfészek egy csomagba (package) kerülnek.
Programozás III CSOMAGOK Az összetartozó osztályok és interfészek egy csomagba (package) kerülnek. A Java is csomagok halmaza: csomagokban van a fejlesztő környezet és az osztálykönyvtárak is: rt.jar fájl
RészletesebbenJava. Perzisztencia. ANTAL Margit. Java Persistence API. Object Relational Mapping. Perzisztencia. Entity components. ANTAL Margit.
Sapientia - EMTE 2008 Az előadás célja JPA - - perzisztencia ORM - - Objektumrelációs leképzés - Entitásbabok Állandóság Mechanizmus amely során az alkalmazás adatai megőrzésre kerülnek valamely perzisztens
RészletesebbenJava VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás: 2006. 03. 07.
Java VI. Öröklődés Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 03. 07. Java VI.: Öröklődés JAVA6 / 1 Egy kis kitérő: az UML UML: Unified Modelling Language Grafikus eszköz objektum
RészletesebbenJava programozási nyelv 6. rész Java a gyakorlatban
Java programozási nyelv 6. rész Java a gyakorlatban Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2004. október A Java programozási nyelv Soós Sándor 1/16 Tartalomjegyzék
Részletesebben2011.11.29. JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése
Tartalom Integrált fejlesztés Java platformon JUnit JUnit használata Tesztelési technikák Demo 2 A specifikáció alapján teszteljük a program egyes részeit, klasszikus V-modell szerint Minden olyan metódust,
RészletesebbenJava Server Pages - JSP. Web Technológiák. Java Server Pages - JSP. JSP lapok életciklusa
Web Technológiák Java Server Pages - JSP Répási Tibor egyetemi tanársegéd Miskolc Egyetem Infomatikai és Villamosmérnöki Tanszékcsoport (IVM) Általános Informatikai Tanszék Iroda: Inf.Int. 108. Tel: 2101
RészletesebbenProgramozási nyelvek Java
Programozási nyelvek Java 2. gyakorlat Függvények Általános prototípus Módosítószavak Láthatóság: public, protected, private. Ha nem definiált, akkor úgynevezett package-private láthatóság. Lehet abstract
RészletesebbenJava bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o
Miért Java? széleskörben elterjedt Micro Edition - beágyazott rendszerek, régi telefonok Standard Edition - PC, android ezen alapul Enterprise Edition - vállalati programok, web service-ek multiplatform
RészletesebbenProgramozási nyelvek II. JAVA EA+GY 1. gyakolat
Programozási nyelvek II. JAVA EA+GY 1. gyakolat EÖTVÖS LORÁND TUDOMÁNYEGYTEM INFORMATIKAI KAR PROGRAMOZÁSI NYELVEK ÉS FORDÍTÓPROGRAMOK TANSZÉK 2017/2018. őszi félév Tartalom 1 Amit tudni kell a félévről
Részletesebben117. AA Megoldó Alfréd AA 117.
Programozás alapjai 2. (inf.) pót-pótzárthelyi 2011.05.26. gyak. hiányzás: kzhpont: MEG123 IB.028/117. NZH:0 PZH:n Minden beadandó megoldását a feladatlapra, a feladat után írja! A megoldások során feltételezheti,
RészletesebbenSzerializáció. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Szerializáció / 22
Szerializáció Tóth Zsolt Miskolci Egyetem 2014 Tóth Zsolt (Miskolci Egyetem) Szerializáció 2014 1 / 22 Tartalomjegyzék 1 Szerializációs Alapfogalmak 2 Szerializációs Megoldások Object Szerializáció XML
RészletesebbenOBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek
OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN vizsgatételek 1. Az objektumorientált programozás szemlélete, az objektum fogalma 2. Az objektumorientált programozás alapelvei 3. A Java nyelv története, alapvető
RészletesebbenProgramozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia
Öröklés ism. Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia Szeberényi Imre BME IIT Egy osztályból olyan újabb osztályokat származtatunk, amelyek rendelkeznek
RészletesebbenBevezető. Servlet alapgondolatok
A Java servlet technológia Fabók Zsolt Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem Utolsó módosítás: 2008. 03. 06. Servlet Bevezető Igény a dinamikus WEB tartalmakra Előzmény: CGI Sokáig
RészletesebbenC#, OOP. Osztályok tervezése C#-ban
C#, OOP Osztályok tervezése C#-ban OOP Létrehozás (creating) Megszüntetés (destroying) Túlterhelés (overlading) Felsorolás típus (enumerated types) 2 Hajó osztály Sailboat class using System; class Sailboat
RészletesebbenProgramozási nyelvek JAVA EA+GY 1. gyakolat
Programozási nyelvek JAVA EA+GY 1. gyakolat EÖTVÖS LORÁND TUDOMÁNYEGYTEM INFORMATIKAI KAR PROGRAMOZÁSI NYELVEK ÉS FORDÍTÓPROGRAMOK TANSZÉK 2018/2019. tavaszi félév Tartalom 1 A Java alapjai 2 Java program
RészletesebbenC# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem
C# nyelv alapjai Krizsán Zoltán 1 Általános Informatikai Tanszék Miskolci Egyetem Objektumorientált programozás C# alapokon tananyag Tartalom Bevezetés Lokális változó Utasítások Szójáték Why do all real
RészletesebbenProgramozási nyelvek Java
statikus programszerkezet Programozási nyelvek Java Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 2. előadás csomag könyvtárak könyvtárak forrásfájlok bájtkódok (.java) (.class) primitív osztály
RészletesebbenJNDI - alapok. Java Naming and Directory Interface
JNDI - alapok Java Naming and Directory Interface Naming Service Naming service: nevek hozzárendelése objektumokhoz, elérési lehetőség (objektumok/szolgáltatások lokalizálása), információk központosított
RészletesebbenProgramozási nyelvek Java
Programozási nyelvek Java Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 9. előadás Interface - típust vezet be, de osztálypéldány nem készíthető belőle (statikus típust ad) - több osztály is
RészletesebbenJava-ról Kotlinra. Ekler Péter AutSoft BME AUT. AutSoft
Java-ról Kotlinra Ekler Péter peter.ekler@aut.bme.hu BME AUT Tartalom Java és Kotlin kapcsolata Hogyan próbálhatjuk ki? Kotlin kultúra kialakítása cégen belül Milyen a Kotlin a Java-hoz képest? Történet
RészletesebbenTartalom DCOM. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés
Tartalom D Szoftvertechnológia elıadás Architektúra D vs CORBA Példá 2 1987 Dynamic Data Exchange (DDE) Windows 2.0-ban Windows alkalmazások közötti adatcsere Ma is használatos (pl. vágólap) NetDDE NetBIOS
RészletesebbenXML sémanyelvek Jeszenszky, Péter
XML sémanyelvek Jeszenszky, Péter XML sémanyelvek Jeszenszky, Péter Publication date 2010 Szerzői jog 2010 Jeszenszky Péter A tananyag a TÁMOP-4.1.2-08/1/A-2009-0046 számú Kelet-magyarországi Informatika
RészletesebbenOsztályok. 4. gyakorlat
Osztályok 4. gyakorlat Az osztály fogalma Az objektumok formai leírása, melyek azonos tulajdonsággal és operációkkal rendelkeznek. Osztályból objektum készítését példányosításnak nevezzük. Minden objektum
RészletesebbenSzervlet-JSP együttműködés
Java programozási nyelv 2007-2008/ősz 10. óra Szervlet-JSP együttműködés Kérés továbbítás technikái legradi.gabor@nik.bmf.hu szenasi.sandor@nik.bmf.hu Szervlet-JSP együttműködés Témakörök Osztálykönyvtár
RészletesebbenSegédanyag: Java alkalmazások gyakorlat
Segédanyag: Java alkalmazások gyakorlat Készítette: Szabó Attila 2009/2010-2 félév, 2. gyakorlat 1 Osztályok és objektumok default, public, protected, private láthatóság a metódusokra és adattagokra (első
RészletesebbenOOP: Java 8.Gy: Abstract osztályok, interfészek
OOP: Java 8.Gy: Abstract osztályok, interfészek 26/1 B ITv: MAN 2019.04.03 Abszrakt metódus és absztrakt osztály. Gyakran előfordul a tervezés során, hogy egy osztály szintjén tudjuk, hogy valamilyen metódus
RészletesebbenMetamodellezés. Simon Balázs BME IIT, 2011.
Metamodellezés Simon Balázs BME IIT, 2011. Bevezetés Metamodellezés EMF & ecore Tartalom (C) Simon Balázs, BME IIT, 2011. 2 Hétfő: Simon Balázs Bevezetés hetente felváltva: előadás és gyakorlat metamodellezés
RészletesebbenObjektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN
Objektum Orientált Programozás 11. Kivételkezelés 44/1B IT MAN B IT v: 2016.05.03 MAN Pici elmélet A Java kivételkezelésének célja a programfutás során keletkezett hibák kiszűrése és megfelelő kezelése.
RészletesebbenSzámítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás
Számítástechnika II. BMEKOKAA153 5. Előadás Dr. Bécsi Tamás Kivételkezelés try Azon utasítások kerülnek ide, melyek hibát okozhatnak, kivételkezelést igényelnek catch( típus [név]) Adott kivételtípus esetén
Részletesebben3. SZÁMÚ MELLÉKLET. Elektronikus számla - XML definíciók. a) Számla. 1. ábra Számla
3. SZÁMÚ MELLÉKLET Elektronikus számla - XML definíciók a) Számla 1. ábra Számla 2. ábra Számla fejléce 3. ábra Számlatételek 4. ábra Számla összesítése DTD definíció
RészletesebbenSQLServer. DB Recovery modes
SQLServer 13. téma Szöveges állományok kezelése XML DB Recovery modes A DML műveletek hatékonyságának fontos eleme a naplózás módozata: - FULL Recovery mode: minden elemi művelet naplózódik költséges,
Részletesebben1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?
1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben? 3. Ismertesse a névtér fogalmát! 4. Mit értünk a "változó hatóköre"
RészletesebbenModellinformációk szabványos cseréje. Papp Ágnes, Debreceni Egyetem EFK
Modellinformációk szabványos cseréje Papp Ágnes, agi@delfin.unideb.hu Debreceni Egyetem EFK Tartalom MOF, UML, XMI Az UML és az XML séma MDA - Model Driven Architecture Networkshop 2004 2 Az OMG metamodell
RészletesebbenA Java EE 5 plattform
A Java EE 5 platform Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem Utolsó módosítás: 2007. 11. 13. A Java EE 5 platform A Java EE 5 plattform A J2EE 1.4 után következő verzió. Alapvető továbbfejlesztési
RészletesebbenSzoftvertechnológia alapjai Java előadások
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz e-mail: fandrew@mit.bme.hu tárgy honlap: http://home.mit.bme.hu/~fandrew/szofttech_hu.html A mai előadás tartalma: Miért pont Java?
RészletesebbenÁltalános nyomtatványok xml szerkezete. (v1.3)
Általános nyomtatványok xml szerkezete (v1.3) BEVEZETŐ... 3 1.1 FOGALOMMAGYARÁZAT... 3 2 A NYOMTATVÁNYOK XML FORMÁTUMA... 4 2.1 AZ XML MODELL... 4 2.2 A NYOMTATVÁNYOK XML FELÉPÍTÉSE... 4 2.2.1 Megkötések...
RészletesebbenGenerikus Típusok, Kollekciók
Generikus Típusok, Kollekciók Tóth Zsolt Miskolci Egyetem 2013 Tóth Zsolt (Miskolci Egyetem) Generikus Típusok, Kollekciók 2013 1 / 26 Tartalomjegyzék 1 Enumeráció 2 Generikus Típusok 3 Kollekciók System.Collections
Részletesebben3. SZÁMÚ MELLÉKLET. Elektronikus számla - XML definíciók. a) Számla. 1. ábra Számla
3. SZÁMÚ MELLÉKLET Elektronikus számla - XML definíciók a) Számla 1. ábra Számla 1 2. ábra Számla fejléce eladó és vevő tekintetében 2 3. ábra Számla fejléce képviselő és számlainformáció tekintetében
RészletesebbenProgramozási alapismeretek 4.
Programozási alapismeretek 4. Obejktum-Orientált Programozás Kis Balázs Bevezetés I. Az OO programozási szemlélet, egy merőben más szemlélet, az összes előző szemlélettel (strukturális, moduláris, stb.)
RészletesebbenGépi tanulás a Rapidminer programmal. Stubendek Attila
Gépi tanulás a Rapidminer programmal Stubendek Attila Rapidminer letöltése Google: download rapidminer Rendszer kiválasztása (iskolai gépeken Other Systems java) Kicsomagolás lib/rapidminer.jar elindítása
RészletesebbenXmlGessünk 13. rész - Az XML Schema II.
XmlGessünk 13. rész - Az XML Schema II. Az elz részben láthattuk, hogyan kell közvetlen egymásba ágyazással, referenciákkal és típusok definiálásával egyszerbb sémákat szerkeszteni. Részletesen megnéztük
RészletesebbenSe S r e ial a iza z t a ion o n (in n Ja J v a a v ) a Szerializáció
Serialization (in Java) Szerializáció Java Serialization API Standard eljárás az objektumok állapotának adatfolyamba történő kiírására (elmentésére egy bájtszekvenciába), és visszatöltésére Perzisztencia
RészletesebbenJavadoc. Dokumentációs megjegyzés (2) Dokumentációs megjegyzés (1) Dokumentációs megjegyzés felépítése
Javadoc Dokumentációs megjegyzés (2) Jeszenszky Péter Debreceni Egyetem, Informatikai Kar jeszenszky.peter@inf.unideb.hu Verzió: 2015.0 Utolsó módosítás: 2015. április 21. Tartalmazhatja a forráskódban
RészletesebbenPelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;
Java osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés. ( Előfeltétel 12. Tétel ) Az osztály egy olyan típus leíró struktúra, amely
RészletesebbenAdatbázis-kezelés ODBC driverrel
ADATBÁZIS-KEZELÉS ODBC DRIVERREL... 1 ODBC: OPEN DATABASE CONNECTIVITY (NYÍLT ADATBÁZIS KAPCSOLÁS)... 1 AZ ODBC FELÉPÍTÉSE... 2 ADATBÁZIS REGISZTRÁCIÓ... 2 PROJEKT LÉTREHOZÁSA... 3 A GENERÁLT PROJEKT FELÉPÍTÉSE...
RészletesebbenC# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18
C# Nyelvi Elemei Tóth Zsolt Miskolci Egyetem 2013 Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei 2013 1 / 18 Tartalomjegyzék 1 Object 2 Típusok 3 String 4 RegEx Tóth Zsolt (Miskolci Egyetem) C# Nyelvi
RészletesebbenXML adatkezelés. 5. témakör. Nincs explicit névtér kijelölve. <?xml version="1.0"?> <xs:schema xmlns:xs="
XML adatkezelés 5. témakör Az XMLSchema speciális elemei ME GEIAL dr Kovács Lászl szló Nincs explicit névtér kijelölve > séma
RészletesebbenSegédanyag: Java alkalmazások gyakorlat
Segédanyag: Java alkalmazások gyakorlat Készítette: Szabó Attila 2010/2011-2 félév, 11. gyakorlat (az előző 2 gyak közül az egyiken ZH volt, a másik szünet miatt elmaradt) 1 JAR fájl készítés A JAR (Java
RészletesebbenWebes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)
Eötvös Loránd Tudományegyetem Informatikai Kar Webes alkalmazások fejlesztése 8. előadás (ASP.NET WebAPI) 2016 Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto A webszolgáltatás
RészletesebbenC# osztályok. Krizsán Zoltán
C# osztályok Krizsán Zoltán Fogalma Önálló hatáskőrrel rendelkező, absztrakt adattípus, amely több, különböző elemet tartalmazhat. Minden esetben a heap-en jön létre! A programozó hozza létre, de a GC
RészletesebbenProgramozás II. 2. gyakorlat Áttérés C-ről C++-ra
Programozás II. 2. gyakorlat Áttérés C-ről C++-ra Tartalom Új kommentelési lehetőség Változók deklarációjának helye Alapértelmezett függvényparaméterek Névterek I/O műveletek egyszerűsödése Logikai adattípus,
RészletesebbenJava Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor
Java Programozás 4. Gy: Java GUI Tipper, MVC kalkulátor 15/1 B ITv: MAN 2018.03.10 1. Feladat: Tipper Készítsük el a tippelős programunk grafikus változatát. Az üzleti logika kódja megvan, a felület pedig
RészletesebbenBME MOGI Gépészeti informatika 8.
BME MOGI Gépészeti informatika 8. 1. feladat Készítse beosztottak és vezetők munkahelyi adatait kezelő alkalmazást! A feladat megoldásához hozza létre a következő osztályokat! Beosztott osztály: adatmező
RészletesebbenObjektumorientált programozás C# nyelven
Objektumorientált programozás C# nyelven 2. rész Öröklés és többalakúság Nemvirtuális metódusok, elrejtés Virtuális metódusok, elrejtés Típuskényszerítés, az is és as operátorok Absztrakt osztályok, absztrakt
RészletesebbenBevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés
Bevezetés a programozásba 2 7. Előadás: Objektumszű és osztályszű elemek, hibakezelés ISMÉTLÉS Osztály class Particle { public: Particle( X, X, Y); virtual void mozog( ); ); virtual void rajzol( ) const;
RészletesebbenHelyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?
A "java Villa -v" parancs jelentése: A java interpreter elindítja a Villa osztály statikus main metódusát, és átadja neki paraméterként a "-v" stringet. A java interpreter elindítja először a Villa osztály
Részletesebben1. Alapok. Programozás II
1. Alapok Programozás II Elérhetőség Név: Smidla József Elérhetőség: smidla dcs.uni-pannon.hu Szoba: I916 2 Irodalom Bjarne Stroustrup: A C++ programozási nyelv 3 Irodalom Erich Gamma, Richard Helm, Ralph
RészletesebbenJava programozási nyelv 10. rész Input/output kezelés
Java programozási nyelv 10. rész Input/output kezelés Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2005. szeptember A Java programozási nyelv Soós Sándor 1/28 Tartalomjegyzék
RészletesebbenOOP: Java 4.Gy: Java osztályok
OOP: Java 4.Gy: Java osztályok. 36/1 B ITv: MAN 2019.03.02 Feladat Készítsen el egy Employee osztályt és egy Employee osztályt használó osztályt (EmpProgram). Az Employee osztálynak: van name és salary
RészletesebbenWeb-technológia PHP-vel
Web-technológia PHP-vel A PHP programnyelv 2, futtatókörnyezet beálĺıtások Erős Bence February 26, 2013 Erős Bence () Web-technológia PHP-vel February 26, 2013 1 / 19 Szuperglobális változók $ GET : request
RészletesebbenHello World Servlet. Készítsünk egy szervletet, amellyel összeadhatunk két számot, és meghívásakor üdvözlőszöveget ír a konzolra.
Hello World Servlet Készítsünk egy szervletet, amellyel összeadhatunk két számot, és meghívásakor üdvözlőszöveget ír a konzolra. Hozzunk létre egy Dynamic Web projectet File New Other itt a következőket
RészletesebbenOOP #14 (referencia-elv)
OOP #14 (referencia-elv) v1.0 2003.03.19. 21:22:00 Eszterházy Károly Főiskola Információtechnológia tsz. Hernyák Zoltán adj. e-mail: aroan@ektf.hu web: http://aries.ektf.hu/~aroan OOP OOP_14-1 - E jegyzet
RészletesebbenOOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN
OOP: Java 11.Gy: Enumok, beágyazott osztályok 13/1 B ITv: MAN 2019.04.24 ArrayList Rugalmas tömb A tömbök korlátai Fix méret, nem lehet menet közben megnövelni Ha túl nagyra választjuk, fölösleges helyfoglalás
RészletesebbenInformatika terméktervezőknek
Informatika terméktervezőknek C# alapok Névterület (namespace) using Osztály (class) és Obejtumok Metódus (function, procedure, method) main() static void string[] arg Szintaxis // /* */ \n \t Névadások
RészletesebbenCollections. Összetett adatstruktúrák
Collections Összetett adatstruktúrák Collections framework Előregyártott interface-ek és osztályok a leggyakoribb összetett adatszerkezetek megvalósítására Legtöbbször módosítás nélkül használhatók Időt,
RészletesebbenOAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1.
OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1. Feladat Szimuláljuk különféle élőlények túlélési versenyét. A lények egy pályán haladnak végig, ahol váltakozó viszonyok vannak. Egy lénynek
RészletesebbenSorosítás (szerializáció) és helyreállítás. 1. Bináris sorosítás és helyreállítás. 1.1. Szükséges névterek. 1.2. Attribútumok. 1.3.
Sorosítás (szerializáció) és helyreállítás Cél: a memóriában tárolt adatok egyszerű lemezre mentése és visszatöltése. A sorosítás során létrehozunk egy állományt és egy sorosítást kezelő objektumot. Ez
Részletesebben3. Osztályok II. Programozás II
3. Osztályok II. Programozás II Bevezető feladat Írj egy Nevsor osztályt, amely legfeljebb adott mennyiségű nevet képes eltárolni. A maximálisan tárolható nevek számát a konstruktorban adjuk meg. Az osztályt
RészletesebbenKalapácsvetés 2016 szöveges
Kalapácsvetés 2016 Ebben a feladatban a 2016. évi nyári olimpiai játékokon az atlétika férfi kalapácsvetés döntőjének eredményeit kell feldolgoznia. A döntő 6 dobási sorozatból állt, de a 3. sorozat után
RészletesebbenKivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat
Kivételkezelés, beágyazott osztályok Nyolcadik gyakorlat Kivételkezelés Nem minden hibát lehet fordítási időben megtalálni Korábban (pl. C-ben) a hibakezelést úgy oldották meg, hogy a függvény hibakódot
RészletesebbenCikktípusok készítése a Xarayában
Cikktípusok készítése a Xarayában A Xaraya legfontosabb tulajdonsága az egyedi cikktípusok egyszerű készítésének lehetősége. Ezzel kiküszöbölhető egyedi modulok készítése, hiszen néhány kattintással tetszőleges
RészletesebbenWebes alkalmazások fejlesztése 12. fejezet. Szolgáltatás alapú kommunikáció (WCF) Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar
Eötvös Loránd Tudományegyetem Informatikai Kar Webes alkalmazások fejlesztése 12. fejezet Szolgáltatás alapú kommunikáció (WCF) Giachetta Roberto A jegyzet az ELTE Informatikai Karának 2016. évi jegyzetpályázatának
Részletesebben5. téma XML DB. Az adatkezelés és XML kapcsolata. Miért fontos az XML használata az adatbázis kezelésben?
Adatbázis modellek 5. téma XML DB Az adatkezelés és XML kapcsolata Miért fontos az XML használata az adatbázis kezelésben? Adattárolás alapformái: - strukturált - szabad-szöveges - szemi struktúrált -
RészletesebbenJava Programozás 1. Gy: Java alapok. Ismétlés ++
Java Programozás 1. Gy: Java alapok Ismétlés ++ 24/1 B ITv: MAN 2018.02.18 Feladat Készítsünk egy komplett konzolos alkalmazást, mely generál egy számot 0 és 100 között (mindkét határt beleértve), feladatunk
RészletesebbenJava I. A Java programozási nyelv
Java I. A Java programozási nyelv története,, alapvető jellemzői Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2007. 02. 12. Java I.: Történet, jellemzők, JDK JAVA1 / 1 Egy kis történelem
RészletesebbenJava Programozás 11. Ea: MVC modell
Java Programozás 11. Ea: MVC modell 20/1 B ITv: MAN 2018.03.02 MVC Model-View-Controller A modell-nézet-vezérlő a szoftvertervezésben használatos szerkezeti minta. Az MVC célja elválasztani az üzleti logikát
RészletesebbenElőszó. Bevezetés. Java objektumok leképzése relációs adatbázisokra OJB-vel Viczián István (viczus@freemail.hu) Viczián István
Java objektumok leképzése relációs adatbázisokra -vel Viczián István (viczus@freemail.hu) Előszó E cikk olyan haladó programozóknak nyújt segítséget, kik tisztában vannak a Java nyelvvel, és többször is
RészletesebbenProgramozási nyelvek II.: JAVA
Programozási nyelvek II.: JAVA 13. gyakorlat 2017. december 11-15. 13. gyakorlat Programozási nyelvek II.: JAVA 1 / 32 Az 13. gyakorlat tematikája Generikus típusokés öröklődés Clone Comparator Névtelen
RészletesebbenJava és web programozás
Budapesti Műszaki Egyetem 2015. 02. 11. 2. Előadás Mese Néhány programozási módszer: Idők kezdetén való programozás Struktúrált Moduláris Funkcionális Objektum-orientált... Mese Néhány programozási módszer:
RészletesebbenC++ programozási nyelv Konstruktorok-destruktorok
C++ programozási nyelv Konstruktorok-destruktorok Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2004. szeptember A C++ programozási nyelv Soós Sándor 1/20 Tartalomjegyzék
RészletesebbenJava és web programozás
Budapesti Műszaki Egyetem 2015. 04. 08. 9. Előadás Kivétel kezelés a kivétel (exception) egy esemény, mely futás közben megbontja a program normális futási folyamatát például kivétel dobódik amikor 0-val
RészletesebbenA gyakorlat során az alábbi ábrán látható négy entitáshoz kapcsolódó adatbevitelt fogjuk megoldani.
Vizuális programozás 1. A gyakorlat célja A gyakorlat célja a Könyvtár alkalmazás folytatása az előző gyakorlaton elkészített grafikus felület felhasználásával. Elsőként lemásoljuk az előző gyakorlat eredményeként
RészletesebbenOOP: Java 8.Gy: Gyakorlás
OOP: Java 8.Gy: Gyakorlás 43/1 B ITv: MAN 2019.04.10 43/2 Egy régebbi beszámoló anyaga 1. Feladat: Készítsen egy Szemely nevű osztályt a szokásos konvenciók betartásával, amely tárolja egy ember nevét
RészletesebbenProgramozási technológia
Programozási technológia Swing GUI készítése NetBeans IDE segítségével Dr. Szendrei Rudolf ELTE Informatikai Kar 2018. Bevezető Eddig a grafikus felhasználói felületet kódból hoztuk létre kézzel. A mi
RészletesebbenJava programozási nyelv 5. rész Osztályok III.
Java programozási nyelv 5. rész Osztályok III. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2005. szeptember A Java programozási nyelv Soós Sándor 1/20 Tartalomjegyzék
RészletesebbenJAVA SE/ME tanfolyam tematika
JAVA SE/ME tanfolyam tematika TANFOLYAM TEMATIKA: A JAVA MEGISMERÉSE Java története, miért készült, miért népszerű NETBEANS környezet telepítése, megismerése Programozási alapok java nyelven Változók,primitív
Részletesebbenés az instanceof operátor
Java VIII. Az interfacei és az instanceof operátor Krizsán Zoltán Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 24. Java VIII.: Interface JAVA8 / 1 Az interfészről általában
RészletesebbenJava gyakorlat feladatai e s megolda sai (2014.04.10)
Java gyakorlat feladatai e s megolda sai (2014.04.10) 1. Feladat Számítsuk ki a Fibonacci sorozat első 20 tagját! / Fibonacci számsorozat tagjait kiszámoló, egyetlen osztályból álló program @author Bence
RészletesebbenOsztály és objektum fogalma
Osztály és objektum fogalma A C++ programozási nyelv I. CPP1/ 1 Az osztály (class) class: adatok és módszerek (method) (függvények) együttese, amely absztrakt adattípusként működik. objektum: egy osztály
RészletesebbenPHP5 Új generáció (2. rész)
PHP5 Új generáció (2. rész)...avagy hogyan használjuk okosan az osztályokat és objektumokat PHP 5-ben. Cikksorozatom elõzõ részében képet kaphattunk arról, hogy valójában mik is azok az objektumok, milyen
RészletesebbenJava VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán
Java VIII. Az interfacei és az instanceof operátor Krizsán Zoltán Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 24. Java VIII.: Interface JAVA8 / 1 Az interfészről általában
RészletesebbenEnterprise JavaBeans. Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem. Az Enterprise JavaBeans
Enterprise JavaBeans Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem Az Enterprise JavaBeans Az Enterprise Javabeans Az Enterprise JavaBeans (EJB) server oldali komponens, amely Az üzleti
RészletesebbenBevezetés a programozásba I.
Bevezetés a programozásba I. 6. gyakorlat C++ alapok, szövegkezelés Surányi Márton PPKE-ITK 2010.10.12. Forrásfájlok: *.cpp fájlok Fordítás: a folyamat, amikor a forrásfájlból futtatható állományt állítunk
RészletesebbenBánsághi Anna anna.bansaghi@mamikon.net
ESEMÉNYVEZÉRELT PROGRAMOZÁS Bánsághi Anna anna.bansaghi@mamikon.net 2. ELŐADÁS - C# ÁTTEKINTÉS - 2 2015 Bánsághi Anna 1 of 64 TEMATIKA I. C# ÁTTEKINTÉS II. WPF III. Modern UI 2015 Bánsághi Anna 2 of 64
RészletesebbenMiután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni:
Excel objektumok Az excelben az osztályokat úgynevezett class modulokként hozzuk létre. Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni: View-ba
RészletesebbenSZOFTVERES SZEMLÉLTETÉS A MESTERSÉGES INTELLIGENCIA OKTATÁSÁBAN _ Jeszenszky Péter Debreceni Egyetem, Informatikai Kar jeszenszky.peter@inf.unideb.
SZOFTVERES SZEMLÉLTETÉS A MESTERSÉGES INTELLIGENCIA OKTATÁSÁBAN _ Jeszenszky Péter Debreceni Egyetem, Informatikai Kar jeszenszky.peter@inf.unideb.hu Mesterséges intelligencia oktatás a DE Informatikai
RészletesebbenAz osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java
Függvények, csomagok Csomagok Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges számú osztályt tartalmazhat Pl.: java.util.scanner Könyvtárhierarhiát fed: Pl.: java/util/scanner.java Célja:
Részletesebben