Wednesday 20 December 2017

Soapui content transfer encoding binary options


Jestem w luźnym końcu, jak dodać załącznik do mojego żądania SOAP. Musimy spożytkować usługę WWW Thrid Party, zbudowaną w Javie, która jest najbardziej skomplikowaną rzeczą, jaką kiedykolwiek spotkałem. Wszelkie inne usługi internetowe, z których korzystaliśmy, wymagające załączników, mają metodę lub właściwość do dodania załącznika. Prosty. Jednak ten nie zapewnia takiej metody. Mamy wersję komunikatu SOAP razem, dokładnie tak, jak chcemy XML, jednak jest to część pliku MIME, której nie możemy dodać. Jest to część XML, którą możemy wygenerować i wysłać, jednak jest ona niepoprawna, ponieważ potrzebujemy części MIME w tym miejscu, jak np.: Przeszukałem internet w poszukiwaniu odpowiedzi, ale wyszedłem puste. Wydaje się, że nie ma zbyt wiele dokumentacji na temat korzystania z GPW. Muszę podkreślić, że GPW jest wymogiem po stronie serwera i nie ma możliwości zmiany technologii w celu rozwiązania tego problemu. Czy istnieje sposób, że te sekcje MIME mogą być dodane EDYCJA: Muszę dodać, że mogę uzyskać działający dokument XML wysłany przez SoapUI z załącznikami, ale nie mogę znaleźć sposobu w naszym kodzie. Dodałem nagrodę, aby spróbować rozwiązać ten problem. Jeśli ktoś ma jakieś inne pomysły, daj mi znać. EDYTUJ ponownie: Wiem, że minął tydzień, odkąd mogłem sprawdzić odpowiedzi tutaj, ale podczas gdy niektórzy dają dobry pomysł, gdzie szukać, wciąż rysuję puste miejsce. Straszna dokumentacja związana z XopDocument i jego metodami jest bardzo ważna, jeśli ktoś ma jakieś przykłady użycia SaveToXopPackage, może to podać, ponieważ to zaczyna się drażnić. 20 grudnia 11 o 11:48 Cóż, John, co powiesz na znalezienie rozwiązania zamiast chodzić po prostu udając, że wiesz wszystko. W tym scenariuszu dla mnie wymagana jest WSE. Bez niego nasze wnioski zostaną odrzucone. Nie mogę powiedzieć sprzedawcy zewnętrznemu, jak powinni kodować, mogę spróbować, ale zawsze byli najmniej pomocni na świecie. Tak więc, podczas gdy GPW nie powinno być używane, jeśli tworzysz własne oprogramowanie, jest to wymagane w tym przypadku. ndash anothershrubery Jan 5 12 o 10:49 Mam niewiele do powiedzenia na ten temat, ale mam nadzieję, że ktoś powiedział cesarzowi, że jego ubrania są przestarzałe. Ponadto, jeśli udajesz, że używanie WSE nie jest opcją, nie będziesz miał wątpliwości, jak dostosować WCF do tego, czego potrzebujesz, tylko używając obsługiwanego oprogramowania. ndash John Saunders 5 sty 17 o 17:53 Myślę, że możesz mieć kilka opcji: 1) Użyj MTOM. Wygląda na to, że automatycznie otacza wiadomość wychodzącą w blokach MIME. 2) Microsoft faktycznie zapewnia obsługę generowania i odczytywania XOP z mime za pośrednictwem klasy XopDocument, z której dziedziczy SoapEnvelope. Uważam jednak, że takie podejście może wymagać przeprowadzenia wysyłania wiadomości przez HttpWebRequest. Ten blog zawiera przykład tego, jak to wdrożyć. Minusem jest to, że wymaga to dużo dodatkowego kodu i konfiguracji, aby działać poprawnie. Idealnym rozwiązaniem byłoby przechwycenie kodu, który wykonuje transmisję obwiedni, ale nie byłem w stanie zlokalizować poprawnej lokalizacji dla tego w potoku. Im 90 pewni, że pracuję nad tym samym projektem co wy. Ta prośba o mydło jest trochę zbyt znajoma :-) Najczęściej dotarliśmy do tego celu, przełączając się na WCF i zasadniczo ręcznie kodując obiekt żądania (tworząc klasy, które pasują do formatu mydła, a następnie używając atrybutów xmlelement do dekoracji go tak, aby wygląda jak ich prośba o mydło, sam plik jest zadeklarowany jako Byte () w klasie Attachment i również ozdobiony xmlelementem). Oto, jak wygląda kontrakt WCF i część modelu danych. Rzeczywisty model danych zawiera kilka dodatkowych klas (obszar aplikacji, obszar danych, zadanie itp.), Ale daje to wystarczająco dużo informacji na temat jego struktury. Ważnym elementem jest plik jako bajt (). Tutaj jest w Vb. Następnie otrzymałeś klienta WCF, który jest prawie taki sam jak wszystkich klientów WCF. Nareszcie masz app. config. Czuje magię, ponieważ polecił WCF użyć Mtom do wysłania wiadomości. Spowoduje to pobranie Bajty () i oddzielenie jej do osobnej sekcji MIME, zastępując ją przez XOP: Uwzględnij. Zauważ, że na razie wysyłam je przez localhost, więc widzę żądanie za pomocą tcpTrace. Możesz google to aplikacja, ale to w zasadzie przechwyć wniosek, abyśmy mogli zobaczyć, jak to wygląda. Konfiguruję tcpTrace, aby nasłuchiwał na porcie 84. Na koniec hes rzeczywiste wywołanie do klienta WCF, aby wykonać żądanie. I oto ślady, które przeszliśmy przez tcpTrace. Poprawiono podstawową strukturę i udało się wyciągnąć dane binarne z xml i umieścić ją w osobnej sekcji MIME. Tak jak wspomniałem wcześniej - wciąż mamy pewne problemy. W nagłówku mydła brakuje niektórych tagów. ale myślę, że potrafię to rozgryźć. Prawdziwy problem polega na tym, że Content-ID NIE ma formatu, który akceptuje nasz partner - oczekują czegoś takiego jak lt1.a33c2d7e84634122705ebc71e53d95d4c2683d726ba54e14apache. org i formatuje je jako tempuri. org1634618782531246992. Powoduje to awarię programu obsługi sieci Web, ponieważ nie wie, jak odczytać zbieżne identyfikatory treści w komunikacie mydlanym. odpowiedz 7 sty 12 o 0:23 Właśnie zauważyłem twoją edycję dla tego teraz. Tak, to wygląda dokładnie tak samo jak projekt Niestety, twoje rozwiązanie nie zadziała w naszym przypadku, ponieważ ograniczamy się do korzystania z GPW, a nie z WCF. Reliance na VS 2005. To jest ból. Ale tego właśnie szukam, ale muszę znaleźć rozwiązanie na GPW. (Jednak z twoim problemem nie możesz ustawić Content-ID na wszystko, co chcesz. Działa to w SoapUI, kiedy sam określasz ID treści i nie polegasz na domyślnej reprezentacji Mój adres e-mail, nie działa jeden, jest w moim profil, jeśli chcesz dalej rozmawiać ndash anothershrubery Jan 16 12 o 12:58 Jak mówisz, że masz to działa poprzez SoapUI, myślę, że możesz po prostu poprosić SoapUI o wygenerowany XML, który wysłałeś, żebyś wiedział jak powinien wyglądać, następnie zmodyfikuj swój kod, aby naśladować to. AKTUALIZACJA: po komentarzu i lekturze innych odpowiedzi bardziej szczegółowo: rozwiązanie wygląda dla mnie po prostu wysyłając bajty bezpośrednio, używając HttpWebRequest jak w odpowiedzi ktsioliss. W szczegółach: Utwórz swój SOAP XML (przykład podałeś ), zakoduj to do bajtów w UTF8 (1) Utwórz łańcuch z początkowym mimeboundary (część w twoim Przed XML), zakoduj do bajtów w UTF8 (2) Utwórz bajty dla drugiego mimeboundary (część po XML). Stwórz więc ciąg zawierający - MIMEBOUNDARY itd. Do UTF8 bajtów i dołącz wszystkie bajty pliku test. gif (3) Dołącz wszystkie bajty w kolejności (2), (1) i (3) i wyślij je przez przewód. Powinno to załatwić sprawę Ok, więc dostałem ją do zaakceptowania danych z pliku w elemencie ltgwm: Filegt. Jest to bez użycia XOP, więc żądanie wygląda teraz tak: Po przejściu do SoapUI działa to idealnie, jednak w kodzie daje odpowiedź, ale powoduje błąd mówiąc, że Response nie jest dobrze sformatowanym XML. z wewnętrznym wyjątkiem WSE1608: Żadne części XOP nie zostały umieszczone w strumieniu dla określonego content-id: ltrootpart36875c60-630c-4e23-9e74-f9a9c7547fc7example. jaxws. sungt Będę otwierać nowe pytanie dotyczące tego ponieważ jest to technicznie odmienne kwestia. Jestem zaangażowany w dokładnie ten sam projekt i mam te same problemy, o których mówiłem w tym wątku Używam rozszerzeń vb 2005 i WSE 3.0 i mam to działa, nawet teraz jest to ból. Podczas zapisywania zawartości pliku bezpośrednio we właściwości pliku załącznik zostanie zaakceptowany przez partnera. W moim przypadku dotyczy to prawie wszystkich transakcji z wyjątkiem PRA. Tutaj odpowiedź jest pozytywna, a AttachmentID zostanie dostarczony, ale załącznik nie pojawi się w transakcji. Oto przykład sekcji Załącznika: Jeśli ustawię RequireMtom dla usługi na True, otrzymam następujący błąd: Das Prfix kann nicht von in starstandards. orgwebservices200510transport innerhalb desselben Startelementtags neu definiert werden. Z jednej strony, działa, z drugiej strony, nie jestem pewien, czy zostanie wysłany z elementami XOP. odpowiedz 17 stycznia o 12:46 Przeprowadziłem dyskusję z twórcami serwisów internetowych na temat umieszczania danych bezpośrednio w elemencie ltFilegt i powiedzieli, że to nie odpowiada ich specyfikacji i wymagają elementu ltxop: Includegt. Zobacz stackoverflowquestions8805095hellip dla dalszego opisu problemu, który mamy. Jeśli chcesz porozmawiać dalej poza tym miejscem, zobacz mój profil na mój adres e-mail. ndash anothershrubery Jan 17 12 o 12:59 Pewnie. ale nie mogę znaleźć Twojego adresu e-mail. ndash Daniel Schlieckmann Jan 17 12 o 15:43 Jeśli nie widzisz tego pod bio, to jest teraz w sekcji O mnie w moim profilu. ndash anothershrubery Jan 17 12 o 15:45 Dziękuję. Wysłałem ci e-mail. ndash Daniel Schlieckmann Jan 18 12 o 15:24 Twoja wymiana stosów w 2017 roku, wykorzystując SOAP do wysyłania danych binarnych Nasze przykładowe wiadomości do tej pory były dość małe, ale możemy łatwo wyobrazić sobie, że chcemy używać SOAP do wysyłania dużych binarnych plam danych. Rozważmy na przykład rejestr automatycznych roszczeń ubezpieczeniowych151, którzy mogą wykorzystywać oprogramowanie obsługujące SOAP do zgłaszania nowych roszczeń do centralnego serwera, a część danych związanych z roszczeniem może być obrazem cyfrowym rejestrującym szkody lub środowisko wokół wypadku. Ponieważ XML może bezpośrednio kodować prawdziwe 8-bitowe dane binarne, prostym sposobem na zrobienie tego rodzaju rzeczy może być użycie schematu XML typu base64binary i zakodowanie obrazów jako tekstu base64 w XML: Ta technika działa, ale nie jest jest szczególnie wydajny pod względem przepustowości i zajmuje czas przetwarzania, aby kodować i dekodować bajty do iz base64. Poczta e-mail od jakiegoś czasu korzysta ze standardu MIME (Multipurpose Internet Mail Extensions) do wykonywania tego zadania, a MIME umożliwia kodowanie 8-bitowego pliku binarnego. MIME jest również podstawą dla niektórych kodowań danych używanych w HTTP, ponieważ oprogramowanie HTTP zwykle zajmuje się MIME, może być fajnie, jeśli istnieje sposób na zintegrowanie protokołu SOAP z tym standardem i bardziej efektywnym sposobem wysyłania danych binarnych. SOAP z załącznikami i DIME Pod koniec 2000 r. Firma HP i Microsoft opublikowały specyfikację o nazwie quotSOAP Wiadomości z załącznikami. Specyfikacja opisuje prosty sposób użycia kodowania multiref w SOAP 1.1 do odwoływania się do zakodowanych części MIME. Bardzo szczegółowo omówiliśmy tutaj, jeśli chcesz przeczytać specyfikację, możesz go znaleźć na stronie w3.orgTR2000NOTE-SOAP-attachments-20001211. Podstawową ideą SOAP z Attachments (SwA) jest to, że używasz tej samej sztuczki HREF, którą widziałeś w sekcji quotObject Graphs quot, aby wstawić odniesienie do danych w komunikacie SOAP, zamiast bezpośrednio go kodować. Jednak w przypadku SwA używa się identyfikatora treści (cid) części MIME zawierającej dane, które są zainteresowane jako odniesienie zamiast identyfikatora niektórych XML. Tak więc wcześniej zakodowana wiadomość wyglądałaby tak: Inna technologia o nazwie Direct Internet Message Encapsulation (DIME). Microsoft i IBM używały podobnej techniki, z tym że kodowanie on-the-wire było mniejsze i wydajniejsze niż MIME. DIME został zgłoszony do IETF w 2002 roku, ale od tego czasu stracił poparcie nawet swoich autorów. SwA i DIME są świetnymi technologiami i wykonują zadanie, ale jest kilka problemów. Głównym problemem jest to, że zarówno SwA, jak i DIME wprowadzają strukturę danych jawnie poza sferę modelu danych XML. Innymi słowy, jeśli pośrednik otrzymał wcześniejszy komunikat MIME i chciał podpisać cyfrowo lub zaszyfrować treść SOAP, potrzebowałby reguł, które wskazywałyby, w jaki sposób treść załącznika MIME była powiązana z kopertą SOAP. Reguły te nie zostały sformalizowane dla SwADIME. Dlatego narzędzia i oprogramowanie współpracujące z modelem danych XML muszą zostać zmodyfikowane, aby zrozumieć strukturę opakowania SwADIME i mieć sposób na dostęp do danych osadzonych w załącznikach MIME. Różni wizjonerzy usług XML i sieci Web zaczęli poważnie omawiać ogólny problem łączenia treści binarnych z modelem danych XML. W związku z tym obecnie powstaje szereg propozycji rozwiązania tego problemu w sposób czystszy architektonicznie. PASWA, MTOM i XOP W kwietniu 2003 r. Opublikowany został cytowany Dodatek "Proponowany moduł informacyjny" do protokołu SOAP z załącznikami (PASWA) g przez kilka firm, w tym Microsoft, ATampT i SAP. PASWA wprowadził logiczny model dołączania zawartości binarnej bezpośrednio do zbioru informacji SOAP. Fizycznie, wiadomości, z którymi współpracuje PASWA, wyglądają niemal identycznie jak nasze dwa wcześniejsze przykłady (obraz zakodowany najpierw jako base64 w linii z XMLem, a następnie jako załącznik MIME). Różnica polega na tym, jak myślimy o załącznikach. Zamiast myśleć o obrazie zakodowanym w MIME jako oddzielnej jednostce, o której wyraźnie mowa w kopercie SOAP, logicznie myślimy o tym, jakby był nadal zgodny z XML. Innymi słowy, opakowanie MIME jest optymalizacją, a implementacje muszą zapewniać, że procesory analizujące model danych SOAP do celów szyfrowania lub podpisywania nadal widzą rzeczywiste dane tak, jakby były kodowane w formacie base64 w XML. W lipcu 2003 r., Po długiej serii rozmów między grupą XML Protocol a kibicami PASWA, narodził się mechanizm Message Transmission Optimization Mechanism (MTOM) g, należący do grupy XMLP. Przeprojektował idee w PASWA w funkcję abstrakcyjną, aby lepiej zsynchronizować się z modelem rozszerzalności SOAP 1.2, a następnie zaoferowała implementację tej funkcji przez HTTP. Mechanizm serializacji nosi nazwę XML-Binary Optimized Packaging (XOP). Został opracowany w oddzielnej specyfikacji, aby mógł być również użyty w kontekstach innych niż SOAP. Na przykład nieznacznie zmodyfikowaliśmy wcześniejsze roszczenie ubezpieczeniowe, rozszerzając kod XML o atrybut typu zawartości (ze specyfikacji XOP), który mówi nam, jakiego typu zawartości MIME użyć podczas serializowania tego zbioru informacji przy użyciu XOP. Oto nowa wersja: Wersja MTOMXOP naszego zmodyfikowanego roszczenia ubezpieczeniowego wygląda tak: Zasadniczo, jest taka sama na drucie jak wersja SwA, ale używa elementu xop: Includegt zamiast tylko atrybutu href. Prawdziwa różnica jest architektoniczna, ponieważ wyobrażamy sobie, że narzędzia i interfejsy API będą manipulować tą wiadomością dokładnie tak, jakby był to model danych XML. MTOM i XOP są na dobrej drodze do wydania przez Grupę Roboczą ds. Protokołu XML w 2004 r. I dopiero okaże się, jak dobrze będą one akceptowane przez szerszą społeczność użytkowników. Wcześniejsza informacja zwrotna była jednak bardzo pozytywna, a autorzy tej książki stoją za ideą jednolitego modelu danych dla XML i treści binarnych. Załączniki do załączników SOAP SOAP często mają do czynienia z czymś więcej niż zwykłymi wiadomościami. Ładunek dla komunikatu SOAP może często obejmować przetwarzanie tekstu lub dokument PDF, obraz lub inny plik binarny. W tym artykule wyjaśniono, jak używać mechanizmu optymalizacji przesyłania komunikatów (MTOM), aby wysyłać i odbierać te wiadomości. Pobierz ten darmowy przewodnik Bezpłatny podręcznik: Tworzenie aplikacji Java w chmurze Inżynierowie programistyczni podchodzą do rozwoju i projektowania przedsiębiorstw w zupełnie nowy sposób, dzięki chmurze. W tym poradniku eksperta sprawdź, w jaki sposób twoi rówieśnicy wykorzystują chmurę do usprawnienia zarządzania cyklem życia aplikacji, zaoszczędzenia pieniędzy oraz zwiększenia wydajności produkcji i bezpieczeństwa. Przesyłając swoje dane osobowe, zgadzasz się, że TechTarget i jego partnerzy mogą kontaktować się z Tobą w sprawie odpowiednich treści, produktów i ofert specjalnych. Zgadzasz się również, że Twoje dane osobowe mogą być przesyłane i przetwarzane w Stanach Zjednoczonych oraz przeczytać i zaakceptować Warunki Użytkowania i Politykę Prywatności. Wymagania wstępne W tym artykule jest używany serwer aplikacji WSO2 Web Services (WSAS). Zaleca się pobranie i zainstalowanie WSAS WSAS2. Artykuł wykorzystuje wersję serwletu zainstalowaną na serwerze Apache Tomcat. Każdy serwer aplikacji może być używany z wersją serwletu, wystarczy postępować zgodnie z instrukcjami instalacji dołączonymi do WSOS WSOS2. Nie musisz w ogóle korzystać z serwera aplikacji, ponieważ WSO2 WSAS działa świetnie w autonomicznym formacie. WSO2 WSAS wymaga Java 1.4 lub 1.5, ale nie ma innych wymagań wstępnych. Oczywiście usługi sieciowe i SOAP są używane, więc znajomość tego pomoże. Kiedy XML nie wystarcza: dane binarne Istnieją nieskończone sposoby przesyłania danych przez sieć. Istnieje wiele protokołów i formatów danych. Standaryzacja wokół SOAP zabrała wiele domysłów w przesyłaniu danych między systemami. SOAP standaryzuje protokół (HTTP) i format danych (XML.) Jedną z głównych krytyki SOAP jest użycie XML. XML jest oparty na tekście. To nie tylko powoduje duże wiadomości, ale czyni je niekompatybilnymi z danymi binarnymi. Na przykład powiedzmy, że twoja wiadomość musi zawierać obraz. Stwarza to problem, gdy format wiadomości jest tekstem. Łącząc dane binarne z SOAP Ok, musisz wysyłać dane binarne pomiędzy aplikacjami. Chcesz używać SOAP, ale jest ograniczony do tekstu. Więc powinieneś po prostu zrezygnować z SOAP wszystkich razem Oczywiście nie, jest zbyt wiele korzyści dla SOAP. Po prostu potrzebujesz sposobu na połączenie go z danymi binarnymi. Widzisz, że strony internetowe robią to cały czas, nie mogą być tak trudne, prawda Pozwala odkryć niektóre rozwiązania tego problemu. Jednym ze sposobów, w jaki możesz spróbować, jest po prostu zrzucenie pliku binarnego do węzła tekstowego. Może wyglądać jak Lista 1. Lista 1. Dane XML z danymi binarnymi: Pierwsza próba Pamiętaj, że postacie są również bajtami, podobnie jak dane binarne. Analizator składni XML, czy to parser DOM, SAX, czy StAX, musi użyć kodowania zestawu znaków dokumentu, aby zinterpretować wszystkie bajty w dokumencie jako znaki. Zatem nasze dane binarne mogą łatwo zawierać znaki, które odpowiadają zarezerwowanym znakom XML, takim jak lt, gt lub amp. Każda taka sekwencja bajtów w węźle tekstowym powyżej spowoduje parser po drugiej stronie do zerwania. Tak więc to podejście nie zadziała. Ale poczekaj, może to jest sposób na rozwiązanie tego podejścia. Co powiesz na użycie bloku CDATA, który powie parserze, aby zignorował znaki wewnątrz bloku. To zmodyfikowane podejście może wyglądać tak, jak na listingu 2. Listing 2. XML with Binary: Using CDATA Teraz, jeśli mamy bajty, które byłyby interpretowane jako gt (na przykład), będą one ignorowane. Jednak analizator składów musi dowiedzieć się, gdzie kończy się sekcja CDATA. Robi to, szukając sekwencji bajtów odpowiadającej znakom gt. Może wydawać się to mało prawdopodobne, ale nasze dane binarne mogą mieć właśnie taką sekwencję bajtów w środku. To spowodowałoby, że każdy parser pomyślałby, że sekcja CDATA została zakończona, a kolejne znaki będą interpretowane tak samo, jak za pierwszym razem. To też nie zadziała. Potrzebujemy sposobu, aby upewnić się, że te bajty nie są w ogóle interpretowane. Kodowanie Base 64: Działa ale nadęty Istnieje rozwiązanie tego wariantu naszego problemu. Najczęstszym sposobem na to jest użycie kodowania Base64. Technika ta istnieje od około lat 80-tych (jako standard). Wiąże się to z użyciem alfabetu 64-znakowego składającego się z małych liter, a-z, wielkich liter, A-Z, cyfr 0-9 i symboli. Każdy bajt jest mapowany na te znaki, więc nie ma mowy, aby jakikolwiek bajt został źle zinterpretowany jako coś, co mogłoby dusić parser XML. Tak więc, problem rozwiązany, prawda Tak, ale jest to dość nieefektywne rozwiązanie. Zakodowane binarne kodowanie Base 64 jest średnio o 37 większe (liczba bajtów) niż surowe, niekodowane dane binarne. Ponadto, analizator składni po drugiej stronie musi wiedzieć o kodowaniu tak, aby mógł dekodować ładunek. Można sobie wyobrazić, że jeśli kodowanie w bazie 64 jest częścią standardów SOAP, wtedy byłby jakiś standardowy sposób wskazania tych procesorów SOAP. Tak się jednak nie stało. Może to być rozwiązanie, ale jest ono zarówno nieefektywne, jak i niestandardowe. Potrzebujemy czegoś, co jest zarówno bardziej wydajne, jak i ustandaryzowane. SOAP z załącznikami: działa, ale wadliwy projekt Jednym z rozwiązań problemu jest użycie tak zwanego SOAP z załącznikami. Chodzi o to, aby całkowicie usunąć dane binarne poza komunikatem SOAP. Ryc. 1 przedstawia ładną wizualizację tego. Rysunek 1. SOAP z załącznikami Jest to bardzo podobne do sposobu dołączania plików binarnych do wiadomości e-mail. Komunikat SOAP zawiera odniesienie do pliku binarnego, który jest dołączony do wiadomości. Jest to zarówno bardziej wydajne i standaryzowane, ale ma pewne wady w jego konstrukcji. Binarny załącznik w ogóle nie jest częścią komunikatu SOAP. Jest ona podobna na wiele sposobów, aby po prostu przekazać identyfikator URI dla danych binarnych i pozostawić go procesorowi wiadomości w celu pobrania rzeczywistych danych binarnych. Przedstawia kilka prawdziwych problemów dla takich rzeczy jak WS-Security. Jednak to było to, co było używane przez jakiś czas, dopóki nie zaproponowano lepszego rozwiązania: MTOM. MTOM: Najlepsze z obu światów MTOM oznacza SOAP Message Optission Transmission Mechanism. Łączy wydajność SOAP z załącznikami, ale robi to bez konieczności łamania danych binarnych poza komunikatem SOAP. Jak to może być Kluczem jest technologia zwana binarnym zoptymalizowanym opakowaniem XML lub XOP. XOP umożliwia uwzględnianie danych binarnych jako części zbioru XML. W rzeczywistości XML Infoset staje się nadzbiorem tradycyjnego Infoset znanego jako XOP Infoset. Pozwala na przechowywanie danych binarnych poza dokumentem XML, tak jak w SOAP z załącznikami. Używa specjalnego elementu XOP: include, aby nakazać procesorowi zastąpienie zawartości przywoływanymi danymi binarnymi, a tym samym enkapsulację logiki dyskretnego przechowywania i odzyskiwania danych binarnych. Ta logika staje się nieodłącznie związana z parserem XML i pozwala parserowi SOAP traktować dane binarne jako część dokumentu XML bez specjalnej logiki wyszukiwania. Podobnie pozwala to serwerowi SOAP na tworzenie komunikatu SOAP w jednolity sposób, bez specjalnej logiki do rozbijania danych binarnych z komunikatu SOAP. MTOM w WSO2 WSAS Rozmawialiśmy dużo o potrzebie MTOM i jak to powinno działać w teorii. Nie robi nam to wiele dobrego bez prawdziwej implementacji. Na szczęście jest to prosty sposób na uzyskanie doskonałej implementacji MTOM, wystarczy skorzystać z WSAS WSAS. WSO2 WSAS opiera się na sprawdzonych i sprawdzonych technologiach, w tym Apache Axis2. Axis2 daje WSO2 WSAS implementację MTOM. Przyjrzyjmy się, jak wykorzystać moc implementacji MTOM WSASAxis2s. Wysyłanie wiadomości MTOM z usługi sieciowej za pomocą interfejsu Axiom API Obsługa MTOM w Axis2 opiera się na tych samych klasach, które są używane w Axis2. Wykorzystuje model obiektowy Axis2s (OM). Axis2 obsługuje kodowanie Base64 i MTOM i sprawia, że ​​przełączanie się między nimi jest stosunkowo proste. Dlaczego w przypadku bardzo małych plików może być skuteczniejsze stosowanie kodowania Base64. Aby osiągnąć to płynne przełączanie między transportem zoptymalizowanym i niezoptymalizowanym, Axis2 traktuje dane binarne jako węzeł tekstowy XML. Jedyna różnica polega na tym, że musisz przekazać javax. activation. DataHandler w celu uzyskania dostępu do danych, jak pokazano na listingu 3. Lista 3. Dodawanie danych binarnych za pomocą interfejsu Axiom API W przykładzie na listingu 3, javax. activation. FileDataSource służy do zapewnienia DataHandler dostępu do danych binarnych. Możesz użyć dowolnej klasy, która implementuje interfejs javax. activation. DataSource. Na przykład podczas pracy z obrazami można użyć org. apache. axis2.attachments. ImageDataSource. Implementuje interfejs DataSource i może być wygodniejszy podczas pracy z obrazami. W jaki sposób Axis2, a zatem WSO2 WSAS, wiedzą, że używają MTOM do optymalizacji danych binarnych. Tak właśnie działa Axis2. Możesz to zmienić ręcznie, dodając tylko jeden wiersz kodu, jak pokazano na listingu 4. Lista 4. Wyłączenie MTOM Ta linia kodu powie Axis2, że nie ma optymalizacji, tj. Nie używaj MTOM. W ten sposób Axis2 będzie wykorzystywał kodowanie danych binarnych Base 64 i będzie to naprawdę węzeł tekstowy. W przeciwnym razie MTOM zacznie kopać, a XOP będzie używane do optymalizacji transportu danych binarnych w komunikacie SOAP. Włączanie MTOM na serwerze Oczywiście, aby uzyskać to wspaniałe, automatycznie zoptymalizowane zachowanie, musisz włączyć MTOM. Możesz to zrobić za pomocą pliku ax2.xml bardzo łatwo, jak pokazano na listingu 5. Listing 5. Włączanie MTOM w axis. xml Nie może być już bezbolesne, right To jest ustawienie globalne i jest domyślnym ustawieniem dla WSO2 WSAS. W rzeczywistości możesz włączyć MTOM na czterech różnych poziomach: globalnym, grupowym, usługowym i operacyjnym. Używasz tej samej semantyki dla każdego poziomu. Za pomocą Konsoli zarządzania można zarządzać MTOM na każdym z tych poziomów. Na przykład, spójrz na rysunek 2. Rysunek 2. Zarządzanie MTOM na poziomie grupy usług Tutaj widzimy MTOM zarządzany na poziomie Grupy usług. Każda usługa w grupie może być indywidualnie zarządzana, jak pokazano na rysunku 3. Rysunek 3. Zarządzanie MTOM na poziomie usługi Oczywiście każda usługa może mieć jedną lub więcej operacji. WSAS umożliwia zarządzanie MTOM na tym poziomie, jak pokazano na rysunku 4. Zauważ, że na każdym poziomie MTOM ma trzy możliwe wartości: true, false i opcjonalne. Jeśli właściwość jest ustawiona na wartość true, wówczas usługa wyśle ​​zoptymalizowany komunikat, gdy będzie to konieczne, tj. Gdy dane binarne zostaną uwzględnione. Jeśli wartość jest ustawiona na false, optymalizacja nigdy nie będzie używana, a kodowanie Base64 będzie używane dla dowolnych danych binarnych. Jeśli opcja ta jest ustawiona na opcjonalną, WSAS zoptymalizuje, czy i tylko w przypadku, gdy żądanie zostało zgłoszone. Typ żądania wskaże WSAS, czy powinien używać MTOM, czy nie. Dlaczego potrzebujemy tego rodzaju elastyczności Jak wspomniano wcześniej, często korzystne jest użycie kodowania Base 64 w małych plikach. W ten sposób możesz zdecydować, że niektóre operacje powinny korzystać z MTOM, a inne nie. Lub możesz to zrobić opcjonalnie w operacji, programowo wykonaj sprawdzanie rozmiaru wysyłanych danych, a następnie wybierz nadpisanie domyślnego MTOM, jeśli plik jest mały. Następnie wysyłasz MTOM. Przyjrzyjmy się, jak łatwo WSAS sprawia, że ​​wysyła wiadomość MTOM od klienta usługi WWW. Tworzenie klienta SOAP, który wysyła wiadomości MTOM Wysyłanie wiadomości MTOM z klienta jest tak samo łatwe jak wysłanie wiadomości MTOM z usługi WWW. Axis2 udostępnia kilka wygodnych interfejsów API. Przykład jest pokazany na listingu 6. Listing 6. Kod klienta do wysłania komunikatu MTOM Jak widać na listingu 6, kluczową rzeczą do zrobienia jest włączenie MTOM w opcjach dla klienta usługi internetowej. Gdy to zrobisz, Axis2 zoptymalizuje wszelkie dane binarne wysyłane do usługi internetowej automatycznie za pomocą MTOM. Widzieliśmy, jak wysyłać wiadomości MTOM z usługi internetowej i usługi internetowej, teraz pozwala spojrzeć na to, jak pracować z danymi, które zostały wysłane za pomocą MTOM. Obsługa komunikatu MTOM w usłudze sieci Web Załóżmy teraz, że masz usługę internetową, która akceptuje dane binarne w ramach wiadomości SOAP z klienta. Jeśli twoja usługa sieciowa działa na WSAS, nie musisz robić nic specjalnego, aby móc obsługiwać zoptymalizowane dane binarne od klientów. Twoi klienci mogą wysyłać wiadomości SOAP, które używają kodowania MTOM lub Base 64. Wszystko jest płynne dzięki WSAS. Listing 7 pokazuje przykład otrzymywania zoptymalizowanych danych. Listing 7. Usługa sieciowa odbierająca Zoptymalizowane SOAP Jak widzieliśmy wcześniej, Axiom API traktuje dane binarne jako węzeł tekstowy. Pozwala to na pojedynczy interfejs API do obsługi zoptymalizowanych i niezoptymalizowanych danych (zakodowanych w Base 64). Wystarczy uzyskać dostęp do obiektu DataHandler powiązanego z węzłem tekstowym (który zawiera dane binarne) i użyć go do uzyskania obiektu InputStream. Po wprowadzeniu InputStream można odczytywać wszystkie bajty i przetwarzać je w dowolny sposób. WSAS ułatwia obsługę komunikatów SOAP ze zoptymalizowanymi ładunkami danych binarnych. Przyjrzyjmy się, jak łatwo jest pracować z MTOM na klientach. Obsługa wiadomości MTOM w kliencie Brak jest magii do obsługi odpowiedzi serwisu internetowego MTOM. Widzieliśmy już, jak skonfigurować żądanie. Na rysunku 8 widać, jak radzić sobie z odpowiedzią zawierającą dane binarne zoptymalizowane za pomocą MTOM. Ponownie klucza używa Axiom API. Pozwala traktować dane binarne jako węzeł tekstowy, a następnie użyć DataHandler, aby uzyskać dane wejściowe InputStream. Ponownie, gdy już masz InputStream, możesz przetworzyć dane, których potrzebujesz. Przekonaliśmy się, w jaki sposób MTOM zapewnia idealną kombinację standaryzacji SOAP i wydajności do przenoszenia danych binarnych w wiadomości usługi sieciowej. Widzieliśmy, jak WSO2 WSAS implementuje specyfikację MTOM przy użyciu Axis2. Przyjrzeliśmy się, jak skonfigurować zarówno serwery usług internetowych, jak i klientów, aby wysyłać i odbierać zoptymalizowane wiadomości MTOM. Teraz mamy wszystko, czego potrzebujemy do dodawania danych binarnych do naszych serwisów internetowych przy użyciu WSAS WSO2. Chcesz pobrać WSO2 WSAS. Przeczytaj o najnowszych funkcjach WSOS WSAS 2.0. Ucz się i współpracuj ze społecznością WSO2 na wiki WSAS. Dowiedz się, jak łatwo udostępniać usługi Web Services za pomocą Axis2. Dowiedz się, jak Axis2 może włączyć twoje projekty SOA w artykule developerskim SOA z Axis2. Dowiedz się wszystkiego o współdziałaniu Axis z innymi implementacjami usług internetowych w tym wpisie w blogu TSS Interoperability. Zanurkuj się w AXIOM API w artykule developerWorks Poznaj jak najwięcej z przetwarzania XML przy użyciu AXIOM. Przeczytaj wszystko o XOP i MTOM w tym wpisie na blogu Marka Nottinghama. Interoperacyjność jest nazwą gry w przypadku usługi sieciowej, więc dowiedz się więcej o używaniu MTOM z artykułem Wysyłanie plików w kawałkach z usługami sieciowymi MTOM i 2.0. O autorze Michael Galpin jest architektem w serwisie eBay w San Jose w Kalifornii. Od 1998 roku zajmuje się oprogramowaniem i posiada tytuł magistra matematyki w California Institute of Technology.

No comments:

Post a Comment