Чи може хтось пояснити мені різницю між стилем документа та веб-послугами у стилі RPC?
Існує дві моделі стилю спілкування, які використовуються для перекладу прив'язки WSDL до тіла повідомлення SOAP. Вони є:
Документ і RPC
Перевага використання моделі стилю документа є те , що ви можете структурувати тілу SOAP так , як ви хочете його до тих пір , поки вміст тіла SOAP повідомлень є будь-яким довільним екземпляром XML. Стиль документа також називають стилем, орієнтованим на повідомлення .
Однак у моделі стилю RPC структура тіла запиту SOAP повинна містити як ім'я операції, так і набір параметрів методу. Модель стилю RPC передбачає певну структуру для екземпляра XML, що міститься в тілі повідомлення.
Крім того, є дві моделі використання кодування, які використовуються для перекладу прив'язки WSDL до повідомлення SOAP. Вони бувають буквальними та закодованими
При використанні моделі буквального використання вміст тіла повинен відповідати визначеній користувачем структурі XML-схеми (XSD) . Перевага подвійна. По-перше, ви можете перевірити тіло повідомлення за допомогою визначеної користувачем XML-схеми, крім того, ви також можете перетворити повідомлення, використовуючи мову перетворення, як XSLT.
З кодованою моделлю використання (SOAP) повідомлення повинно використовувати типи даних XSD, але структура повідомлення не повинна відповідати будь-якій визначеній користувачем схемі XML. Це ускладнює перевірку тіла повідомлення або використання перетворень, заснованих на XSLT, на тілі повідомлення.
Поєднання різних моделей стилю та використання дає нам чотири різні способи перекласти прив'язку WSDL до повідомлення SOAP.
Document/literal
Document/encoded
RPC/literal
RPC/encoded
Я б порадив вам прочитати цю статтю під назвою Який стиль WSDL я повинен використовувати? від Рассела Бутека, який приємно обговорює різні стилі та моделі використання для перекладу прив'язки WSDL до повідомлення SOAP, а також їх відносні сильні та слабкі сторони.
Після отримання артефактів в обох стилях спілкування я викликаю метод на порту. Зараз це не відрізняється за стилем RPC та стилем документа. То в чому різниця і де ця різниця видно?
Місце, де ви можете знайти різницю - це "ВІДПОВІДЬ"!
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);
}
Повідомлення SOAP для другої операції буде мати порожній вихід і виглядатиме так:
Відповідь стилю RPC:
<ns2:getStockPriceListResponse
xmlns:ns2="http://sample.com/">
<return/>
</ns2:getStockPriceListResponse>
</S:Body>
</S:Envelope>
Стиль документа:
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);
}
Якщо ми запускаємо клієнта для вищезазначеного SEI, виводиться:
123 [123, 456]
Цей результат показує, що елементи ArrayList обмінюються між веб-службою та клієнтом. Ця зміна була зроблена лише за рахунок зміни атрибуту стилю анотації SOAPBinding. Повідомлення SOAP для другого методу з більш багатим типом даних показано нижче для довідки:
Відповідь стилю документа:
<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>
Висновок
- Як ви зауважили у двох повідомленнях відповідей SOAP, можна перевірити повідомлення відповіді SOAP у випадку стилю DOCUMENT, але не у веб-службах RPC.
- Основним недоліком використання стилю RPC є те, що він не підтримує розширені типи даних, а стиль використання документа - це те, що він приносить певну складність у вигляді XSD для визначення більш багатих типів даних.
- Вибір одного з них залежить від вимог до операції / методу та очікуваних клієнтів.
Подібним чином, чим SOAP через HTTP відрізняється від XML через HTTP? Адже SOAP - це також XML-документ із простором імен SOAP. То яка тут різниця?
Навіщо нам такий стандарт, як SOAP? Обмінюючись XML-документами через HTTP, дві програми можуть обмінюватися багатою структурованою інформацією без введення додаткового стандарту, такого як SOAP, для явного опису формату конвертів повідомлень та способу кодування структурованого вмісту.
SOAP забезпечує стандарт, завдяки чому розробникам не потрібно винаходити власний формат повідомлення XML для кожної служби, яку вони хочуть зробити доступною. З огляду на підпис методу служби, який слід викликати, специфікація SOAP прописує однозначний формат повідомлення XML. Будь-який розробник, знайомий із специфікацією SOAP, який працює на будь-якій мові програмування, може сформулювати правильний запит SOAP XML для певної послуги та зрозуміти відповідь служби, отримавши такі деталі служби.
- Назва послуги
- Назви методів, реалізовані службою
- Підпис методу кожного методу
- Адреса реалізації послуги (виражена як URI)
Використання SOAP впорядковує процес виставлення існуючого програмного компонента як веб-служби, оскільки підпис методу служби ідентифікує структуру документа XML, що використовується як для запиту, так і для відповіді.