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