PHP SOAP: атрибут уже определен в WSDL-файле

Я использую wsdl-файл, который работает с SoapUI, но не с PHP Soap.

Код:

<?php
$WSDL     = new SoapClient('Foo/bar.wsdl');
?>

Трассировки стека:

Неустранимая ошибка: исключение Uncaught SoapFault: [WSDL] SOAP-ERROR: схема синтаксического анализа: атрибут 'http://url.com/LGW/2009/:unitOfMeasure' уже определен в Foo.php:2 Трассировка стека: #0 Foo.php (2): SoapClient->SoapClient('Foo/bar.wsdl', Array) #1 {main} добавлено в Foo.php в строке 2

Кто-нибудь знает, что пытается мне сказать библиотека PHP-SOAP. WSDL-файл должен быть действительным (по крайней мере, PEAR SOAP и SoapUI работают без проблем).

WSDL содержит несколько строк <s:attribute ref="tns:unitOfMeasure"/> Поэтому я предполагаю, что это относится к ним, но на самом деле не понимаю, как это исправить...


person sarte    schedule 23.10.2012    source источник
comment
Я думаю, что это довольно ясно, этот атрибут уже определен. И даже подскажет где.   -  person Peon    schedule 23.10.2012
comment
Я это знаю, но почему это проблема? Тот же файл подтверждает OK с помощью PEAR::SOAP и SoapUI.   -  person sarte    schedule 23.10.2012
comment
Это решено. В конце концов, WSDL недействителен. WSDL сообщает о создании нескольких одинаковых атрибутов пространства имен. Некоторые библиотеки SOAP, кажется, подтверждают это как хороший XML. PHP не   -  person sarte    schedule 24.10.2012
comment
@sarte: Опубликуйте решение как ответ на свой вопрос и примите его, когда сможете.   -  person Madara's Ghost    schedule 24.10.2012


Ответы (1)


В WSDL-файле были ошибочные инструкции, которые предлагали следовать XML

<ns:foo unitOfMeasure="foo" ns:unitOfMeasure="invalid">
  <ns:bar unitOfMeasure="foo" ns:unitOfMeasure="invalid"></ns:bar>
</ns:foo>

Это дало уже определенную ошибку. Атрибут ns:unitOfMeasure считается уникальным из-за объявления пространства имен и не может быть переопределен.

Я удалил строки из WSDL-файла, и после этого все заработало.

По-видимому, библиотеки Java, PEAR и, возможно, .NET SOAP будут принимать такие инструкции, хотя они недействительны в сообщениях SOAP/WSDL.

person sarte    schedule 24.10.2012