Массив элемента в файле WSDL - PullRequest
0 голосов
/ 19 апреля 2011

Здравствуйте, я разрабатываю некоторые веб-сервисы в java, поэтому я создал файл wsdl для описания этих сервисов.

С моим wsdl я создаю веб-сервисы (сторона сервера).но я не могу создать клиентскую сторону, потому что

Я думаю, что проблема в

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:bil="http://tempuri.org/Services/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
   <soapenv:Header/>
   <soapenv:Body>
      <bil:ArrayOfElement soapenc:arrayType="?" soapenc:offset="?" id="?" href="?">
         <!--1 or more repetitions:-->
         <Element>
            <code>?</code>
            <codeElement>?</codeElement>
            <TypeService>?</TypeService>
         </Element>
      </bil:ArrayOfElement>
   </soapenv:Body>
</soapenv:Envelope>

На самом деле, я не знаю, что мы должны поместить в эту строку:

<bil:ArrayOfElement soapenc:arrayType="?" soapenc:offset="?" id="?" href="?">

И для моих тестов я отправляю этот конверт, и он работает (но, как вы видите, это другой wsdl):

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:bil="http://tempuri.org/Services/">
   <soapenv:Header/>
   <soapenv:Body>
      <bil:ArrayOfElement>
                   <Element>
                <code>exmepleCode</code>
                <codeElement>exmempleCodeElement</codeElement>
                <TypeService>a_Service_Type</TypeService>
             </Element>
      </bil:ArrayOfElement>

      <!-- other elements-->

   </soapenv:Body>
</soapenv:Envelope>

1 Ответ

0 голосов
/ 21 апреля 2011

Как вы создали WSDL?

Одна важная проблема при работе с веб-службами или схемами xml (xsd) в целом заключается в том, что не существует простого однозначного сопоставления между типами xsd и языком (в данном случае java).

Одним из следствий этого является то, что при отображении «туда-обратно» (с java на xsd, а затем с xsd на java) вы не всегда получаете то, с чего начинали, особенно при использовании не простых типов, таких как массивы или другие контейнеры .

Решение в этом случае состоит в том, чтобы создать «правильную» схему xsd и извлечь из этой схемы javadefinitions для клиента и сервера - выполняется только одно преобразование xsd в java, поэтому проблем с отображением маршрутизации отключений не возникает. встречается. Чтобы создать такой xsd, вы должны использовать нативные методы определения коллекций в xsd, который в основном добавляет атрибуты minOccurs и maxOccurs к базовому элементу.

вы можете найти более подробную ссылку здесь

Обратите внимание, что вам не нужно использовать xsd, созданный вручную - вы также можете использовать любой xsd-редактор (в большинстве современных IDE), чтобы получить те же результаты.

...