2009-12-17 2 views
4

Я пишу SoapServer с PHP 5.2, чтобы вернуть список вакансий в другое приложение. Мой WSDL документ требует сложного типа вдоль линий:Структурирование PHP-массива для использования в SOAP с WSDL

<xsd:element name="Vacancies">        
    <xsd:complexType> 
    <xsd:sequence> 
     <xsd:element name="Vacancy" type="ns:VacancyType" minOccurs="0" maxOccurs="unbounded"></xsd:element> 
    </xsd:sequence> 
    </xsd:complexType> 
</xsd:element> 

Моей функции генерирует большой, вложенный массив, чтобы собрать каждую вакансию, а затем возвращая массив массивов (то есть: вакансии) в SoapServer.

К сожалению, каждый массив индексируется. Поэтому каждый элемент VacancyType в разделе «Вакансии» имеет уникальный индекс. Это, похоже, отключает определение WSDL, и возвращаемые мне данные просто вызывают ошибку синтаксического анализа. Обычно я использую ассоциативные массивы для значений пары ключей, но поскольку я имею дело с n экземплярами VacancyType, которые не будут работать, поскольку не было бы уникальной ссылки.

Существует ли известное обходное решение для такого сценария (например, возможно, объект), или я должен переработать мой документ WSDL для обслуживания индексированных массивов?

Thanks

+0

Можете ли вы объяснить вашу структуру данных лучше? Какая связь между вакансиями и типом? Вакансия может иметь несколько типов? Возможно, вы могли бы добавить образец вашего массива к вопросу. –

+0

Извините, если это немного вводит в заблуждение, VacancyType относится к определению XSD для сложного типа (я не думаю, что мне нужно его подробно описать). Во всех смыслах и целях это можно было бы назвать Vacancy. Ответ для этой функции должны возвращать что-то вроде: * Вакансии * VacancyType * Данные в этом ... * VacancyType * Данные в этом ... * VacancyType * Данные в этом ... Я создаю это с помощью массива и позволяю SoapServer преобразовывать его в соответствующий ответ на основе WSDL, но он борется с индексированным массивом VacancyType – johan

+0

. Где возникла проблема? Марширование массива в SOAPRequest? Разве это не просто серия вложенных объектов Vacancy? – awithrow

ответ

0

Вы подарили nuSAOP попробовать? Не требует никакого другого установленного PHP LIBS:

Согласно PHP документации, PHP поддерживает подмножества из SOAP 1.1, SOAP 1.2 и WSDL 1.1.

1

В соответствии с http://sam.xnet.tk/post/15/php-soap-server-part-2/ стиль rpc/literal работает с последовательностью xsd. Однако я не могу заставить его работать с документированным/литеральным обернутым стилем.

0

В конце концов, я нашел решение: я построить XML по mysefl и использовать

new SoapVar('<myitem>...</myitem><myitem>...</myitem>', XSD_ANYXML);