WSDL проблема с PHP объектами, странноэлементы - PullRequest
2 голосов
/ 07 мая 2011

Я пытаюсь разобраться с PHP-кодом, который обслуживает некоторые данные через WSDL.В файле WSDL есть два метода, один из которых работает, а другой, который полностью идентичен, не является

GetAllProducts возвращает:

<ns1:GetAllProductsResponse>
    <describedProductArray>
        <DescribedProduct>
            <id> ... </id>
            <foo> ... </foo>
        </DescribedProduct>
        <Describedproduct>
            ...
        </DescribedProduct>
        ...
</describedProductArray>
etc

Но GetAllDischargedProducts возвращает

<ns1:GetAllDischargedProductsResponse>
     <dischargedProductArray>
        <DischargedProduct>
           <SOAP-ENC:Struct>
              <DischargeDate> ... </DischargeDate>
              <id> ... </id>
           </SOAP-ENC:Struct>
           <SOAP-ENC:Struct>
              <DischargeDate> ... </DischargeDate>
              <id> .. </id>
           </SOAP-ENC:Struct>
           ...
        </DischargedProduct>
    <dischargedProductArray>

Я должен избавиться от этих элементов и поместить каждый набор данных в отдельный элемент.PHP часть выглядит хорошо.Я предполагаю, что проблема где-то в файле WSLD.

Часть, которая описывает данные, такова:

<complexType name="DescribedProduct">
    <complexContent>
        <extension base="self:Product">
            <sequence>
                <element name="Name" type="self:Name" />
                <element name="Barcode" type="self:Barcode" />
                <element name="Exportation" type="boolean" />
                <element name="Company" type="self:Company" />
                <element name="Prescription" type="self:Prescription" />
                <element name="CommercialForm" type="self:CommercialForm" />
                <element name="IngredientArray" type="self:IngredientArray" />
                <element name="DayToExcretion" type="self:DayToExcretion" />
            </sequence>
        </extension>
    </complexContent>
</complexType>

<complexType name="DescribedProductArray">
    <sequence>
        <element name="DescribedProduct" type="self:DescribedProduct" minOccurs="0" maxOccurs="unbounded" />
    </sequence>
</complexType>

<simpleType name="DischargeDate">
    <restriction base="date" />
</simpleType>           

<complexType name="DischargedProduct">
    <complexContent>
        <extension base="self:Product">
            <sequence>
                <element name="DischargeDate" type="self:DischargeDate" />
            </sequence>
        </extension>
    </complexContent>
</complexType>

<complexType name="DischargedProductArray">
    <sequence>
        <element name="DischargedProduct" type="self:DischargedProduct" minOccurs="0" maxOccurs="unbounded" />
    </sequence>
</complexType>

1 Ответ

1 голос
/ 25 июля 2012

Это потому, что простому типу DischargeDate было дано ограничение.Я бы посоветовал использовать простой строковый тип для этого элемента и выполнить любой вид проверки дат в вашем коде.

Поэтому измените определение DischargedProduct на что-то вроде:

<complexType name="DischargedProduct">
    <complexContent>
        <extension base="self:Product">
            <sequence>
                <element name="DischargeDate" type="string" />
            </sequence>
        </extension>
    </complexContent>
</complexType>

и удалите определение DischargeDate.

...