GSOAP - gSOAP - Wikipedia
Vývojáři | Robert van Engelen |
---|---|
První vydání | 8. prosince 2000 |
Stabilní uvolnění | 2.8.107 / 6. října 2020 |
Úložiště | |
Napsáno | C a C ++ |
Operační systém | Cross-platform |
Typ | Software pro vývoj webových aplikací |
Licence | GPL v2, komerční licence |
webová stránka | https://www.genivia.com/dev.html https://sourceforge.net/projects/gsoap2/ |
gSOAP[1][2] je sada nástrojů pro vývoj softwaru C a C ++ pro MÝDLO /XML webové služby a obecné Vázání dat XML. Vzhledem k sadě deklarací typu C / C ++ generují nástroje gSOAP založené na kompilátoru serializační rutiny ve zdrojovém kódu pro efektivní XML serializace specifikovaných datových struktur C a C ++. Serializace trvá nulová kopie nad hlavou.
Dějiny
Sada nástrojů gSOAP začala jako výzkumný projekt na Florida State University profesor Robert van Engelen v roce 1999. Projekt představil nové metody[2] pro vysoce efektivní syntaktickou analýzu XML (pull parsing)[3][4] a serializace dat C / C ++ přímo ve Windows XML a později také v MÝDLO. Projekt uspěl[5] při definování typově bezpečné datové vazby mezi Schéma XML typy a širokou škálu Datové typy C / C ++. Sada nástrojů používá automatické programování zjednodušit vývoj a vyvolání webových služeb pomocí efektivních automaticky generovaných serializátorů XML pro přímé odesílání a příjem dat v C / C ++. Nástroj založený na kompilátoru pro konkrétní doménu generuje zdrojový kód, který efektivně převádí nativní datové struktury C / C ++ na XML a zpět.[1] Sada nástrojů byla dále vyvinuta na podporu protokolu zpráv webových služeb SOAP, který byl zaveden přibližně ve stejnou dobu, proto název „gSOAP" (Generic XML a MÝDLO) a použít přístup k výměně vědeckých údajů.[6] Další vývoj a údržba softwaru proběhla ve vlastnictví společnosti Genivia Inc. To zahrnuje přidání nového WSDL a Schéma XML možnosti zpracování a přidání mnoha funkcí protokolu webových služeb WS- *, jako jsou optimalizace WS-Security,[7] XML-RPC zasílání zpráv, podpora pro JSON datový formát, moduly pluginů pro integraci gSOAP do webových serverů Apache a IIS a pluginy třetích stran, například pro Grid Services.[8][9] Sada nástrojů gSOAP je napsána v přenosném C / C ++ a používá formu bootstrapping generováním vlastního kódu k implementaci převaděče k překladu specifikací WSDL / XSD do zdrojového kódu C / C ++ pro vazby metadat WSDL / XSD. Software gSOAP je licencován na základě licence open source GPLv2 a licencí zdrojového kódu pro komerční použití. Software gSOAP je široce používán v průmyslových projektech[10] a kritické infrastruktury.
XML Web Service Operations by Example
Příklad operace webové služby v jazyce C pro načtení ceny ubytování hotelu s daným počtem hostů lze deklarovat v anotované formě jako
// gsoap ns service namespace: tempuri// gsoap ns service style: document// kódování služby gsoap ns: literálint ns__get_rate(char* hotel, int Hosté, plovák *hodnotit);
Posledním parametrem funkce je vždy návratová hodnota služby, kterou lze pro jednosměrné operace označit jako neplatnou a měla by být strukturou / třídou, která bude svazovat více návratových parametrů služby. Návratová hodnota funkce int se používá pro diagnostiku chyb.
Vyvolání služby v jazyce C pomocí automaticky generované funkce soap_call_ns__get_rate se provede následujícím způsobem:
konst char *URL = „http://www.example.com/hotely“;konst char *akce = NULA;struktur mýdlo *ctx = soap_new(); // nový kontextplovák hodnotit;int chybovat = soap_call_ns__get_rate(ctx, URL, akce, "Happy Inn", 2, &hodnotit);-li (chybovat == SOAP_OK && hodnotit < 100.00) Pojďme();soap_end(ctx); // uvolnit deserializovaná datasoap_free(ctx); // uvolnit kontext
Pro usnadnění implementace webových služeb pro starší systémy C a C ++ lze kvalifikaci předpony jmen identifikátorů v C / C ++ vynechat nebo ji lze nahradit notací dvojtečky, například ns: get_rate místo ns__get_rate. Interpunkce je odebrána z automaticky generovaného zdrojového kódu, který se používá v sestavení projektu.
Vyvolání služby v C ++ pomocí automaticky generované třídy Proxy se provádí následujícím způsobem (pomocí výchozí adresy URL koncového bodu proxy a hodnot akce SOAP):
Proxy proxy;plovák hodnotit;int chybovat = proxy.get_rate("Happy Inn", 2, &hodnotit);-li (chybovat == SOAP_OK && hodnotit < 100.00) Pojďme();proxy.zničit(); // uvolnit deserializovaná data
Použitím anotací a konvencí pojmenování identifikátorů, tj. Kvalifikace s předponou ns__ pro funkci ns__get_rate a deklarováním vlastností oboru názvů ns pomocí direktiv // gsoap v příkladu, je navázána vazba na operace webové služby. Automaticky generovaný dokument WSDL (Web Services Description Language) deklaruje zprávu s požadavkem, zprávu s odpovědí a operaci get-rate operace portType a vazbu SOAP pro funkci ns__get_rate následujícím způsobem:
jméno ="Servis" targetNamespace ="tempuri" xmlns: tns ="tempuri" xmlns: ns ="tempuri" xmlns =„http://schemas.xmlsoap.org/wsdl/“>... jméno =„get-rateRequest“> <část jméno ="parametry" prvek =„ns: get-rate“/></message> jméno =„get-rateResponse“> <část jméno ="parametry" prvek =„ns: get-rateResponse“/></message> jméno =„ServicePortType“> jméno ="get-rate"> zpráva ="tns: get-rateRequest"/> zpráva ="tns: get-rateResponse"/> </operation></portType> jméno ="Servis" zadejte ="tns: ServicePortType"> styl ="dokument" doprava =„http://schemas.xmlsoap.org/soap/http“/> jméno ="get-rate"> soapAction =""/> <input> díly ="parametry" použít ="doslovný"/> </input> <output> díly ="parametry" použít ="doslovný"/> </output> </operation></binding>
kde zprávy požadavku a odpovědi operace odkazují na prvky XML, které jsou definovány v sekci typů WSDL takto:
<types> targetNamespace ="tempuri" ...> jméno ="get-rate"> <complexType> <sequence> jméno ="hotel" zadejte ="xsd: string" minOccurs ="0" maxOccurs ="1" nillable ="skutečný"/> jméno ="Hosté" zadejte =„xsd: int“ minOccurs ="1" maxOccurs ="1"/> </sequence> </complexType> </element> jméno =„get-rateResponse“> <complexType> <sequence> jméno ="hodnotit" zadejte ="xsd: float" minOccurs ="0" maxOccurs ="1" nillable ="skutečný"/> </sequence> </complexType> </element> </schema></types>
Podobně lze zdrojový kód klienta a serveru C / C ++ generovat automaticky ze sady schémat WSDL a XML. Služby musí být dokončeny definováním příslušných operací služeb. Například automaticky generovaná třída služby C ++ pro tento WSDL musí být dokončena definováním metody get_rate následujícím způsobem:
int Servis::get_rate(char *hotel, int Hosté, plovák *hodnotit){ *hodnotit = ... // určí sazbu ubytování v hotelu vzhledem k počtu hostů vrátit se SOAP_OK;}
Neexistují žádná omezení typu provozních parametrů, které lze zařadit do XML pro zasílání zpráv webové služby, kromě toho, že k vytvoření datové vazby je třeba dodržovat určité konvence deklarací typu a anotace.
Vazba dat XML podle příkladu
K vytvoření datové vazby XML s datovými typy C / C ++ používá gSOAP tři základní formy anotace zdrojového kódu: směrnice, konvence pojmenování identifikátorů a interpunkci.
Deklarace plně anotované struktury v C pro hierarchický záznam zaměstnance se může zobrazit jako
// gsoap ns schema namespace: tempuri// formulář schématu gsoap ns: kvalifikovanýstruktur ns__employee_record{ @char *xml__lang = „cs“; @int ID = 9999; char *celé jméno 1:1; $ int velikost 0:12; struktur ns__employee_record *spravuje;};
kde jsou použity následující anotace a konvence:
- kvalifikace oborů názvů typů a členů podle konvence pojmenování identifikátorů: ns__employee_record, xml__lang
- atributy pro členy: @ char *, @int
- výchozí hodnoty pro členy: xml__lang = "en", ID = 9999
- omezení výskytu v podobě minVyskytuje se:maxOccurs pro ověření XML: full_name 1: 1, velikost 0:12
- dynamická pole sekvencí prvků se skládají z dvojice pole speciální velikosti a člena ukazatele pole: $ int size; struct ns__employee_record * spravuje
Nástroje gSOAP převádějí datové typy C / C ++ na / z datových typů schématu XML. Vzhledem k tomu, že C nepodporuje obory názvů a názvy členů struktury / třídy nelze v C ++ kvalifikovat pro obor názvů, použití konvencí pojmenování identifikátorů v gSOAP umožňuje vazbu této struktury a jejích členů na schéma XML complexType, které se generuje automaticky takto:
targetNamespace ="tempuri" xmlns: ns ="tempuri" xmlns: xsd =„http://www.w3.org/2001/XMLSchema“ xmlns =„http://www.w3.org/2001/XMLSchema“ elementFormDefault ="kvalifikovaný" attributeFormDefault ="kvalifikovaný"> jméno ="záznam zaměstnance"> <sequence> jméno ="celé jméno" zadejte ="xsd: string" minOccurs ="1" maxOccurs ="1" nillable ="skutečný"/> jméno ="spravuje" zadejte =„ns: employee-record“ minOccurs ="0" maxOccurs ="12"/> </sequence> ref =„xml: lang“ použít ="výchozí" výchozí =„cs“/> jméno =„ID“ zadejte =„xsd: int“ použít ="výchozí" výchozí ="9999"/> </complexType></schema>
Dále jsou odbory ve struktuře / třídě, které jsou opatřeny poznámkami se speciálním volicím polem pro výběr členů odboru, mapovány na / z části výběru schématu, kontejnery STL jsou mapovány na / ze sekvenčních částic, výčty jsou mapovány na / z výčtu schématu XML simpleType, a standardní primitivní typy C / C ++ jsou mapovány na / z typů XSD. Pro převod schématu XSD na datové typy C / C ++ je skutečné mapování konfigurovatelné v gSOAP pomocí souboru mapování typů.
Například instance hierarchické struktury zaměstnanců je standardně serializována v XML jako strom, například
xmlns: ns ="tempuri" xml: lang =„cs“ ns: ID ="12"> <ns:full-name>Jane Doe</ns:full-name> xml: lang =„cs“ ns: ID ="34"> <ns:full-name>John Doe</ns:full-name> </ns:manages> xml: lang =„cs“ ns: ID ="56"> <ns:full-name>Bob Oz</ns:full-name> xml: lang =„cs“ ns: ID ="78"> <ns:full-name>Alice Oz</ns:full-name> </ns:manages> </ns:manages></ns:employee>
Když je povolen styl kódování SOAP, serializace XML v gSOAP respektuje společně odkazované objekty a cyklické datové struktury podle pravidel kódování SOAP, jejichž výsledkem je XML s id-ref hrany.
Automaticky generovaná datová vazba XML zahrnuje operace čtení a zápisu do / ze souboru, řetězce nebo streamu. Například objekt ns__employee_record má operace čtení a zápisu:
int soap_read_ns__employee_record(struktur mýdlo*, ns__employee_record*);int soap_write_ns__employee_record(struktur mýdlo*, konst ns__employee_record*);
Čtení záznamu zaměstnance ze souboru XML:
struktur mýdlo *ctx = soap_new();ctx->recvfd = otevřeno(„employee.xml“, O_RDONLY);-li (ctx->recvfd){ ns__employee_record zaměstnanec; -li (soap_read_ns__employee_record(ctx, &zaměstnanec) == SOAP_OK) ... zavřít(ctx->recvfd);}soap_end(ctx);soap_destroy(ctx); // také odstraní data zaměstnancůsoap_free(ctx);
Analyzovaný XML je interně ověřen podle omezení datových vazeb.
XML REST API
Data aplikace lze odesílat a přijímat do / ze služby REST XML. Vazba dat XML poskytuje volání REST XML API. Například vzhledem k datové vazbě XML ns__employee_record předchozí části se automaticky generují následující operace GET, PUT a POST:
int soap_GET_ns__employee_record(struktur mýdlo*, konst char *URL, ns__employee_record*);int soap_PUT_ns__employee_record(struktur mýdlo*, konst char *URL, konst ns__employee_record*);int soap_POST_send_ns__employee_record(struktur mýdlo*, konst char *URL, konst ns__employee_record*);int soap_POST_recv_ns__employee_record(struktur mýdlo*, ns__employee_record*);
Funkce POST by měly být volány společně, nejprve POST_send k přenosu dat XML na adresu URL koncového bodu, následovaný POST_recv pro přijetí dat odezvy (může být jiného typu).
Přijatý XML je interně ověřen podle omezení datových vazeb.
Funkce
- Datová vazba XML pro C a C ++ na základě automatické programování s generováním zdrojového kódu
- Přizpůsobitelné automatické generování zdrojového kódu klient / server v ANSI C a ISO C ++
- Integrovaná vysokorychlostní, specifická pro schéma Analýza roztažení XML s Ověření XML
- Jazyk popisu webových služeb (WSDL) 1.1 a 2.0
- webové služby MÝDLO 1.1 a 1.2
- Streamování Mechanismus optimalizace přenosu zpráv (MTOM) a přílohy DIME / MIME
- Převod reprezentačního stavu (REST) HTTP (S) 1.0 / 1.1
- Ověřeno Základní profil WS-I Kompatibilní s 1.0a, 1.1 a 1.2
- Ověřeno Vzory schématu W3C pro datovou vazbu, plné pokrytí testovacím vzorem
- XML-RPC pro C a C ++
- JSON pro C a C ++
- RSS 0.91, 0.92, 2.0
- WS-Security
- WS-politika 1,2, 1,5 a WS-SecurityPolicy 1.2
- WS-adresování 2003/03, 2004/03, 2005/03
- WS-ReliableMessaging 1.0 a 1.1
- WS-Discovery 1.0/1.1
- SOAP-over-UDP
- Univerzální vyhledávání a integrace popisu (UDDI) v2 API
- HTTP a základní ověřování, ověřování NTLM, ověřování proxy
- IPv4 a IPv6 s SSL / TLS s mezipamětí relace SSL (na základě OpenSSL nebo GNUTLS )
- XML komprese s gzip
- Moduly Apache 1.xa 2.0, IIS ISAPI a WinInet moduly, CGI a FastCGI
- Podpora samostatného webového serveru (vícevláknové, sdružování)
- Integrovaná správa paměti s uvolněním a detekcí úniku
- Architektura s doplňky pro další funkce
- Podpora internacionalizace / lokalizace (UTF8, UCS4, MB kódování atd.)
- Platforma neutrální, podporuje malá zařízení (Symbian, VxWorks, Android, iPhone)
Reference
- ^ A b van Engelen, Robert (2008). "Rámec pro výpočet orientovaný na služby s komponentami webových služeb C a C ++". Transakce ACM na internetové technologii. 8 (3): 106–115. doi:10.1145/1361186.1361188.
- ^ A b van Engelen, Robert; Gallivan, Kyle (2002). Sada nástrojů gSOAP pro webové služby a počítačové sítě typu peer-to-peer. IEEE International Symposium on Cluster Computing and the Grid. str. 128–135.
- ^ Head, Michael; Govinderaju, Madhu; Slominski, Aleksander; Liu, Pu; Abu-Ghazaleh, Nayef; van Engelen, Robert; Chiu, Kenneth (2005). Benchmarking procesorů XML pro aplikace v Grid Web Services. Superpočítač IEEE / ACM (SC).
- ^ Head, Michael; Govinderaju, Madhu; van Engelen, Robert; Zhang, Wei (2006). Benchmarking procesorů XML pro aplikace v Grid Web Services. Superpočítač IEEE / ACM (SC).
- ^ van Engelen, Robert; Govindaraju, Madhu; Zhang, Wei (2006). Zkoumání vzdálené koherence objektů ve webových službách XML. Mezinárodní konference o webových službách (ICWS). 249–256.
- ^ van Engelen, Robert (2003). Odeslání obálky SOAP s webovými službami pro vědecké výpočty. Konference o webových službách (ICWS). str. 346–354.
- ^ Robert, van Engelen; Zhang, Wei (2008). Přehled a vyhodnocení optimalizace výkonu zabezpečení webových služeb. Mezinárodní konference IEEE o webových službách (ICWS). s. 137–144.
- ^ Aloisio, Giovanni; Cafaro, Massimo; Epicoco, Italo; Lezzi, Daniele; van Engelen, Robert (2005). Doplněk GSI pro gSOAP: Vylepšené zabezpečení, výkon a spolehlivost. Mezinárodní konference o informačních technologiích (ITCC). 304–309.
- ^ Cafaro, Massimo; Lezzi, Daniele; Fiore, Sandro; Aloisio, Giovanni; van Engelen, Robert (2007). Plug-in GSI pro gSOAP: budování interoperabilních zabezpečených gridových služeb napříč mřížkami. International Conference on Parallel Processing and Applied Mathematics (PPAM) 2007, workshop on Models, Algorithms and Methodologies for Grid-enabled Computing Environment (MAMGCE), Springer Verlag LNCS Volume 4967. pp. 894–901.
- ^ Vyzyvatel, David; Yoder, Kent; Catherman, Ryan; Safford, David; Van Doorn, Leendert (2007). Praktický průvodce důvěryhodnými počítači. Pearson Education.