PHP SoapClient не соответствует типу, если задано ограничение - PullRequest
0 голосов
/ 27 июня 2018

У меня проблема с PHP SoapClient. Объекты, сгенерированные клиентом, не имеют всех необходимых атрибутов.

В моем случае 2 элемента (описание, описание2) имеют одинаковый сложный тип (текст). У одного из них есть ограничение (описание). В полученном объекте PHP отсутствует аттрибут "language".

Пример из WSDL:

<xs:complexType name="Text">
  <xs:simpleContent>
     <xs:extension base="xs:string">
        <xs:attribute name="language" type="string"/>
     </xs:extension>
  </xs:simpleContent>
</xs:complexType>

<xs:element maxOccurs="unbounded" minOccurs="1" name="description">
<xs:complexType>
    <xs:simpleContent>
        <xs:restriction base="tns:Text">
            <xs:maxLength value="400"/>
        </xs:restriction>
    </xs:simpleContent>
</xs:complexType>
</xs:element>

<xs:element maxOccurs="unbounded" minOccurs="0" name="description2" type="tns:Text">
<xs:annotation>
    <xs:documentation>...</xs:documentation>
</xs:annotation>
</xs:element>

Объекты в PHP

public 'description' => 
        array (size=1)
          0 => 
            object(stdClass)[6]
              public '_' => string 'some string' (length=17)
public 'description2' => 
        array (size=1)
          0 => 
            object(stdClass)[7]
              public '_' => string 'some other string' (length=1796)
              public 'language' => string 'de_DE' (length=5)

WSDL действителен. Я не могу изменить WSDL. Карта типов для SoapClient не имеет никакого эффекта, поскольку тип не соответствует описанию.

Как получить атрибут языка в описании?

...