Saturday, October 15, 2016

Cxf Inhoud - Transfer-Encoding Binêre Opsies

Hantering binêre data met Axis2 (MTOM / SWA) Inhoud Inleiding Ten spyte van die buigsaamheid, interoperabiliteit en globale aanvaarding van XML, daar is tye wanneer serializeren data in XML maak nie sin nie. Web dienste gebruikers dalk wil binêre aanhegsels van verskeie vorme soos beelde, tekeninge, XML dokumente, ens stuur saam met 'n SOAP boodskap. Sulke data is dikwels in 'n bepaalde binêre formaat. Tradisioneel, het twee tegnieke gebruik in die hantering van ondeursigtig data in XML stuur binêre data deur waarde is behaal deur die inbedding ondeursigtig data (natuurlik na een of ander vorm van kodering) as 'n element of kenmerk inhoud van die XML-komponent van data. Die grootste voordeel van hierdie tegniek is dat dit gee aansoeke die vermoë om data, wat slegs gebaseer is op die XML komponent van die data te verwerk en te beskryf. XML ondersteun ondeursigtig data as inhoud deur middel van die gebruik van óf base64 of heksadesimaal teks enkodering. Beide tegnieke opblaas die grootte van die data. Vir UTF-8 onderliggende teks enkodering, base64 verhoog die grootte van die binêre data met 'n faktor van 1.33x van die oorspronklike grootte, terwyl heksadesimale enkodering brei data met 'n faktor van 2 x. Bogenoemde faktore sal verdubbel as UTF-16 teksenkodering gebruik. Ook van belang is die oorhoofse in die verwerking koste (beide werklike en vermeende) vir hierdie formate, veral wanneer dekodering terug in rou binêre. Stuur binêre data met verwysing word bereik deur te heg suiwer binêre data as eksterne ongeveer pars algemene entiteite buite die XML-dokument en dan inbedding verwysing URI tot ondernemings as elemente of kenmerk waardes. Dit voorkom dat die onnodige blaas van data en vermorsing van verwerking krag. Die primêre struikelblok vir die gebruik van hierdie ongeveer pars entiteite is hul beduidende afhanklikheid van DTD, wat modulariteit belemmer sowel as die gebruik van XML name spaces. Daar was 'n paar spesifikasies in die web dienste wêreld bekend gestel om te gaan met hierdie binêre probleem beslaglegging deur die quotby referencequot tegniek. SOAP met aanhangsels is een so 'n voorbeeld. Sedert SOAP verbied tipe dokument verklarings (DTD) in boodskappe, dit lei tot die probleem van nie verteenwoordig data as deel van die boodskap infoset, dus die skep van twee data modelle. Hierdie scenario is soos die stuur van aanhangsels met 'n e-posboodskap. Selfs al is die aanhegsels verband hou met die boodskap inhoud het hulle is nie in die boodskap. Dit veroorsaak dat die tegnologie wat verwerk en beskryf die data wat gebaseer is op die XML komponent van die data te wanfunksioneer. Een voorbeeld is WS-Security. Waar kom MTOM Kom In MTOM (SOAP Boodskap Transmissie Optimization Meganisme) is nog 'n spesifikasie wat fokus op die oplossing van die quotAttachmentsquot probleem. MTOM probeer om die voordele van die bogenoemde twee tegnieke benut deur te probeer om die twee tegnieke om saam te smelt. MTOM is eintlik 'n quotby referencequot metode. Die draad formaat van 'n MTOM new boodskap is dieselfde as die SOAP met aanhangsels boodskap, wat dit ook backwards compatible met SWA eindpunte maak. Die mees noemenswaardige funksie van MTOM is die gebruik van die XOP: Sluit element, wat gedefinieer word in die XML Binary Geoptimaliseerd Packaging (XOP) spesifikasie om die binêre aanhegsels (eksterne ongeveer pars algemene entiteite) van die boodskap verwys. Met die gebruik van hierdie eksklusiewe element, die verbonde binêre inhoud word logies inline (volgens waarde) met die SOAP-dokument, hoewel dit eintlik apart aangeheg is. Dit paart die twee ryke deur wat dit moontlik maak om te werk net met een datamodel. Dit laat die aansoeke te verwerk en te beskryf deur net te kyk na die XML deel, maak die afhanklikheid van DTD uitgedien. Op 'n ligter noot, het MTOM die verwysing meganisme van SWA gestandaardiseer. Die volgende is 'n uittreksel uit die XOP spesifikasie. Op die konseptuele vlak, kan hierdie binêre data beskou word as synde base64-ingebou in die XML-dokument. Aangesien hierdie konseptuele vorm nodig mag wees tydens 'n verwerking van die XML-dokument (bv vir die ondertekening van die XML-dokument), is dit nodig om 'n een-tot-een ooreenkoms tussen XML Info Sets en XOP pakkette. Daarom is die konseptuele voorstelling van so 'n binêre data is asof dit base64-geënkodeerde, met behulp van die kanonieke leksikale vorm van die XML Skema base64Binary data type (sien XML Skema Deel 2: data tipes Tweede uitgawe 3.2.16 base64Binary). In die teenoorgestelde rigting, XOP in staat is om die optimalisering van net-base64 geënkodeerde Infoset data wat in die kanonieke leksikale vorm. Apache Axis2 ondersteun base64. SOAP met aanhangsels en MTOM (SOAP Boodskap Transmissie Optimization Meganisme). MTOM met Axis2 Programmering Model aksioma is (en dalk die eerste wees) Object Model wat die vermoë het om binêre data te hou het. Dit het hierdie vermoë as OMText kan rou binêre inhoud in die vorm van javax. activation. DataHandler hou. OMText is gekies vir hierdie doel met twee redes. Een daarvan is dat XOP (MTOM) in staat is om die optimalisering van net-base64 geënkodeerde Infoset data wat in die kanonieke leksikale vorm van XML Skema base64Binary data type. Ander een is om die infoset bewaar in beide die sender en ontvanger. (Om die binêre inhoud in dieselfde soort voorwerp, ongeag of dit is geskik of nie te stoor). MTOM toelaat om selektief te enkodeer gedeeltes van die boodskap, wat ons toelaat om base64encoded data sowel as ekstern aangeheg rou binêre data verwys deur die quotXOPquot element (new inhoud) in 'n SOAP boodskap gestuur word te stuur. Jy kan spesifiseer of 'n OMText knoop wat rou binêre data of base64encoded binêre data bevat gekwalifiseer is om optimale ten tyde van die konstruksie van die node of later. Vir optimale doeltreffendheid van MTOM, is 'n gebruiker aangeraai om kleiner binêre aanhegsels behulp base64encoding (nie-new) en groter aanhegsels as new inhoud te stuur. Ook, kan 'n gebruiker 'n optimizable binêre inhoud knoop met behulp van 'n base64 geënkodeerde string, wat geënkodeerde binêre inhoud bevat, gegee met die MIME-tipe van die werklike binêre voorstelling te skep. Axis2 gebruik javax. activation. DataHandler om die binêre data te hanteer. Al die new binêre inhoud nodes sal serialized as Base64 Strings as quotMTOM nie enabledquot. Jy kan ook binêre inhoud knope, wat nie sal geoptimaliseer word by elk geval. Hulle sal serialized en gestuur as Base64 Strings. Enabling MTOM Optimization op die kliënt kant in die huidige opsies, stel die eiendom quotenableMTOMquot te bewaarheid toe die stuur van boodskappe. Wanneer hierdie eiendom gestel is, enige seep koevert, ongeag of dit bevat optimizable inhoud of nie, sal serialized as MTOM new MIME boodskap. Axis2 serializes al binêre inhoud knope as Base64 gekodeerde snare ongeag of hulle daarvoor gekwalifiseer word new of nie indien die eiendom quotenableMTOMquot is ingestel op Vals. As die koevert bevat 'n element inligting items van die naam xop: Sluit (sien XML-binêre Geoptimaliseerd Packaging 3. XOP Info Sets Stel). Die gebruiker het nie nodig om enigiets te gee sodat Axis2 om MTOM new boodskappe ontvang. Axis2 sal outomaties identifiseer en de-afleveringen dienooreenkomstig, soos en wanneer 'n MTOM boodskap ontvang. Enabling MTOM Optimization op die bediener kant van die Axis 2 bediener identifiseer outomaties inkomende MTOM new boodskappe wat gebaseer is op die inhoud-tipe en de-serializes hulle dienooreenkomstig. Die gebruiker kan enableMTOM op die bediener kant vir uitgaande boodskappe, om globaal enableMTOM vir alle dienste, kan gebruikers die parameter quotenableMTOMquot gestel is in die Axis2.xml. Wanneer dit gestel is, sal alle uitgaande boodskappe word serialized en gestuur as MTOM new MIME boodskappe. As dit nie gestel, sal al die binêre data in die binêre inhoud knope word serialized as Base64 gekodeerde snare. Hierdie konfigurasie kan oorheers in services. xml op grond van per diens en per operasie. Jy moet die bediener weer te begin nadat die opstel van hierdie parameter. Toegang Ontvang binêre data (Voorbeeld Kode) Het Content-Transfer-Encoding waardes word nie ondersteun nie vir multiparts In die dokumentasie JAX-RS Ive lees die volgende: Wanneer die hantering van komplekse multipart / form-data voorleggings (soos dié wat lêers) MultipartBody (en Attachment) moet direk gebruik word. In eenvoudiger gevalle, wanneer elke vorm deel kan word gevang deur String, sal die volgende kode volstaan: Pos verbruik (multipart / form-data) public void addForm1 (FormParam (naam) String titel, FormParam (OD) Lang OD) gooi uitsondering nie. Dit is óf 'n fout in CXF of 'n misleidende dokumentasie (ten minste vir die stadige-gesind nie-moedertaal soos ek). Die groot verskil tussen FormParam en Multi is, dat FormParam verwag altyd URL geënkodeerde data. So stuur AB met behulp van Multi in bv 8-bit kodering of binêre encoding lewer A B om FormData geannoteerde Strings maar AB om geannoteerde Strings multipart. Aktiwiteit Andreas, ek glo dit is eintlik die feit dat eenvoudige (string) multipart / form-datawaardes nie ontsyfer deur verstek wanneer Multi gebruik wat veroorsaak dat jy die fout kwessie oop te maak. Ive opgedateer die kode so by verstek, gegee AB, sal jy 'n B, maar die motor dekodering (dieselfde as by die gebruik van FormParam) kan wees afgeskakel deur die byvoeging van 'n geënkodeerde body. Let daarop dat dit onwaarskynlik FormParams sal ooit gebruik word in die toekoms JAXRS specs vir die hantering van multiparts, therere in dat 'n mens beperk kan 'n inhoud-tipe van die individu deel nie spesifiseer, ens Sergey Beryozkin het 'n opmerking - 16 / Mar / 10 14:07 Andreas, ek glo dit is eintlik die feit dat eenvoudige (string) multipart / form-datawaardes nie ontsyfer deur verstek wanneer multi gebruik wat veroorsaak dat jy die fout kwessie oop te maak. Ive opgedateer die kode so by verstek, gegee AB, sal jy 'n B, maar die motor dekodering (dieselfde as by die gebruik van FormParam) kan wees afgeskakel deur die byvoeging van 'n geënkodeerde body. Let daarop dat dit onwaarskynlik FormParams sal ooit gebruik word in die toekoms JAXRS specs vir die hantering van multiparts, therere beperk in die sin dat 'n mens kan nie spesifiseer 'n inhoud-tipe van die individu deel, ens Ek verstaan ​​dat url-enkodering is die verstek vir FormParam, want daar is eintlik geen ander manier vir URL geënkodeerde-vorms om parameters te enkodeer. Dit maak dus sin om jou te laat FormParam ontsyfer die data op hierdie manier. Maar multipart data kan word geïnkripteer op verskeie maniere. Die kodering van die multi deel kan lees en die data kan outomaties die regte manier word gedekodeer. Wat ek sou verwag van CXF is, dat dit dekodeer die data op die regte manier en dan spuit dit net in my parameter sonder dat ek 'n enkodering spesifiseer. Eintlik het ek nie wil die enkodering spesifiseer, want ek dont care hoe die data vervoer vir my. Ek wil dat my funksie werk vir multipart data wat geïnkripteer as 8bit string asook aangehaal-afdruk (solank dit maak sin), sodat die oproeper van die funksie net nodig om te weet dat hy moet multipart vorm - gebruik data. Is dit moontlik Andreas Sahlbach het 'n opmerking - 16 / Mar / 10 16:42 Ek verstaan ​​dat url-enkodering is die verstek vir FormParam, want daar is eintlik geen ander manier vir URL geënkodeerde-vorms om parameters te enkodeer. Dit maak dus sin om jou te laat FormParam ontsyfer die data op hierdie manier. Maar multipart data kan word geïnkripteer op verskeie maniere. Die kodering van die multi deel kan lees en die data kan outomaties die regte manier word gedekodeer. Wat ek sou verwag van CXF is, dat dit dekodeer die data op die regte manier en dan spuit dit net in my parameter sonder dat ek 'n enkodering spesifiseer. Eintlik het ek nie wil die enkodering spesifiseer, want ek dont care hoe die data vervoer vir my. Ek wil dat my funksie werk vir multipart data wat geïnkripteer as 8bit string asook aangehaal-afdruk (solank dit maak sin), sodat die oproeper van die funksie net nodig om te weet dat hy moet multipart vorm - gebruik data. Is dit possibleFollowing inhoud vasgelê op TcpMon: Versoek deur SoapUI Pro 3.0.2: Pos / TF6 / dienste / xdsrepositoryb HTTP / 1.1 Aanvaar-Encoding: gzip, blaas Content-Type: multipart / verwante typeapplication / xopxml begin begin-infoapplication / soapxml optrede grens ---- Part1728349551.1260534830078 MIME-weergawe: 1.0 User-agent: Jakarta Commons-HttpClient / 3.1 Host: ihexds. nist. gov:9080 inhoud-Lengte: 13.318 ------ Part1728349551.1260534830078 inhoud - tipe: application / xopxml charsetUTF-8 typeapplication / soapxml actionProvideAndRegisterDocumentSetRequest Content-Transfer-Encoding: 8bit inhoud-ID: ------ Part1728349551.1260534830078 Content-Type: text / plain charsetus-ASCII Content-Transfer-Encoding: 7bit inhoud-ID: ltgt Dit is depeches dokument. Versoek deur xdstest instrument: Pos / TF6 / dienste / xdsrepositoryb HTTP / 1.1 Content-Type: multipart / verwante boundaryMIMEBoundaryurnuuid613A2BD2D99F1E6B5912 60534073176 typeapplication / xopxml startlt0.urn: UUID: 613A2BD2D99F1E6B591260534073177 apache. orggt begin-infoapplication / soapxml actionurn: IHE: ITI: 2007 rovideAndRegisterDocumentSet-b User-agent: Axis2 Host: ihexds. nist. gov:9080 Transfer-Encoding: chunked 20f1 --MIMEBoundaryurnuuid613A2BD2D99F1E6B59126053407 3176 Content-Type: application / xopxml charsetUTF-8 typeapplication / soapxml Content-Transfer-Encoding: binêre inhoud-ID : lt0.urn: UUID: 613A2BD2D99F1E6B591260534073177apache. orggt --MIMEBoundaryurnuuid613A2BD2D99F1E6B59126053407 3176 Content-Type: text / plain Content-Transfer-Encoding: binêre inhoud-ID: LT1. urn: UUID: 613A2BD2D99F1E6B591260534073366apache. or g GT Dit is my dokument. Van waar kan ek Content-Transfer-Encoding as binêre Op die NIST openbare register, kan jy die teks dokument wat as 'n aanhangsel gestuur te sien: Ek het ook probeer om Encode Aanhegsels as ware onder TestRequest Properties. Maar dit is nie óf werk. Dankie vir die helpConvert Byte Array om Base64Binary In antwoord op hierdie pos deur robbywillz Op Dinsdag 16 Augustus, 2011 11:28:43 robbywillz geskryf: GT Hi, GT GT Thanks a lot vir die verskaffing van verskillende maniere om aktiveer of deaktivering die MTOM. GT ek kon in staat om 'n geïntegreerde Base64Binary deur die aanskakel van die MTOM en GT verhoging van die MTOM drumpel (1024) het. GT Ek verstaan ​​dat MTOM sal in staat gestel word vir beslaglegging wanneer drumpel is GT gekruis, selfs deur MTOM is afgeskakel. Korrigeer my as im verkeerd. GT GT Is daar enige manier deur die lente kliënt verstellings te stel Ek dont GT wil maak hierdie veranderinge in WSDL of in kode soos my kode kan hardloop op Websphere GT v6.1 met web dienste funksie pak geïnstalleer. As dit die geval is, sou ek eintlik stel om dit te doen in die kode, maar met die standaard JAX-WS APIs. Op dié manier, moet dit dieselfde optree vir enige van die verskillende JAX-WS verskaffers. Wanneer jy jou kliënt te skep, te slaag in 'n javax. xml. ws. soap. MTOMFeature voorwerp wat ingestel MTOM om te draai af of stel die drumpel. Al die createXXXPort metodes het 'n opsionele stel van die funksies wat geslaag kan by die tyd te skep. Gebruik die metodes met die MTOMFeature en dit moet werk vir WebSphere sowel. GT GT Ive probeer met volgende opset en ek genoem lêer as cxf. xml, dit is GT opgetel deur cxf maar geen uitwerking op die opset. Dit vat nog GT XOP. Help my asseblief om GT GT ltxml versionquot1.0quot encodingquotUTF-8quotgt GT ltbeans xmlnsquotwww. springframework. org/schema/beans quot GT xmlns: jaxwsquotcxf. apache. org/jaxws quot GT xmlns: xsiquotwww. w3.org/2001/XMLSchema-instance quot GT XSi: schemaLocationquot GT www. springframework. org/schema/beans GT www. springframework. org/schema/beans/spring-beans. xsd GT cxf. apache. org/jaxws GT cxf. apache. org/schemas/jaxws. xsd quotgt GT GT GT ltjaxws: kliënt idquotne3sRegistrationquot GT serviceClassquotcom. nsn. oss. ne3s. ws. gen. NE3SRegistrationPortquot GT addressquot / NE3SRegistrationServicequotgt GT ltjaxws: propertiesgt GT ltentry keyquotmtom-enabledquot valuequotfalsequot / GT GT ltentry keyquotmtom-thresholdquot valuequot1024quot / GT GT Dit / jaxws : propertiesgt GT Dit / jaxws: clientgt GT Dit / beansgt GT op Woensdag, 24 Augustus 2011 by 02:09, Daniel Kulp via CXF lthidden e GT het geskryf: op Dinsdag 16 Augustus, 2011 11:28:43 robbywillz geskryf : GT Hi, GT GT Thanks a lot vir die verskaffing van verskillende maniere om aktiveer of deaktivering die MTOM. GT ek kon in staat om 'n geïntegreerde Base64Binary deur die aanskakel van die MTOM en GT verhoging van die MTOM drumpel (1024) het. GT Ek verstaan ​​dat MTOM sal in staat gestel word vir beslaglegging wanneer drumpel is GT gekruis, selfs deur MTOM is afgeskakel. Korrigeer my as i39m verkeerd. GT GT Is daar enige manier deur die lente kliënt verstellings te stel Ek don39t GT wil maak hierdie veranderinge in WSDL of in kode soos my kode kan hardloop op Websphere GT v6.1 met web dienste funksie pak geïnstalleer. As that39s die geval, sou ek eintlik stel om dit te doen in die kode, maar met die standaard JAX-WS API39s. Op dié manier, moet dit dieselfde optree vir enige van die verskillende JAX-WS verskaffers. Wanneer jy jou kliënt te skep, te slaag in 'n javax. xml. ws. soap. MTOMFeature voorwerp wat ingestel MTOM om te draai af of stel die drumpel. Al die createXXXPort metodes het 'n opsionele stel van die funksies wat geslaag kan by die tyd te skep. Gebruik die metodes met die MTOMFeature en dit moet werk vir WebSphere sowel. GT I39ve probeer met volgende opset en ek genoem lêer as cxf. xml, dit is GT cxf. apache. org/schemas/jaxws. xsd quotgt GT GT GT ltjaxws: kliënt idquotne3sRegistrationquot GT serviceClassquotcom. nsn. oss. ne3s. ws. gen. NE3SRegistrationPortquot GT addressquot / NE3SRegistrationServicequotgt GT ltjaxws: propertiesgt GT ltentry keyquotmtom-enabledquot valuequotfalsequot / GT GT ltentry keyquotmtom-thresholdquot valuequot1024quot / GT GT dit / jaxws: propertiesgt GT dit / jaxws: clientgt GT dit / beansgt GT As jy reageer op hierdie e-pos, jou boodskap sal bygevoeg word om die onderstaande bespreking: Stuur Aanhegsels met seep seep aansoeke dikwels te doen met meer as net eenvoudig boodskappe. Die loonvrag vir 'n SOAP boodskap kan dikwels sluit 'n woordverwerking of PDF dokument, beeld, of ander binêre lêer. Hierdie artikel verduidelik hoe om die boodskap Transmissie Optimization Meganisme (MTOM) gebruik om hierdie boodskappe te stuur en te ontvang. Laai hierdie gratis gids Free Handboek: Java App Ontwikkeling in die ingenieurs Wolk sagteware nader ontwikkeling en onderneming ontwerp in 'n heel nuwe manier, danksy die wolk. In hierdie deskundige handboek, te verken hoe jou maats is die gebruik van die wolk tot inligting lewensiklus bestuur vaartbelyn, geld te spaar, en maak die produksie en sekuriteit meer doeltreffend te maak. Deur jou e-posadres, stem jy in om e-pos met betrekking tot relevante onderwerp aanbiedings van TechTarget en sy vennote te ontvang. Jy kan jou toestemming te eniger tyd intrek. Kontak TechTarget by 275 Grove Street, Newton, MA. Jy verklaar ook dat jou persoonlike inligting kan oorgedra word en verwerk in die Verenigde State van Amerika, en dat jy het gelees en aanvaar die Terme van Gebruik en die privaatheidsbeleid. Voorvereistes Hierdie artikel maak gebruik van die WSO2 Web Services Aansoek Server (WSAS.) Dit word aanbeveel dat jy dit aflaai en installeer WSO2 WSAS 2.0. Die artikel maak gebruik van die Servlet uitgawe op Apache Tomcat geïnstalleer. Enige aansoek bediener gebruik kan word met die Servlet weergawe, volg net die instruksies vir die installasie ingesluit by WSO2 WSAS. Jy hoef nie 'n aansoek bediener glad gebruik, soos WSO2 WSAS werk baie goed in 'n selfstandige formaat. WSO2 WSAS vereis Java 1.4 of 1.5, maar daar is geen ander voorvereistes vir dit. Natuurlik web dienste en seep veral gebruik word, so vertroud met wat jou sal help. Wanneer XML is nie genoeg nie: binêre data Daar is eindelose maniere om data oor die netwerk stuur. Daar is talle protokolle en data formate. Standaardisering om seep weg 'n groot deel van die raaiwerk geneem in die stuur van data tussen stelsels. SOAP standaardiseer die protokol (HTTP) en die data-formaat (XML.) Een van die belangrikste punte van kritiek seep is sy gebruik van XML. XML is teks gebaseer is. Dit maak nie net vir groot boodskappe, maar maak dit in stryd is met binêre data. Byvoorbeeld, kan sê jou boodskap moet 'n beeld te sluit. Dit hou 'n probleem wanneer jou boodskap formaat is teks. Die kombinasie van binêre data met seep Ok, so jy hoef te binêre data tussen programme te stuur. Youd graag seep, maar sy beperk tot teks. So moet jy net opgee op SOAP almal saam Natuurlik nie, daar is te veel voordele om seep. Jy 'n manier om dit te kombineer met binêre data hoef net. Jy sien webblaaie doen dit al die tyd wat dit kan nie so moeilik wees, reg Lets paar oplossings te verken om hierdie probleem. Een manier waarop jy kan probeer is om net te stort die binêre in 'n teks knoop. Dit mag dalk lyk iets soos Listing 1. Lys 1. XML met binêre data: Eerste Probeer Onthou dat karakters is ook grepe, net soos binêre data. 'N XML parser, of sy 'n DOM, SAX, of Stax ontleder, moet die karakter stel enkodering gebruik van die dokument om al die grepe in die dokument as karakters te vertolk. So ons binêre data kan maklik het karakters wat ooreenstem met voorbehou XML karakters, soos LT of GT of amp. Enige sodanige byte volgorde teks knoop bo sal veroorsaak dat die ontleder aan die ander kant te breek. So hierdie benadering sal nie werk nie. Maar wag, miskien Theres 'n manier om hierdie benadering te los. Wat oor die gebruik van 'n CDATA blok wat sal die ontleder vertel die karakters in die blok te ignoreer. Dit verander benadering kan lyk Listing 2. Lys 2. XML met Binary: Gebruik CDATA Nou as ons grepe wat jou sal vertolk word as 'n GT (byvoorbeeld) hulle sal geïgnoreer word. Maar die ontleder het om uit te vind waar die artikel CDATA eindig. Dit word gedoen deur op soek na die byte volgorde ooreenstem met die karakters GT. Dit mag dalk lyk onwaarskynlik, maar ons binêre data kan net so 'n greep volgorde in die middel van dit. Dit sal veroorsaak dat enige ontleder om te dink dat die artikel CDATA geëindig het en die daaropvolgende karakters sou vertolk net soos in ons eerste poging. So dis nie van plan om óf werk. Ons moet 'n manier om seker te maak die grepe Arent vertolk nie. Base 64 enkodering: Werke maar opgeblase Daar is 'n oplossing vir hierdie variant van ons probleem. Een algemene manier om dit te doen is om Base 64 enkodering gebruik. Hierdie tegniek is al (as 'n standaard) sedert die 80s. Dit behels die gebruik van 'n 64 karakter alfabet bestaan ​​uit die klein letters, A-Z, die hoofletters karakters, A-Z, die nommers 0-9 en die en / simbole. Elke byte kry gekarteer om hierdie karakters, so Theres geen manier vir enige byte te kry verkeerd verstaan ​​as iets wat 'n XML parser sou verstik. So is daar, probleem opgelos, reg Ja, maar dit is 'n eerder ondoeltreffende oplossing. Base 64 geïnkripteer binêre winde up wat gemiddeld 37 groter (aantal grepe) as die rou, nie-geënkodeerde binêre data. Daarbenewens het die ontleder aan die ander kant moet weet oor die enkodering sodat dit die loonvrag kan ontsyfer. 'N Mens kan dink dat as Basis 64 enkodering was deel van die SOAP standaard, dan sou daar 'n paar standaard manier om dit te SOAP boodskap verwerkers aan te dui. Dit is nie die geval is, al is. Dit kan 'n oplossing wees, maar dit is beide ondoeltreffende en nie-standaard. Ons moet iets wat beide doeltreffend en gestandaardiseerde. SOAP met aanhangsels: Werke maar gebrekkig ontwerp Een oplossing vir die probleem is om te gebruik wat bekend staan ​​as SOAP met aanhangsels. Die idee hier is om net die binêre data buite die SOAP boodskap heeltemal. Figuur 1 bied 'n mooi visualisering van hierdie. Figuur 1. SOAP met aanhangsels Dit is baie soortgelyk aan hoe binêre lêers kan aangeheg word aan die e-pos. Die SOAP boodskap bevat 'n verwysing na die binêre lêer wat die boodskap is aangeheg. Dit is beide meer doeltreffende en gestandaardiseerde, maar dit het 'n paar foute in die ontwerp. Die binêre beslaglegging is nie deel van die SOAP boodskap aan almal. Sy soortgelyk in 'n baie maniere om net verby 'n URI vir die binêre data en laat dit tot die boodskap verwerker om die werklike binêre data te herwin. Dit bied 'n paar werklike probleme vir dinge soos WS-Security. Maar dit is wat gebruik word vir 'n rukkie, totdat 'n beter oplossing voorgestel: MTOM. MTOM: beste van beide wêrelde MTOM staan ​​vir SOAP Boodskap Transmissie Optimization Meganisme. Dit kombineer die doeltreffendheid van SOAP met aanhangsels, maar dit doen dit sonder om die binêre data breek buite die SOAP boodskap. Hoe kan dit wees Die sleutel is 'n tegnologie genaamd XML-binêre Geoptimaliseerd verpakking of XOP. XOP laat binêre data wat ingesluit moet word as deel van die XML Infoset. Om die waarheid te raak van die XML Infoset n superstel van die tradisionele Infoset bekend as die XOP Infoset. Dit maak voorsiening vir die binêre data buite die XML-dokument gestoor word, net soos in SOAP met aanhangsels. Dit maak gebruik van 'n spesiale XOP: sluit element om die verwerker te vertel om die inhoud te vervang met die gekla binêre data, dus die logika van diskrete stoor en herwinning van die binêre data vat. Dit logika word wat inherent is aan die XML parser, en laat die seep ontleder by die binêre data te behandel as deel van die XML-dokument, met geen spesiale herwinning logika. Net so is dit moontlik maak vir 'n SOAP bediener na 'n SOAP boodskap in 'n eenvormige manier te skep, geen spesiale logika vir die oortreding van dat binêre data van die SOAP boodskap. MTOM in WSO2 WSAS Weve het baie gepraat oor die behoefte aan MTOM en hoe dit moet werk in teorie. Dit nie die geval nie vir ons 'n baie goeie sonder 'n werklike implementering. Gelukkig Theres 'n maklike manier om 'n groot MTOM implementering te kry, net gebruik WSO2 WSAS. WSO2 WSAS is gebou op die top van beproefde en ware tegnologie, insluitend Apache Axis2. Axis2 gee WSO2 WSAS sy MTOM implementering. Kom ons neem 'n blik op hoe om toegang tot die krag van WSAS / Axis2s MTOM implementering. Stuur 'n MTOM Boodskap van 'n Web Service die Axiom API MTOM ondersteuning op Axis2 bou voort op dieselfde klasse gebruik regdeur Axis2. Dit maak gebruik van Axis2s Object Model (OM). Axis2 ondersteun beide Base 64 enkodering en MTOM, en maak dit relatief maklik om te wissel tussen hulle. Hoekom Wel vir baie klein lêers, kan dit eintlik meer doeltreffend te Base 64 enkodering te gebruik. Om hierdie naatlose skakel tussen new en nie-optimale vervoer te bereik, Axis2 behandel binêre data as 'n XML-teks knoop. Die enigste verskil is dat jy nodig het om te slaag in 'n javax. activation. DataHandler vir toegang tot die data, soos in Listing 3. Lys 3. Voeg binêre data met die Axiom API In die voorbeeld in Voorbeeld 3, 'n javax. activation. FileDataSource word gebruik om die DataHandler voorsien met toegang tot die binêre data. Jy kan 'n klas wat die javax. activation. DataSource koppelvlak implemente te gebruik. Byvoorbeeld, wanneer jy met beelde, die org. apache. axis2.attachments. ImageDataSource gebruik kan word. Dit implemente die data bron koppelvlak en kan meer gerieflik wees wanneer daar met beelde. So, hoe doen Axis2, en dus WSO2 WSAS, weet om MTOM gebruik om die binêre data wat eintlik wat Axis2 sal doen by verstek te optimaliseer. Jy kan dit met die hand te omseil deur die byvoeging van net een lyn van kode, soos in Listing 4. Lys 4. afskakel MTOM Dit enkele reël van die kode Axis2 sal vertel nie optimaliseer, dit wil sê dit nie gebruik MTOM. So Axis2 sal gebruik Base 64 enkodering van die binêre data, en dit sal regtig 'n teks node wees. Andersins, sal MTOM skop in, en 'n XOP sluit sal gebruik word om die vervoer van die binêre data te optimaliseer binne die SOAP boodskap. Enabling MTOM op die bediener Natuurlik al hierdie wonderlike, outomaties new gedrag kry, hoef jy MTOM moontlik te maak. Jy kan dit baie maklik doen deur jou axis2.xml lêer, soos in Listing 5. Lys 5. Enabling MTOM in axis. xml Dit kan nie kry nie pynloos as dit, reg Dit is 'n globale omgewing, en is die verstek op WSO2 WSAS. Jy kan eintlik in staat stel MTOM op vier verskillende vlakke: globale, diensgroep, diens, en bedryf. Jy gebruik dieselfde semantiek vir elke vlak. Jy kan die Management Console gebruik om MTOM bestuur by elk van hierdie vlakke. Vir voorbeeld hiervan 'n blik op Figuur 2. Figuur 2. Besturende MTOM by die Diensgroep Vlak Hier sien ons MTOM op die vlak Service Group bestuur word. Elke diens in die groep kan ook individueel bestuur, soos getoon in Figuur 3. Figuur 3. Besturende MTOM by die Service Level Natuurlik elke diens een of meer bewerkings kan hê. WSAS kan jy bestuur MTOM op daardie vlak te, soos getoon in Figuur 4. Let daarop dat op elke vlak, MTOM het drie moontlike waardes: ware, valse, en opsioneel. Indien die eiendom is waar, dan sal die diens van 'n optimale boodskap te stuur wanneer dit nodig is, dit wil sê wanneer binêre data is ingesluit. As die waarde vals gestel, dan optimalisering sal nooit gebruik word, en Base 64 enkodering gebruik sal word vir enige binêre data. As dit is ingestel op opsioneel, dan WSAS sal optimaliseer as en slegs as die aanvraag ingekom het new. Die tipe versoek, sal aandui tot WSAS as dit MTOM moet gebruik of nie. Hoekom moet ons hierdie soort van buigsaamheid Soos vroeër genoem het, is dit dikwels voordelig om Base 64 enkodering gebruik op klein lêers. So kan jy besluit dat sekere bedrywighede MTOM moet gebruik en ander moet nie. Of jy kan dit opsioneel op 'n operasie te maak, programmaties doen 'n tjek vir die grootte van die gestuur data, en kies dan die verstek MTOM ignoreer as die lêer is klein. Toe stuur julle MTOM. Kom ons neem 'n blik op hoe maklik WSAS maak dit 'n MTOM boodskap van 'n web diens kliënt stuur. Die skep van 'n SOAP kliënt wat MTOM boodskappe stuur 'n MTOM boodskap stuur van 'n kliënt is net so maklik soos 'n MTOM boodskap te stuur van 'n web diens. Axis2 bied verskeie gerieflike APIs. 'N Voorbeeld word in Listing 6. Lys 6. kliënt-kode vir die stuur van MTOM boodskap Soos jy kan sien in Listing 6, die belangrikste ding om te doen is om MTOM in staat te stel in opsies vir die web diens kliënt. Sodra jy dit doen, dan Axis2 sal enige binêre data wat jy stuur na die web diens gebruik te maak van MTOM outomaties optimaliseer. Weve gesien hoe om MTOM boodskappe stuur van 'n web diens en 'n web diens, kan nou kyk na hoe om te werk met data wat gestuur word deur MTOM. Hantering n MTOM Boodskap in 'n Web Service kan nou aanvaar jy 'n web diens wat binêre data aanvaar as deel van 'n SOAP boodskap van 'n kliënt. As jou web diens wat uitgevoer word op WSAS, nie nodig om iets spesiaal in staat wees om optimale binêre data te hanteer van jou kliënte te doen. Jou kliënte kan SOAP boodskappe wat MTOM of Base 64 enkodering gebruik te stuur. Sy al naatlose met WSAS. Notering 7 toon 'n voorbeeld van die ontvangs van new data. Lys 7. Web Service ontvangs Geoptimaliseerd SOAP Soos ons vroeër gesien het, die Axiom API behandel die binêre data as 'n teks knoop. Dit laat 'n enkele API vir die hantering van new en nie-new (Base 64 geïnkripteer) data. Jou toegang eenvoudig die DataHandler verbonde aan die teks node (wat die binêre data bevat) en gebruik dit om 'n InputStream verkry. Sodra jy die InputStream, kan jy al die grepe gelees en verwerk dit egter jy wil. WSAS maak dit maklik om SOAP boodskappe met new binêre data lading te hanteer. Kom ons neem 'n blik op hoe maklik dit is om te werk met MTOM op kliënte. Hantering n MTOM Boodskap in 'n kliënt Theres geen magic te hanteer 'n MTOM web diens reaksie. Weve al gesien hoe om die opstel van die versoek. In Figuur 8 sien jy hoe om te gaan met 'n antwoord wat binêre data new met MTOM bevat. Weereens die sleutel hier is die gebruik van die Axiom API. Dit laat ons die binêre data te hanteer as 'n teks knoop, en gebruik dan die DataHandler 'n InputStream om die data te kry. Weereens, as jy het die InputStream, kan jy die data te verwerk egter jy nodig het.


No comments:

Post a Comment