Friday 10 November 2017

Soapui innehålls transfer kodning binära alternativ


Jag har en oändlig slut på hur man lägger till en bilaga i min SOAP-förfrågan. Vi måste konsumera en tredje webbtjänst som är inbyggd i Java, vilket är den mest förvirrade sak jag någonsin har stött på. Alla andra webbtjänster som vi har använt, som krävs bilagor, har en metod eller egenskap för att lägga till bilagan. Enkel. Detta ger emellertid ingen sådan metod. Vi har en version av SOAP-meddelandet tillsammans, det är precis som vi vill ha XML, men det är MIME-delen av filen som vi inte kan lägga till. Det här är XML-delen som vi kan generera och skicka, men det är felaktigt eftersom vi behöver en MIME-del där som: Jag har scoured internet för svar men har blivit tomma. Det verkar inte finnas mycket dokumentation runt med hjälp av WSE för detta. Jag måste betona att WSE är ett krav på serverns sida, och det finns inget sätt att jag kan ändra tekniken för att lösa problemet. Finns det ett sätt att dessa MIME-sektioner kan läggas till EDIT: Jag måste lägga till att jag kan få ett fungerande XML-dokument som skickas via SoapUI med bilagor, men det verkar inte som att hitta en väg i vår kod. Jag har lagt till en bounty för att försöka få en lösning på detta problem. Om någon har några andra idéer, snälla låt mig veta. REDIGERA igen: Jag vet att det har varit en vecka sedan jag kunde kontrollera svaren här, men medan några ger en bra uppfattning var jag ska titta, ritar jag fortfarande ett tomt. Den fruktansvärda dokumentationen kring XopDocument och dess metoder är en stor klibbning. Om någon har några exempel på att använda SaveToXopPackage kan de tacka att det här börjar gråta, frågade dec 20 11 kl. 11:48. John, vad sägs om att komma till en lösning snarare än att gå runt och låtsas som om du vet allt. I detta scenario krävs för mig WSE IS. Utan det kommer våra förfrågningar att avslås. Jag kan inte berätta för leverantören av tredje part hur de ska kodas, jag kan försöka, men de har alltid varit det minst hjälpsamma företaget i världen att arbeta runt. Så medan WSE inte ska användas om du skapar din egen programvara, är det ett krav i detta fall. ndash anothershrubery Jan 5 12 på 10:49 Jag har lite att säga om det förutom att jag hoppas någon har berättat kejsaren är hans kläder föråldrade. Om du låtsas att använda WSE inte är ett alternativ, så lär du dig säkert hur du anpassar WCF för att göra vad du behöver, bara genom att använda stödd programvara. ndash John Saunders Jan 5 12 at 17:53 Jag tror att du kan ha ett par alternativ: 1) Använd MTOM. Detta verkar automatiskt vikla det utgående meddelandet i MIME-block. 2) Microsoft ger faktiskt stöd för att generera och läsa XOP med mime genom XopDocument-klassen, vilket är vad SoapEnvelope ärverger från. Jag tror emellertid att detta tillvägagångssätt kan kräva att du själv utför sändningen av meddelandet via en HttpWebRequest. Den här bloggen har ett exempel på hur man implementerar detta. Nackdelen är att det kräver mycket extra kod och konfiguration för att kunna fungera korrekt. Den ideala lösningen skulle vara att avlyssna koden som utför kuvertöverföringen, men jag har inte kunnat hitta den rätta platsen för detta i rörledningen. Jag är säker på att jag jobbar med exakt samma projekt som ni. Den tvålförfrågan är lite för bekant :-) Weve har fått det mesta av det genom att byta till WCF och i princip handkoda begäran objektet (skapa klasser som matchar tvålformatet och sedan använda xmlelement attribut för att dekorera det så att det Ser ut som deras tvålförfrågan. Filen själv förklaras som en Byte () på bilagan klass och också dekorerad med XML-elementet). Heres vad WCF-kontraktet och en del av datamodellen ser ut. Den faktiska datamodellen har en massa extraklasser (Application Area, Data Area, Job, etc) men det ger dig tillräckligt med en känsla av hur den är strukturerad. Den viktiga delen är filen som byte (). Här är det i Vb. Därefter har du din WCF-klient, det här är ungefär samma som alla WCF-klienter. Slutligen har du app. config. Heres den magiska eftersom det var att säga till WCF att använda Mtom för att skicka meddelandet. Detta kommer att ta Byte () och ta bort det i en separat MIME-sektion som ersätter den med en XOP: Inkludera. Observera att jag just nu skickar det via localhost så jag kan se begäran med tcpTrace. Du kan google den appen men det tar i princip upp begäran så att vi kan se hur det ser ut. Jag ställer in tcpTrace för att lyssna på port 84. Slutligen, heres själva uppmaningen till WCF-klienten att göra begäran. Och här är spåret vi fick genom tcpTrace. Den har den grundläggande strukturen rätt och lyckades dra binära data ur XML och placera den i en separat MIME-sektion. Som jag nämnde tidigare - vi har fortfarande några problem. Det finns några taggar som saknas från tvålhuvudet. men jag tycker väl att kunna räkna ut dem. Det verkliga problemet är att innehålls-id inte finns i ett format som vår partner kan acceptera - de förväntar sig något som lt1.a33c2d7e84634122705ebc71e53d95d4c2683d726ba54e14apache. org och formaterar dem som tempuri. org1634618782531246992. Detta orsakar att deras Web Service-hanterare kraschar, eftersom det inte vet hur man läser avspända innehålls-sidor i tvålmeddelandet. svarade jan 7 12 på 0:23 Bara märkte din redigering för detta nu. Ja det ser ut som exakt samma projekt Tyvärr är din lösning inte till jobbet i vårt fall eftersom vi är begränsade till att använda WSE och inte WCF. Tillit till VS 2005. Det är en smärta. Men det här är det resultat jag letar efter, men jag behöver ta reda på lösningen i WSE. (Men med ditt problem kan du inte ställa in innehålls-id till vad som helst du vill. Det fungerar inom SoapUI, när du anger innehålls-ID själv och inte litar på standardrepresentationen. Min e-postadress, inte en, finns i min profil om du vill prata vidare. ndash anothershrubery Jan 16 12 kl 12:58 Som du säger att du fick det att fungera genom SoapUI, skulle jag tro att du bara kan fråga SoapUI för den genererade XML som skickades så att du vet hur den ska se, då Ändra din kod för att efterlikna det. UPDATE: Efter din kommentar och läsa de andra svaren mer detaljerat: lösningen ser ut att jag bara skickar byte direkt med HttpWebRequest som i ktsioliss svar. I detalj: Skapa din SOAP XML (exemplet du gav ), koda detta till byte i UTF8 (1) Skapa en sträng med den ursprungliga mimeboundaryen (delen i din före XML), koda till byte i UTF8 (2) Skapa byte för den andra mimeboundaryen (delen efter XML). Så skapa strängen som innehåller --MIMEBOUNDARY etc. koda till UTF8 byte, och lägg till alla byte av din test. gif-fil (3) Lägg alla byte i ordning (2), (1) och (3) och skicka det över kabeln. Ska det här göra tricket Ok så jag fick det att acceptera data från filen i ltgwm: Filegt-elementet. Det här är utan att använda XOP, så förfrågan ser nu ut: När den passeras i SoapUI fungerar det perfekt, men i kod det ger ett svar, men det gör ett fel som säger att svaret inte är välformat XML. med ett inbyggt undantag från WSE1608: Inga XOP-delar var placerade i strömmen för det angivna innehålls-id: ltrootpart36875c60-630c-4e23-9e74-f9a9c7547fc7example. jaxws. sungt Jag öppnar en ny fråga angående detta eftersom det är tekniskt annorlunda problem. Jag är inblandad i exakt samma projekt och jag har samma problem som diskuteras i den här tråden Jag använder vb 2005 och WSE 3.0 förbättringar och jag fick det att fungera även om det är en smärta för nu. När du skriver innehållet i filen direkt i filegenskapen godkänns bilagan av partnern. I mitt fall fungerar det för nästan alla transaktioner utom PRA. Här är svaret positivt och en AttachmentID kommer att levereras men bilagan visas inte i transaktionen. Här är ett exempel på avsnittet Attachment: Om jag ställer RequireMtom för tjänsten till sant, får jag följande fel: Das Prfix kan inte ses i starstandards. orgwebservices200510transport innerhalb desselben Startelementtags neu definiert werden. Å ena sidan fungerar det, å andra sidan är jag inte säker på om den kommer att skickas med XOP-element. svarade jan 17 12 kl 12:46 Jag hade en diskussion med webbtjänstutvecklare om att sätta data direkt i ltFileg-elementet och de sa att detta inte överensstämmer med deras specifikation och de kräver en ltxop: Includegt-element. Se stackoverflowquestions8805095hellip för ytterligare beskrivning av problemet vi har. Om du vill diskutera längre utanför här kan du se min profil för min e-postadress. ndash anothershrubery Jan 17 12 på 12:59 Säker. men jag hittar inte din e-postadress. ndash Daniel Schlieckmann 17 jan 12 kl 15:43 Om du inte kan se den under bio, står den nu i avsnittet Om mig i min profil. ndash anothershrubery Jan 17 12 på 15:45 Tack. Jag har skickat dig ett mail. ndash Daniel Schlieckmann Jan 18 12 på 15:24 Ditt svar 2017 Stack Exchange, IncUsing SOAP för att skicka binära data Våra exemplarmeddelanden hittills har varit ganska små, men vi kan lätt föreställa oss att vi vill använda SOAP för att skicka stora binära dataflöden. Tänk på att en automatiserad försäkringsanspråk kan registreras151remote-agenter kan använda SOAP-aktiverad programvara för att skicka in nya fordringar på en central server och en del av data som är kopplade till ett krav kan vara digitala bilder som registrerar skador eller miljön kring en olycka. Eftersom XML can039t direkt kodar sann 8-bitars binär data för närvarande kan ett enkelt sätt att göra den här typen av saker vara att använda XML Schema-typen base64binary och koda dina bilder som base64-text i XML: den här tekniken fungerar, men it039s inte särskilt effektiv vad gäller bandbredd, och det tar tid att bearbeta tid för att koda och avkoda byte till och från bas64. E-post har använt Multipurpose Internet Mail Extensions (MIME) - standarden under en tid nu för att göra det här jobbet, och MIME tillåter kodning av 8-bitars binär. MIME är också grunden för vissa datakodningar som används i HTTP, eftersom HTTP-mjukvaran vanligtvis kan hantera MIME, det kan vara trevligt om det finns ett sätt att integrera SOAP-protokollet med denna standard och ett effektivare sätt att skicka binär data. SOAP med bilagor och DIME I slutet av 2000 släppte HP och Microsoft en specifikation som heter quotSOAP-meddelanden med Attachments. quot. Spec beskriver ett enkelt sätt att använda multiref-kodningen i SOAP 1.1 för att referera till MIME-kodade bilagor. Vi won039t gå in i mycket detalj här om du vill läsa specen kan du hitta den på w3.orgTR2000NOTE-SOAP-attachments-20001211. Grundidén bakom SOAP med bilagor (SwA) är att du använder samma HREF-trick som du såg i avsnittet quotObject Graphs quot för att infoga en referens till data i SOAP-meddelandet istället för att direkt koda det. I SWA-fallet använder du emellertid innehålls-id (cid) för MIME-delen som innehåller de data du är intresserad av som referens istället för ID för vissa XML-filer. Så skulle meddelandet som kodades tidigare se ut så här: En annan teknik som heter Direct Internet Message Encapsulation (DIME). från Microsoft och IBM, använde en liknande teknik, förutom att kodningen på ledningen var mindre och effektivare än MIME. DIME lämnades till IETF 2002, men har sedan förlorat stödet från till och med dess ursprungliga författare. SwA och DIME är bra teknik, och de får jobbet gjort, men det finns några problem. Huvudproblemet är att både SwA och DIME introducerar en datastruktur som exakt ligger utanför XML-datamodellens rike. Med andra ord, om en mellanhand mottog det tidigare MIME-meddelandet och ville digitalt signera eller kryptera SOAP-kroppen, skulle det behöva regler som berättade hur innehållet i MIME-bilagan var relaterat till SOAP-kuvertet. Dessa regler var formaliserade för SWADIME. Därför måste verktyg och programvara som arbetar med XML-datamodellen ändras för att förstå SWADIME-förpackningsstrukturen och ha tillgång till data som är inbäddade i MIME-bilagorna. Olika XML - och webbtjänstvisioner började diskutera den allmänna frågan om sammanslagning av binärt innehåll med XML-datamodellen på allvar. Som ett resultat utvecklas flera förslag nu för att lösa detta problem på ett arkitektoniskt renare sätt. PASWA, MTOM och XOP I april 2003 lades det citerade Infoset Addendum till SOAP With Attachmentsquot (PASWA) g av flera företag, inklusive Microsoft, ATampT och SAP. PASWA introducerade en logisk modell för att inkludera binärt innehåll direkt i en SOAP infoset. Fysiskt är de meddelanden som PASWA hanterar nästan identiska med våra två tidigare exempel (bilden som kodas först som base64 inline med XML och sedan som en MIME-bilaga) 151 Skillnaden är hur vi tänker på bilagorna. Istället för att tänka på den MIME-kodade bilden som en separat enhet som uttryckligen hänvisas till i SOAP-kuvertet, tänker vi logiskt på det som om det fortfarande var inline med XML. Med andra ord är MIME-förpackningen en optimering och implementeringar måste se till att processorer som tittar på SOAP-datamodellen i syfte att kryptera eller signera fortfarande ser de faktiska data som om den var bas64-kodad i XML. I juli 2003, efter en lång serie samtal mellan XML-protokollgruppen och PASWA-anhängarna, föddes MTOM-enheten (Message Transmission Optimization Mechanism), ägd av XMLP-gruppen. Det reframed idéerna i PASWA till en abstrakt funktion för att bättre synkronisera med SOAP 1.2 extensibility-modellen, och erbjöd sedan en implementering av den funktionen över HTTP. Serialiseringsmekanismen kallas XML-binär optimerad förpackning (XOP) g den var indelad i en separat specifikation så att den också kunde användas i icke-SOAP-kontekster. Som ett exempel ändrade vi något tidigare krav på försäkring genom att förstärka XML med en attributtyp för innehållstyp (från XOP-specifikationen) som berättar vilken MIME-innehållstyp som ska användas vid serialisering av denna infoset med hjälp av XOP. Here039s den nya versionen: En MTOMXOP-version av vår modifierade försäkringsanspråk ser så här ut: I huvudsak är it039s samma på tråden som SwA-versionen, men den använder xop: Includegt-elementet istället för bara href-attributet. Den verkliga skillnaden är arkitektonisk, eftersom vi föreställer oss att verktyg och API: er kommer att manipulera det här meddelandet exakt som om det var en XML-datamodell. MTOM och XOP är på väg att släppas av arbetsgruppen för XML-protokoll någon gång 2004, och det återstår att se hur väl de kommer att accepteras av det bredare användargemenskapen. Tidig återkoppling har dock varit mycket positiv och författarna till den här boken ligger bakom tanken på en enhetlig datamodell för XML och binärt innehåll. Sändningsbilagor med SOAP SOAP-applikationer måste ofta hantera mer än bara enkla meddelanden. Återlösen för ett SOAP-meddelande kan ofta innehålla en ordbehandling eller PDF-dokument, bild eller annan binär fil. I den här artikeln beskrivs hur du använder MTOM för att skicka och ta emot dessa meddelanden. Ladda ner den här fria guiden Gratis handbok: Java App Development i Cloud Software Engineers närmar sig utveckling och företagsdesign på ett helt nytt sätt tack vare molnet. I den här experthandboken kan du undersöka hur dina kollegor utnyttjar molnet för att effektivisera appens livscykelhantering, spara pengar och göra produktion och säkerhet effektivare. Genom att lämna in din personliga information, godkänner du att TechTarget och dess partners kan kontakta dig om relevant innehåll, produkter och specialerbjudanden. Du godkänner också att din personliga information kan överföras och behandlas i USA, och att du har läst och godkänt användarvillkoren och sekretesspolicyen. Förutsättningar Denna artikel använder WSO2 Web Services Application Server (WSAS.) Det rekommenderas att du hämtar och installerar WSO2 WSAS 2.0. Artikeln använder servletupplagan installerad på Apache Tomcat. Alla applikationsservern kan användas med servletversionen, följ bara installationsanvisningarna som ingår i WSO2 WSAS. Du behöver inte använda en applikationsserver alls, eftersom WSO2 WSAS fungerar bra i ett fristående format. WSO2 WSAS kräver Java 1.4 eller 1.5 men det finns inga andra förutsättningar för det. Naturligtvis används webbtjänster och SOAP speciellt, så bekantskap med det kommer att hjälpa. När XML inte räcker: binär data Det finns oändliga sätt att skicka data över nätverket. Det finns många protokoll och dataformat. Standardisering kring SOAP har tagit bort mycket gissningen i att skicka data mellan system. SOAP standardiserar protokollet (HTTP) och dataformatet (XML.) En av huvudkritikerna av SOAP är dess användning av XML. XML är textbaserad. Detta gör inte bara stora meddelanden, men gör det oförenligt med binära data. Låt oss till exempel säga att ditt meddelande måste inkludera en bild. Detta innebär ett problem när ditt meddelandeformat är text. Kombinera binär data med SOAP Ok, så du måste skicka binär data mellan program. Du gillar att använda SOAP, men det är begränsat till text. Så ska du bara ge upp SOAP alla tillsammans Naturligtvis inte, det finns för många fördelar med SOAP. Du behöver bara ett sätt att kombinera det med binär data. Du ser att webbsidor gör det hela tiden det kan inte vara så svårt, rätt. Låt oss undersöka några lösningar på det här problemet. Ett sätt du kanske försöker är att helt enkelt dumpa binären i en textnod. Det kan se ut som Listing 1. Listing 1. XML med binära data: Först försök Kom ihåg att tecken också är byte, precis som binära data. En XML-parser, oavsett om det är en DOM-, SAX - eller StAX-parser, måste använda teckenuppsättningskodningen för dokumentet för att tolka alla bitar i dokumentet som tecken. Så vår binära data kan enkelt ha tecken som motsvarar reserverade XML-tecken, som lt eller gt eller amp. Varje sådan bytesekvens i textnod ovan kommer att orsaka att parsern på den andra sidan bryts. Så detta tillvägagångssätt kommer inte att fungera. Men vänta, kanske det finns ett sätt att åtgärda detta tillvägagångssätt. Vad sägs om att använda ett CDATA-block som kommer att berätta för parsern att ignorera tecknen i blocket. Detta modifierade tillvägagångssätt kan se ut som Listning 2. Listing 2. XML with Binary: Använda CDATA Nu om vi har byte som skulle tolkas som en gt (till exempel) kommer de att ignoreras. Parsern måste emellertid avgöra var CDATA-sektionen slutar. Det gör det genom att leta efter bytesekvensen som motsvarar tecknen gt. Det kan tyckas osannolikt, men vår binära data kan bara ha en sådan bytesekvens i mitten av den. Det skulle få någon parsare att tro att CDATA-delen hade slutat och de efterföljande tecknen skulle tolkas precis som i vårt första försök. Så det kommer inte heller att fungera. Vi behöver ett sätt att se till att dessa byte inte tolkas alls. Bas 64 kodning: Fungerar men uppblåst Det finns en lösning på denna variant av vårt problem. Ett vanligt sätt att göra detta är att använda Base 64-kodning. Denna teknik har funnits (som standard) sedan 80-talet. Det handlar om att använda ett 64 tecken alfabet som består av små bokstäver, a-z, versaler, A-Z, siffrorna 0-9 och symbolerna. Varje byte får kartläggas till dessa tecken, så det finns inget sätt för någon byte att bli felintolkad som något som skulle kväva en XML-parser. Så det, problem löst, rätt Ja, men det är en ganska ineffektiv lösning. Bas 64-kodade binära vindar är i genomsnitt 37 större (antal byte) än den råa, icke-kodade binära data. Dessutom behöver parsern på andra sidan känna till kodningen så att den kan avkoda nyttolasten. Man kan föreställa sig att om Base 64-kodning var en del av SOAP-standarden, skulle det finnas ett vanligt sätt att indikera dessa SOAP-meddelandeprocessorer. Detta är emellertid inte fallet. Det kan vara en lösning, men det är både ineffektivt och icke-standard. Vi behöver något som är både mer effektivt och standardiserat. SOAP med bilagor: Fungerar men bristfällig design En lösning på problemet är att använda det så kallade SOAP med Attachments. Tanken här är att bara sätta binärdata utanför SOAP-meddelandet helt. Figur 1 ger en fin visualisering av detta. Figur 1. SOAP med bilagor Detta liknar mycket hur binära filer kan fästas på e-postmeddelanden. SOAP-meddelandet innehåller en hänvisning till binärfilen som är kopplad till meddelandet. Detta är både mer effektivt och standardiserat, men det har vissa brister i sin design. Den binära bilagan är inte en del av SOAP-meddelandet alls. Det liknar på många sätt att bara överföra en URI för binär data och lämna den upp till meddelandeprocessorn för att hämta den faktiska binära data. Det presenterar några verkliga problem för saker som WS-Security. Ändå är detta det som användes ett tag tills en bättre lösning föreslogs: MTOM. MTOM: Bäst av båda världar MTOM står för SOAP Message Transmission Optimization Mechanism. Det kombinerar effektiviteten av SOAP med bilagor, men det gör det utan att behöva bryta binärdata utanför SOAP-meddelandet. Hur kan detta vara Nyckeln är en teknik som heter XML-binär Optimerad Packaging eller XOP. XOP tillåter att binär data ingår som en del av XML Infoset. I själva verket blir XML Infoset en superset av den traditionella Infoset känd som XOP Infoset. Det låter binära data lagras utanför XML-dokumentet, precis som i SOAP med bilagor. Den använder ett speciellt XOP: inkludera element för att berätta för processorn att ersätta innehållet med den refererade binära dataen, vilket således inkapslar logiken för diskret lagring och hämtning av binärdata. Denna logik blir inneboende för XML-parsern och tillåter SOAP-parsern att behandla binärdata som en del av XML-dokumentet, utan någon särskild retrievallogik. På samma sätt tillåter en SOAP-server att skapa ett SOAP-meddelande på ett enhetligt sätt, ingen särskild logik för att bryta ut den binära data från SOAP-meddelandet. MTOM i WSO2 WSAS Weve pratade mycket om behovet av MTOM och hur det ska fungera i teorin. Det gör oss inte mycket bra utan en verklig implementering. Lyckligtvis är det ett enkelt sätt att få en bra MTOM-implementering, använd bara WSO2 WSAS. WSO2 WSAS bygger utöver försökt och sant teknik, inklusive Apache Axis2. Axis2 ger WSO2 WSAS sin MTOM-implementering. Låt oss titta på hur man klarar av kraften i WSASAxis2s MTOM-implementering. Skicka ett MTOM-meddelande från en webbtjänst med Axiom API MTOM-stöd på Axis2 bygger på samma klasser som används i Axis2. Den använder Axis2s Object Model (OM). Axis2 stöder både Base 64-kodning och MTOM, och gör det relativt enkelt att växla mellan dem. Varför Tja, för mycket små filer, kan det faktiskt vara effektivare att använda Base 64-kodning. För att uppnå denna sömlösa växling mellan optimerad och ickeoptimerad transport behandlar Axis2 binär data som en XML-textnod. Den enda skillnaden är att du måste skicka i en javax. activation. DataHandler för att få tillgång till data, som visas i Listing 3. Listing 3. Lägga till binär data med Axiom API I exemplet i Listing 3, en javax. activation. FileDataSource används för att ge DataHandler tillgång till binär data. Du kan använda vilken klass som helst som implementerar gränssnittet javax. activation. DataSource. När du till exempel arbetar med bilder kan org. apache. axis2.attachments. ImageDataSource användas. Det implementerar DataSource-gränssnittet och kan vara bekvämare när du arbetar med bilder. Så hur vet Axis2 och därmed WSO2 WSAS att använda MTOM för att optimera binärdata Det är faktiskt vad Axis2 ska göra som standard. Du kan manuellt åsidosätta detta genom att lägga till en enda kodkod, som visas i Listing 4. Listing 4. Slå av MTOM Den enda radkoden kommer att berätta för Axis2 att inte optimera, dvs använd inte MTOM. Således kommer Axis2 att använda bas 64-kodning av binärdata, och det kommer verkligen att bli en textnod. Annars kommer MTOM att sparka in, och en XOP-inkludering kommer att användas för att optimera transporten av binärdata inom SOAP-meddelandet. Aktivera MTOM på servern Naturligtvis för att få allt detta underbara, automatiskt optimerade beteende, behöver du aktivera MTOM. Du kan göra det här via din axel2.xml-fil mycket enkelt, som visas i Listning 5. Listning 5. Aktiverar MTOM i axel. xml Det kan inte bli mer smärtfritt än det, rätt Det här är en global inställning och är standardinställningen på WSO2 WSAS. Du kan faktiskt aktivera MTOM på fyra olika nivåer: global, servicegrupp, service och drift. Du använder samma semantik för varje nivå. Du kan använda Management Console för att hantera MTOM på var och en av dessa nivåer. Se till exempel på Figur 2. Figur 2. Hantera MTOM på servicegruppenivå Här ser vi att MTOM hanteras på servicegruppenivå. Varje tjänst i gruppen kan också hanteras individuellt, som visas i Figur 3. Figur 3. Hantera MTOM på servicenivån Naturligtvis kan varje tjänst ha en eller flera operationer. WSAS låter dig hantera MTOM på samma nivå, som visas i Figur 4. Observera att MTOM på varje nivå har tre möjliga värden: true, false och optional. Om egenskapen är satt till sann, skickar tjänsten ett optimerat meddelande vid behov, dvs när binär data ingår. Om värdet är inställt på felaktigt, kommer optimering aldrig att användas, och bas 64-kodning kommer att användas för binär data. Om den är valfri, kommer WSAS att optimera om och endast om förfrågan kom in optimerades. Typ av förfrågan anger WSAS om den ska använda MTOM eller inte. Varför behöver vi denna typ av flexibilitet Som tidigare nämnts är det ofta fördelaktigt att använda bas 64-kodning på små filer. Således kan du bestämma att vissa operationer ska använda MTOM och andra ska inte. Eller om du kan göra det valfritt vid en operation, gör du en kontroll för storleken på data som skickas, och välj sedan att åsidosätta standard MTOM om filen är liten. Då skickar du MTOM. Låt oss se hur lätt WSAS gör det att skicka ett MTOM-meddelande från en webbtjänstklient. Skapa en SOAP-klient som skickar MTOM-meddelanden Skicka ett MTOM-meddelande från en klient är lika enkelt som att skicka ett MTOM-meddelande från en webbtjänst. Axis2 ger flera praktiska API. Ett exempel visas i Listing 6. Listing 6. Klientkod för att skicka MTOM-meddelande Som du kan se i Listing 6 är det viktigaste att göra det möjligt att aktivera MTOM i alternativ för webbserviceklienten. När du väl har gjort det, kommer Axis2 att optimera alla binära data som du skickar till webbtjänsten med hjälp av MTOM automatiskt. Weve sett hur man skickar MTOM-meddelanden från en webbtjänst och till en webbtjänst, nu kan vi titta på hur man arbetar med data som har skickats med hjälp av MTOM. Hantera ett MTOM-meddelande i en webbtjänst Nu kan vi anta att du har en webbtjänst som accepterar binär data som en del av ett SOAP-meddelande från en klient. Om din webbtjänst körs på WSAS behöver du inte göra något speciellt för att kunna hantera optimerad binär data från dina kunder. Dina kunder kan skicka SOAP-meddelanden som använder MTOM eller Base 64-kodning. Dess alla sömlösa med WSAS. Listning 7 visar ett exempel på att ta emot optimerade data. Listning 7. Webbservicemottagning Optimerad SOAP Såsom vi såg tidigare behandlar Axiom API den binära data som en textnod. Detta möjliggör ett enda API för hantering av optimerade och icke optimerade (Base 64-kodade) data. Du kommer helt enkelt åt DataHandler som är associerad med texten noden (som innehåller binär data) och använder det för att få en InputStream. När du har InputStream kan du läsa alla byte och bearbeta dem men du behöver. WSAS gör det enkelt att hantera SOAP-meddelanden med optimerade binära data nyttolaster. Låt oss se hur lätt det är att arbeta med MTOM på kunder. Hantera ett MTOM-meddelande i en klient Det finns inget magi för att hantera ett MTOM-webbservisionssvar. Weve har redan sett hur man ställer in förfrågan. I Figur 8 ser du hur man hanterar ett svar som innehåller binär data optimerad med MTOM. Återigen använder tangenten här Axiom API. Det låter oss behandla binär data som en textnod och använd sedan DataHandler för att få en InputStream till data. Återigen, när du har InputStream, kan du bearbeta data men du behöver. Weve sett hur MTOM ger den perfekta kombinationen av SOAP-standardisering och effektivitet för transport av binär data inom ett webbservicemeddelande. Weve sett hur WSO2 WSAS implementerar MTOM-specifikationen med Axis2. Weve tittade på hur man konfigurerar både webbservrar och klienter för att både skicka och ta emot MTOM optimerade meddelanden. Nu har vi allt vi behöver för att lägga binär data till våra webbtjänster med WSO2 WSAS. Du kommer att vilja ladda ner WSO2 WSAS. Läs om de senaste funktionerna i WSO2 WSAS 2.0. Lär dig av och interagera med WSO2-communityen på WSAS Wiki. Lär dig om att exponera dina tjänster som webbtjänster enkelt med Axis2. Lär dig hur Axis2 kan aktivera dina SOA-mönster i developerWorks-artikeln SOA med Axis2. Läs mer om Axis interoperabilitet med andra webbtjänster implementeringar i denna post i TSS Interoperability blogg. Dyk in i AXIOM API i developerWorks artikeln Få ut det mesta av XML-bearbetning med AXIOM. Läs allt om XOP och MTOM i denna blogginlägg av Mark Nottingham. Interoperabilitet är namnet på spelet när det gäller webbtjänst, så lär dig mer om att använda MTOM med i artikeln Skicka filer i bitar med MTOM Web Services och 2.0. Om författaren Michael Galpin är en arkitekt på eBay i San Jose, CA. Han har utvecklat programvara sedan 1998 och har en examen i matematik från California Institute of Technology.

No comments:

Post a Comment