2009-09-24 7 views
2

Я столкнулся с несколькими примерами веб-сервисов на основе SOAP, где автоматическое оснащение не позволяет создать клиент, который работает.Как компенсировать плохой WSDL?

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

Я не уверен, что наиболее подходящий ответ - если мы предположим, что очевидный (получить провайдера, чтобы исправить их вещи) недоступен.

Некоторые варианты я могу думать:

  • сделать фиксированный WSDL?
  • Взломать сгенерированный код?
  • Любые другие варианты?
  • Нет хороших вариантов?

Какой хороший опыт имеют люди? Что работает в реальной среде?

Благодаря

+2

WSDL определяет контракт, если контракт является неправильным, тогда его необходимо устранить. – RichardOD

+3

@ RichardOD, конечно, в идеальном мире. Но некоторые компании/отдельные лица просто не заинтересованы в том, чтобы отстаивать свою сторону контракта. И иногда вы ничего не можете сделать в реальном мире – Glen

+1

@Glen, то это сродни использованию неподдерживаемого продукта, который в моем мире означал бы, что я действительно не должен его использовать в первую очередь. Вы не просто идете в бизнес, с которым хотите работать, передайте им контракт и ожидайте, что они будут соответствовать. Они должны предоставить вам свою часть контракта. Если они этого не делают или нет, это означает, что они не хотят заниматься этим бизнесом, и, вероятно, не стоит пытаться их принуждать. И модификация их предоставленного WSDL является пограничным кодовым взломом. – nicerobot

ответ

1

Я хотел бы попробовать первый вариант, сделать фиксированный WSDL. Если это не сработает, вы можете отказаться от взлома сгенерированного кода.

Конечно, если служба радикально отличается от WSDL, вам может быть не повезло с этими двумя вариантами.

Если вам повезет, есть другой способ. Некоторые веб-службы поддерживают поддержку динамически созданного WSDL.

Я знаю, что с помощью службы AXIS 1.4 вы можете выполнить GET на сервисе url + '? WSDL' и вернуть динамически генерируемый WSDL.

например. http://foo.com/service/?WSDL

1

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