2009-10-15 2 views
3

Я только что закончил читать о SOAP через Spring-WS в «Весне в действии», второе издание, Крэйг Уоллс из Manning Publications Co. Они пишут о контракте сначала, как и документы Spring, сообщение и метод XML, а затем преобразование его в XSD, а затем снова в WSDL, при этом проводка маршрутизации сортировки и обслуживания весной.SOAP и Spring

Должен признаться, я не уверен. Почему это лучший путь, чем, скажем, создание сервисного интерфейса и создание моего сервиса на основе этого интерфейса? Это довольно близко к определению моего REST @Controllers в Spring3. Есть ли у меня варианты перехода по этому пути, используя веб-службы SOAP с Spring?

Также: я хотел бы дублировать уже существующий веб-сервис. У меня есть WSDL, и я могу разместить свой сервис вместо него. Это рекомендуется вообще? Если да, то какой рекомендуемый подход?

Приветствия

Nik 

ответ

6

Я думаю, что вы должны иметь ваши провода скрещены.

Первый контракт означает определение WSDL, а затем создание Java-кода для поддержки этого WSDL.

Последний договор означает создание вашего Java-кода и создание WSDL позже.

Опасность, связанная с последним контрактом, заключается в том, что ваш WSDL автоматически генерируется из вашего Java-кода, и вы реорганизуете свой код Java, это приводит к изменению WSDL.

Spring-WS only supports contract first

2.3.1. Хрупкость

Как уже упоминалось ранее, контракт, последний стиль разработки результаты в вашем веб-сервиса по контракту (WSDL и XSD вашей) генерируется из вашего контракта Java (обычно интерфейс ). Если вы используете этот подход , у вас не будет никакой гарантии , что контракт остается постоянным над раз. Каждый раз, когда вы меняете свой контракт на Java и переставляете его, возможно, последующие изменения в сети будут выполнены в соответствии с договором на обслуживание.

Кроме того, не все пакеты SOAP создают тот же контракт с веб-сервисом с Java-контракта. Это означает, что меняет текущий стек SOAP на другой (по любой причине), также может изменить ваш веб-сервис. договор.

При изменении контракта веб-службы, пользователи договора должны быть проинструктированы, чтобы получить новый контракт и потенциально изменить свой код для размещения каких-либо изменений в договора.

Для того чтобы контракт был полезным, он должен оставаться постоянным до тех пор, пока невозможен.Если контракт изменится, вы получите со всеми пользователями ваших услуг и проинструктируйте их получить новую версию контракта.

+0

Я знаю об этом, но, на мой взгляд, если у меня есть определенный интерфейс для SOAP-сервиса, который так же изменен, как и мой XSD и, следовательно, мой WSDL. – niklassaers

+0

Дело в том, что WSDL + Schema - это интерфейс между клиентом и сервером, и поэтому его следует поддерживать в качестве основного определения, с кодом, следующим за ним. – skaffman

3

Вопрос Toolkit о том, что интерфейсы Java являются более хрупкими, верны, но я думаю, что их больше.

Как и в случае несоответствия объектно-реляционного импеданса, существует также несоответствие объекта-XML. Весенний веб-сервис docs прекрасно справляется с объяснением того, как коллекции и остальные могут создавать XML-документ из класса Java или .NET.

Если вы возьмете подход Spring и начнете с схемы, вам будет лучше. Он будет более стабильным, и это позволит «утиная печать». Клиенты могут игнорировать элементы, которые им не нужны, поэтому вы можете изменить схему, добавив новые элементы, не затрагивая их.

+0

Не правда ли, что если я добавлю в свой интерфейс, я все равно сохраню совместимость? – niklassaers

+0

Да, если вы не влияете на существующие сообщения в WSDL. Но ваш интерфейс изменится, если у вас есть объекты Java в качестве параметров или возвращаемые значения в вашем интерфейсе, и вы вносите изменения в один из них. – duffymo

Смежные вопросы