Пустой тег <types>WSDL и поддержка SOAP YAWS - PullRequest
0 голосов
/ 23 марта 2011

Я пытаюсь вызвать WebService через SOAP, используя Erlang и YAWS (в частности, модуль yaws_soap_lib).Примеры, опубликованные на http://yaws.hyber.org/soap_intro.yaws, работают для меня.

Однако, при попытке вызвать мой собственный веб-сервис, YAWS дает сбой.Первой проблемой были партнерские ссылки в WSDL, которые были размещены там из-за BPEL, стоящего за этим сервисом.Я удалил их (пока).

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

  1. Erlang SOAP библиотекой, которая не может обработать пустой тег или
  2. плохо сгенерированный WSDL?

Кто-нибудь знает лучшую библиотеку Erlang для обработки SOAP?Я взглянул на erlsoap, но он не поддерживает WSDL.

EDIT: ошибка, вызванная упомянутым WSDL:

<code>
::error:function_clause
  in function erlsom_add:add_model/2
    called as add_model({model,[{type,'_document',sequence,
              [{el,[{alt,'soap:Envelope','soap:Envelope',...},
                    {alt,'soap:Header',...},
                    {alt,...},
                    {...}],
                   1,1,1}],
              [],undefined,undefined,1,1,1,false,...},
        {type,'soap:detail',sequence,
              [{el,[{alt,'#any',...},{alt,...},{...}|...],0,unbound,1}],
              [],
              {anyAttr,"lax","##any",[...]},
              undefined,2,1,1,...},
        {type,'soap:Fault',sequence,
              [{el,[{alt,...}],1,1,...},
               {el,[{...}],1,...},
               {el,[...],...},
               {el,...}],
              [],undefined,undefined,5,1,...},
        {type,'soap:Body',sequence,
              [{el,[{...}|...],0,...}],
              [],
              {anyAttr,[...],...},
              undefined,2,...},
        {type,'soap:Header',sequence,
              [{el,[...],...}],
              [],
              {anyAttr,...},
              undefined,...},
        {type,'soap:Envelope',sequence,[{el,...},{...}|...],[],{...},...}],
       [{ns,"http://schemas.xmlsoap.org/soap/envelope/","soap"},
        {ns,"http://www.w3.org/2001/XMLSchema","xsd"}],
       "http://schemas.xmlsoap.org/soap/envelope/",[]},undefined)
  in call from yaws_soap_lib:initModel2/5

Для тех, кто знаком с исходным кодом:Проблема в том, что массив Xsds, возвращаемый функцией getXsdsFromWsdl, пуст.

Ответы [ 3 ]

0 голосов
/ 23 марта 2011

Я бы догадался, учитывая ошибку предложения функции, что erlsom не обрабатывает какой-то конкретный ввод функции как неопределенный.Но я предполагаю, что вы уже проверили свой WSDL, чтобы убедиться, что он в порядке?Кроме того, есть ли шанс опубликовать WSDL где-нибудь, чтобы мы могли его увидеть?

0 голосов
/ 04 ноября 2011

Проблема была решена в последней версии YAWS. Для построения упомянутой модели WSDL должна быть вызвана следующая команда:

yaws_soap_lib:initModel(WSDL_FILE_URL, [{include_fun, {erlsom_lib, find_xsd}}])
0 голосов
/ 23 марта 2011

Моя схема XML немного ржавая, но, насколько я вижу, схема допускает пустые <types/> элементы. Это предполагает первый вариант, хотя в этом трудно быть уверенным. Какое сообщение об ошибке вы получаете?

...