Мыльный клиент php генерирует исключение

У меня есть клиент php и служба на основе gsoap (linux). При вызове одного из методов (служб) я получаю следующее исключение:

Нарушение ограничения проверки: отсутствует идентификатор для ссылки #ref1 в элементе env:Envelope.

Ошибка связана с одним аргументом в вызове, который представляет сложный аргумент. Основой этого аргумента являются «данные массива», показанные ниже в файле wsdl.

Вот соответствующий wsdl:

  <complexType name="data-elem">
   <sequence>
     <element name="name" type="xsd:string" minOccurs="0" maxOccurs="1" nillable="true"/>
     <element name="list" type="xsd:string" minOccurs="0" maxOccurs="1" nillable="true"/>
     <element name="length" type="xsd:int" minOccurs="1" maxOccurs="1"/>
     <element name="stype" type="xsd:int" minOccurs="1" maxOccurs="1"/>
     <element name="dtype" type="xsd:int" minOccurs="1" maxOccurs="1"/>
     <element name="permission" type="xsd:int" minOccurs="1" maxOccurs="1"/>
     <element name="message" type="xsd:string" minOccurs="0" maxOccurs="1" nillable="true"/>
    <choice>
     <element name="cdata" type="xsd:string" minOccurs="0" maxOccurs="1" nillable="true"/>
     <element name="idata" type="xsd:int" minOccurs="1" maxOccurs="1"/>
     <element name="fdata" type="xsd:float" minOccurs="1" maxOccurs="1"/>
     <element name="ddata" type="xsd:double" minOccurs="1" maxOccurs="1"/>
    </choice>
   </sequence>
  </complexType>
  <complexType name="data">
   <sequence>
     <element name="elems" type="ns:data-elem" minOccurs="0" maxOccurs="unbounded"/>
   </sequence>
  </complexType>
  <complexType name="array-data">
   <sequence>
     <element name="records" type="ns:data" minOccurs="0" maxOccurs="unbounded"/>
   </sequence>

Вот как выглядят переданные данные для этого аргумента:

stdClass Object ( [records] => Array ( [0] => stdClass Object ( [elems] => Array ( [0] => stdClass Object ( [name] => SERVICE.d01 [list] => [length] => 15 [stype] => 1 [dtype] => 0 [permission] => 3 [message] => [cdata] => [email protected] ) [1] => stdClass Object ( [name] => SERVICE.servdef [list] => [length] => 0 [stype] => 3 [dtype] => 0 [permission] => 1 [message] => [idata] => 3 ) ) ) [1] => stdClass Object ( [elems] => Array ( [0] => stdClass Object ( [name] => SERVICE.d01 [list] => [length] => 15 [stype] => 1 [dtype] => 0 [permission] => 3 [message] => [cdata] => [email protected] ) [1] => stdClass Object ( [name] => SERVICE.servdef [list] => [length] => 0 [stype] => 3 [dtype] => 0 [permission] => 1 [message] => [idata] => 3 ) ) ) ) )

Я не совсем уверен, что переданные данные соответствуют схеме, но если я передаю один массив «записей», вызов службы работает без ошибок.

Пример с одним массивом выглядит так:

stdClass Object ( [records] => Array ( [0] => stdClass Object ( [elems] => Array ( [0] => stdClass Object ( [name] => SERVICE.d01 [list] => [length] => 15 [stype] => 1 [dtype] => 0 [permission] => 3 [message] => [cdata] => [email protected] ) [1] => stdClass Object ( [name] => SERVICE.servdef [list] => [length] => 0 [stype] => 3 [dtype] => 0 [permission] => 1 [message] => [idata] => 2 ) ) ) ) )

Ошибка полностью генерируется при проверке клиента php. Сервер никогда не вызывается.

У кого-нибудь есть какие-либо указатели или предложения? Что мне не хватает? Какие еще данные я могу предоставить, чтобы ответить на этот вопрос? Как это отладить?


person user44021    schedule 13.03.2015    source источник
comment
Обновление по этому поводу. Я создал другую службу, которая возвращает тот же объект, что и тот, с которым у клиента возникли проблемы, а затем сравнил объекты. Объекты точно такие же. Так что это похоже на ошибку в реализации мыла php. Есть предложения, как обойти это?   -  person user44021    schedule 13.03.2015
comment
Это оказалось проблемой из-за того, что одни и те же объекты в двух отдельных узлах являются ссылками, а не дублируются в xml. См. ссылку.   -  person user44021    schedule 14.03.2015