Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
1
SOAP és webservice
2
XML-API
3
XML használata Program-program kapcsolat egyik módja
adóprogram előállítja az átvinni kívánt objektumot objektum bean-ként objektumból XML XML átvitele vevő kapott egy XML-t XML-ből átalakítás objektummá
4
Átvitel megoldása Adó rendszer (mint web-kliens) XML-ben a kérés
válaszXML -> bean bean->XML XML-ben a kérés (HTTP request-ként) XML-ben a válasz (HTTP response-ként) Vevő rendszer (mint web-szerver) válaszbean -> XML XML->bean
5
Működés Kérés egy Javabean-ben képződik Szimulált böngésző
bean-ből XML-t kell generálni szimulálni kell programmal a web-böngészőt HTTP-request készítés Szimulált böngésző visszaveszi a HTTP-response-ot az adattartalom egy XML-szerkezet XML-ből Javabean struktúrát kell készíteni
6
XML és Javabean kapcsolata
public class TestBean implements java.io.Serializable { protected int foo; protected String bar; protected java.util.Date baz; protected Vector thingies; protected TestSubbean sub; … } <MarkTest> <foo>5</foo> <bar>This is the bar value</bar> <baz> <year>2003</year> <month>03</month> </baz> <thingies> <item index=”0”>Moe</thing> <item index=”1”>LX</thing> </thingies> <sub> <name>Mark</name> <age>56</age> </sub> </MarkTest>
7
XML és Javabean kapcsolata
public class TestBean implements java.io.Serializable { protected int foo; protected String bar; protected java.util.Date baz; protected Vector thingies; protected TestSubbean sub; … } <MarkTest> <foo>5</foo> <bar>This is the bar value</bar> <baz> <year>2003</year> <month>03</month> </baz> <thingies> <item index=”0”>Moe</thing> <item index=”1”>LX</thing> </thingies> <sub> <name>Mark</name> <age>56</age> </sub> </MarkTest>
8
Bean-ből XML készítése
try { TestBean b = new TestBean(); b.setFoo(5); b.setBar("This is the bar value"); b.setThingies(new String[] { "Moe", "LX"} ); TestSubbean sub = new TestSubbean(); sub.setName("Mark"); sub.setAge(56); b.setSub(sub); FileOutputStream fileOut = new FileOutputStream(”output.xml"); JOXBeanOutputStream joxOut = new JOXBeanOutputStream(fileOut); joxOut.writeObject("MarkTest", b); } bean előállítása ez jön létre! első szint neve kell! bean, mint bemenet
9
XML-ből bean készítése
bemeneti xml try { FileInputStream in = new FileInputStream(”input.xml"); JOXBeanInputStream joxIn = new JOXBeanInputStream(in); TestBean testBean = (TestBean) joxIn.readObject( TestBean.class); } int foo = testbean.getFoo(); String bar = testbean.getBar(); ... „minta” osztályként megadva felhasználás
10
Átvitel HTTP-vel Külön Java-osztály a kezeléshez Request-készítés
Response-várás URL dataURL = new URL(protocol, host, port, uri); URLConnection connection = dataURL.openConnection(); ByteArrayOutputStream byteStream = ...; byteStream.writeTo(connection.getOutputStream()); BufferedReader in = new BufferedReader( new InputStreamReader (connection.getInputStream()));
11
SOAP
12
Előzmények: WDDX Web Distribution Data Exchange </wddxPacket>
<wddxPacket version=“1.0”> <header /> <data> <recordset rowCount=”1” fieldNames=“url,headLine,source”> <field name=“url”> <string> </field> <field name=“headLine”> <string>Firefighters in Wyoming</string> <field name=“source”> <string>CNN</string> </recordset> </data> </wddxPacket>
13
Előzmények: XML-RPC <methodCall> <methodName>NumberToText</methodname> <params> <param> <value><i4>28</i4></value> </param> </params> </methodCall> <methodResponse> <params> <value><string>huszonnyolc</string></value> </methodResponse>
14
SOAP Simple Object Application Protocol
MicroSoft találja ki, W3C is elfogadja 2000-től távoli programok együttműködésére „alrendszer”, azaz alsó szintű építőelem intranetben, Interneten működik: lehet SMTP, FTP, vagy közvetlen IP-alapú de általában HTTP-vel használják XML 2.0-t használ (névtér kell!) RPC jelleggel működik
15
Remote Procedure Call Összevetés a lokális eljárás hívással
hívó és hívott eljárás más “végrehajtási kontextusban” Eljárás jellemzői utasítás szekvencia van egy belépés és egy visszatérési pontja hívó addig nem lép tovább, amíg nincs visszatérés
16
RPC specialitásai Kliens/szerver - összekapcsolódás (binding)
hívó: kliens, hívott: szerver binding-ot a kliens kezdeményezi Paraméter átadás nincs cím szerinti hívás! Újabb végrehajtási hibák távoli gép hibái függetlenek a lokálistól Biztonsági problémák - 2 értelemben is hálózati kommunikáció megbízható legyen hálózati kommunikáció veszélyhelyzetei
17
Réteges szerkezet alkalmazás alkalmazás SOAP SOAP HTTP HTTP komm.verem
18
SOAP átvitel Boríték rendszerben Adás-vétel hasonló szerkezetben
3 névtér kell SOAP, XML-séma, XML-típusok törzs (body) mindenképpen kell itt a hívás ill. a válasz fejléc (header) nem szükséges fejlécben különleges lehetőségek
19
SOAP-kérés boríték POST /xxx/InventoryChck.jws HTTP/1.0 Host: localhost Content-Type: text/xml; charset=utf-8 Content-Length: 426 SOAPAction: “” <?xml version “1.0” encoding=“UTF-8” ?> <SOAP-ENV:Envelope SOAP-ENV:encodingStyle=“ xmlns:xsd=“ xmlns:SOAP-ENV=“ xmlns:xsi=“ > <SOAP-ENV:Body> <doCheck> <arg0 xsi:type=“xsd:string”>947-TI</arg0> <arg1 xsi:type=“xsd:int”>1</arg1> </doCheck> </SOAP-ENV:Body> </SOAP-ENV:Envelope> HTTP header HTTP body
20
SOAP-kérés boríték POST /xxx/InventoryChck.jws HTTP/1.0 Host: localhost Content-Type: text/xml; charset=utf-8 Content-Length: 426 SOAPAction: “” <?xml version “1.0” encoding=“UTF-8” ?> <SOAP-ENV:Envelope SOAP-ENV:encodingStyle=“ xmlns:xsd=“ xmlns:SOAP-ENV=“ xmlns:xsi=“ > <SOAP-ENV:Body> <doCheck> <arg0 xsi:type=“xsd:string”>947-TI</arg0> <arg1 xsi:type=“xsd:int”>1</arg1> </doCheck> </SOAP-ENV:Body> </SOAP-ENV:Envelope> HTTP header HTTP body
21
SOAP-válasz boríték HTTP/ OK Content-Type: text//xml; charset=utf-8 Content-Length: 426 <?xml version “1.0” encoding=“UTF-8” ?> <SOAP-ENV:Envelope SOAP-ENV:encodingStyle=“ xmlns:xsd=“ xmlns:SOAP-ENV=“ xmlns:xsi=“ > <SOAP-ENV:Body> <doCheckResponse> <doCheckResult xsi:type=“xsd:boolean”>true</doCheckResult> </doCheckResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
22
Fejlécek és szerepük mindenképpen végrehajtandó!
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle=“ xmlns:xsd=“ XMLSchema” xmlns:SOAP-ENV=“ xmlns:xsi=“ > <SOAP-ENV:Header> <t:Transaction xmlns:t=”.../...” SOAP-ENV:mustUnderStand=“1”> 123456 </t:Transaction> <p:Priority xmlns:p=”.../...” ...> ... </p:Priority> </SOAP-ENV:Header> <SOAP-ENV:Body> </SOAP-ENV:Body> </SOAP-ENV:Envelope> mindenképpen végrehajtandó!
23
Autentikáció <SOAP-ENV:Envelope SOAP-ENV:encodingStyle=“ xmlns:xsd=“ XMLSchema” xmlns:SOAP-ENV=“ xmlns:xsi=“ > <SOAP-ENV:Header> <ai:AuthenticationInfo xmlns:ai=”.../...” SOAP-ENV:mustUnderStand=“1” SOAP-ENV:actor=“urn:X-Skala:PartnerGateway”> <username>PartnerA</username> <password>xxabsoap</password> </ai:AuthenticationInfo> ... <SOAP-ENV:Header> </SOAP-ENV:Envelope>
24
Actor szerepe: lánc SOAP-üzenet módosítható! pl. naplózás
webservice megvalósító WS ügynök k é r é s igénylő v á l a s z
25
Hibajelzések HTTP/ OK Content-Type: text/xml; charset=utf-8 Content-Length: 426 <?xml version “1.0” encoding=“UTF-8” ?> <SOAP-ENV:Envelope SOAP-ENV:encodingStyle=“ xmlns:xsd=“ XMLSchema” xmlns:SOAP-ENV=“ xmlns:xsi=“ > <SOAP-ENV:Body> <SOAP-ENV:Fault> <faultcode>AuthenticationFalure</faultcode> <faultstring>Failed to authenticate client</faultstring> <faultactor> urn:X-Skala:PartnerGateway</faultactor> </SOAP-ENV:Fault> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
26
Webservice (webszolgáltatás)
27
Szolgáltatás nyilvántartó
Általános szerkezet Szolgáltatás modell kliens keresés használat Szolgáltatás nyilvántartó Szolgáltató közzététel
28
Milyen szolgáltatást? Fő jellemzők Alsó átvitel mint egy metódus
paraméterezés 2 módon hagyományos paraméterek (int, Hashtable, Vector, stb.) XML be/ki általában állapotmentes megoldás Alsó átvitel SOAP-pal
29
Webservice példák Autentikáció Irányítószám-helységnév Díjszámítás
int check (String username, String password) int changePassword (String username, String oldpass, String newpass, String newpass2) Irányítószám-helységnév Vector findHelysegByIrszam (String irszam) Vector findIrszamByHelyseg (String helyseg) Vector getAllHelyseg () Díjszámítás HashMap getFee (int male, Date birthdate , int sum, int year)
30
Díjszámítás-webservice kimenete
HashMap getFee (int male, Date birthdate , int sum, int year) e_date e_sum o_age o_age o_annual o_monthly o_monthlyCheck
31
Webservice jelentősége
Intranetben szolgáltatások az intranet tetszőleges helyén igénybevehetők tetszőleges nyelven központi karbantartás Ez B2B kommunikáció extranet kapcsolatokon a lényeges info megy át
32
Webservice, mint B2B kapcsolat
intranet tűzfal Internet “webservice” szerver ügyfél gépe vagy intranetje
33
Műveletek típusa Kérés-válasz (pl. díjszámítás)
legáltalánosabb Csak válasz (pl. időpont lekérdezés) nincs bemenő paraméter Jelzés (pl. időtúllépés a keresésben) a szolgálató kezdeményezi milyen címre jöjjön: előtte címbeadás Jelzés-válasz (pl. időtúllépés hatására leállító akció) jelzésre a kliens visszaszól hasonló problémák, mint a jelzésnél
34
Szolgáltatás leírása Külön nyelv WSDL: WebService Definition Language
XML forma sok komponensből Elemei mit csinál adat és protokollformátumok protokollra jellemző címek
35
WSDL elemei 0. definition: a leírás neve, így kereshető
1. types: milyen típusok szerepelnek egyáltalán 2. message: be/ki egységek 3. portType: műveletek csoportja, átvitel-független operation: konkrét név, általában több is 4. binding: hogyan kapcsolódik a SOAP-hoz 5. service: kapuk csoportjának neve port: hol érhető el a szolgáltatás
36
WSDL fejléce <?xml version=“1.0” ?>
<definitions name=“PriceCheck” targetNamespace= “ xmlns:pc= “ xmlns:xsd=“ xmlns:soap= “ xmlns= “ > alapértelmezett névtér
37
WSDL elemzése 1 2 3 4 5 ... <types>
<xsd:element name=“price” type=“xsd:double” /> ... </types> <message name=“PriceCheckRequest”> <part name=“sku” type=“xsd:string” /> </message> <portType name=“PriceCheckPortType”> <operation name=“checkPrice” parameterOrder=“...”> <documentation>Szöveges dokumentáció</documentation> <input message=“pc:PriceCheckRequest” /> <binding name=“PriceCheckSOAPBinding” type=“pc:PriceCheckPortType”> < verb=”GET" /> <soap:binding ... <operation name =“checkPrice” ... <service name=“PriceCheckService”> <port name=“PriceCheck” binding=“pc:PriceCheckSOAPBinding”> <soap:address location=“ 1 2 3 4 5
38
Valós példa Irányítószám-helységnév findIrszamByHelyseg
szolgáltatások (néhány) Vector findHelysegByIrszam (String irszam) Vector findIrszamByHelyseg (String helyseg) Vector getAllHelyseg () findIrszamByHelyseg ha értelmes a helységnév ha nem: hibajelzés (NO_SUCH_RECORD, …) Vácduka 2167 Budapest 1011,
39
Definició
40
Valós példa Kimenet kódolás Kimeneti példák definició elvileg
Vector findIrszamByHelyseg (String helyseg) definició a valóságban HashMap findIrszamByHelyseg (String helyseg) Kimeneti példák o_result OK o_ o_ o_ o_result NO_SUCH_RECORD
41
Típusok
42
Üzenetek
43
Kapu és művelet
44
Összekötés az alsóbb szinttel
45
Szolgáltatás
46
WSDL bővítése Egyéb kapcsolási módok GET/POST használata SOAP (eddig)
közvetlen web használata (GET v. POST) GET/POST használata elönyös a webes akcióknál
47
Webservice készítés Ingyenes rendszerek Apache-Axis
TheMindElectric/GLUE
48
Webservice használata
Használati formák Java programból természetes Windows-XP-ben már az Excel-ből is PERL interface van PHP interface van Központi karbantartás interface kidolgozása (pl. GUI formában)
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.