Czy ktoś może mi wyjaśnić różnice między stylem dokumentu a usługami sieciowymi w stylu RPC?
Istnieją dwa modele stylów komunikacji, które są używane do tłumaczenia powiązania WSDL na treść komunikatu SOAP. Są to:
Dokument i RPC
Zaletą przy użyciu modelu styl dokumentu jest to, że można zorganizować ciału mydło jakikolwiek sposób chcesz go tak długo, jak zawartość treści wiadomości SOAP jest każda dowolna instancja XML. Styl dokumentu jest również nazywany stylem zorientowanym na komunikaty .
Jednak w modelu stylu RPC struktura treści żądania SOAP musi zawierać zarówno nazwę operacji, jak i zestaw parametrów metody. Model stylu RPC zakłada określoną strukturę instancji XML zawartej w treści wiadomości.
Ponadto istnieją dwa modele użycia kodowania, które są używane do tłumaczenia powiązania WSDL na komunikat SOAP. Są: dosłowne i zakodowane
W przypadku korzystania z modelu użycia literału zawartość treści powinna być zgodna ze strukturą schematu XML (XSD) zdefiniowaną przez użytkownika . Zaleta jest podwójna. Po pierwsze, możesz zweryfikować treść wiadomości za pomocą schematu XML zdefiniowanego przez użytkownika, a ponadto możesz również przekształcić wiadomość przy użyciu języka transformacji, takiego jak XSLT.
W przypadku modelu użycia zakodowanego (SOAP) komunikat musi używać typów danych XSD, ale struktura komunikatu nie musi być zgodna z żadnym schematem XML zdefiniowanym przez użytkownika. Utrudnia to weryfikację treści wiadomości lub używanie przekształceń opartych na XSLT w treści wiadomości.
Połączenie różnych stylów i modeli użytkowania daje nam cztery różne sposoby tłumaczenia powiązania WSDL na wiadomość SOAP.
Document/literal
Document/encoded
RPC/literal
RPC/encoded
Polecam przeczytanie tego artykułu zatytułowanego Który styl WSDL powinienem użyć? autorstwa Russella Buteka, który ma fajną dyskusję na temat różnych stylów i używa modeli do tłumaczenia powiązania WSDL na wiadomość SOAP oraz ich względnych mocnych i słabych stron.
Po odebraniu artefaktów w obu stylach komunikacji wywołuję metodę na porcie. Teraz nie różni się to stylem RPC i stylem dokumentu. Więc jaka jest różnica i gdzie ta różnica jest widoczna?
Miejscem, w którym można znaleźć różnicę, jest „ODPOWIEDŹ”!
Styl RPC:
package com.sample;
import java.util.ArrayList;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
@WebService
@SOAPBinding(style=Style.RPC)
public interface StockPrice {
public String getStockPrice(String stockName);
public ArrayList getStockPriceList(ArrayList stockNameList);
}
Komunikat SOAP dla drugiej operacji będzie miał puste wyjście i będzie wyglądał następująco:
Odpowiedź w stylu RPC:
<ns2:getStockPriceListResponse
xmlns:ns2="http://sample.com/">
<return/>
</ns2:getStockPriceListResponse>
</S:Body>
</S:Envelope>
Styl dokumentu:
package com.sample;
import java.util.ArrayList;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
@WebService
@SOAPBinding(style=Style.DOCUMENT)
public interface StockPrice {
public String getStockPrice(String stockName);
public ArrayList getStockPriceList(ArrayList stockNameList);
}
Jeśli uruchomimy klienta dla powyższego SEI, wynik będzie:
123 [123, 456]
Te dane wyjściowe pokazują, że elementy ArrayList są wymieniane między usługą internetową a klientem. Ta zmiana została dokonana tylko przez zmianę atrybutu stylu adnotacji SOAPBinding. Komunikat SOAP dla drugiej metody z bogatszym typem danych jest pokazany poniżej w celach informacyjnych:
Odpowiedź dotycząca stylu dokumentu:
<ns2:getStockPriceListResponse
xmlns:ns2="http://sample.com/">
<return xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xsi:type="xs:string">123</return>
<return xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xsi:type="xs:string">456</return>
</ns2:getStockPriceListResponse>
</S:Body>
</S:Envelope>
Wniosek
- Jak można zauważyć w dwóch komunikatach odpowiedzi SOAP, możliwe jest sprawdzenie poprawności komunikatu odpowiedzi SOAP w przypadku stylu DOCUMENT, ale nie w przypadku usług sieciowych w stylu RPC.
- Podstawową wadą używania stylu RPC jest to, że nie obsługuje on bogatszych typów danych, a styl dokumentu polega na tym, że wnosi pewną złożoność w postaci XSD do definiowania bogatszych typów danych.
- Wybór jednej z nich zależy od wymagań dotyczących operacji / metody i oczekiwanych klientów.
Podobnie, w jaki sposób protokół SOAP przez HTTP różni się od XML przez HTTP? W końcu SOAP to także dokument XML z przestrzenią nazw SOAP. Więc jaka jest różnica tutaj?
Dlaczego potrzebujemy standardu takiego jak SOAP? Wymieniając dokumenty XML za pośrednictwem protokołu HTTP, dwa programy mogą wymieniać bogate, ustrukturyzowane informacje bez wprowadzania dodatkowego standardu, takiego jak SOAP, w celu jawnego opisania formatu koperty wiadomości i sposobu kodowania ustrukturyzowanej treści.
SOAP zapewnia standard, dzięki czemu programiści nie muszą wymyślać niestandardowego formatu wiadomości XML dla każdej usługi, którą chcą udostępnić. Biorąc pod uwagę sygnaturę wywoływanej metody usługi, specyfikacja SOAP określa jednoznaczny format komunikatu XML. Każdy programista zaznajomiony ze specyfikacją SOAP, pracujący w dowolnym języku programowania, może sformułować poprawne żądanie XML SOAP dla określonej usługi i zrozumieć odpowiedź usługi, uzyskując następujące szczegóły usługi.
- Nazwa serwisu
- Nazwy metod implementowane przez usługę
- Sygnatura każdej metody
- Adres realizacji usługi (wyrażony jako URI)
Użycie protokołu SOAP usprawnia proces ujawniania istniejącego komponentu oprogramowania jako usługi sieci Web, ponieważ sygnatura metody usługi identyfikuje strukturę dokumentu XML używaną zarówno w przypadku żądania, jak i odpowiedzi.