Может ли кто-нибудь объяснить мне различия между веб-службами в стиле документа и стиля 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-документа, используемую как для запроса, так и для ответа.