Использование Zend_Soap_Wsdl_Strategy_ArrayOfTypeComplex со строкой [] - PullRequest
1 голос
/ 18 февраля 2010

В настоящее время я использую Zend_Soap_AutoDiscover для генерации моего WSDL-файла, проблема в том, что я хочу, чтобы этот wsdl обрабатывал выходные данные типа ArrayOfString (string []). поэтому я изменил стратегию сложного типа на Zend_Soap_Wsdl_Strategy_ArrayOfTypeSequence, она работает правильно, но проблема в том, что на самом деле выходные данные не являются массивом строк, а выходные xml выглядят примерно так:

<xsd:complexType name="ArrayOfString">
    <xsd:sequence>
        <xsd:element name="item" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
</xsd:complexType>

Но я хочу вывод как это:

<xsd:complexType name="ArrayOfstring">
    <xsd:complexContent>
        <xsd:restriction base="soapenc:Array">
            <xsd:attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:string[]"/>
        </xsd:restriction>
    </xsd:complexContent>
</xsd:complexType>

Итак, я использовал новую стратегию Zend_Soap_Wsdl_Strategy_ArrayOfTypeComplex, но проблема в том, что эта стратегия не обрабатывает строку [].

Наконец -> Что мне делать: D?!

1 Ответ

2 голосов
/ 19 марта 2010

Попробуйте создать класс ответа, который имеет только один атрибут, следующим образом:

class Response
{
    /** @var string[] */
    public $items;
}

Затем определите свой класс обслуживания, чтобы он возвращал объект типа Response следующим образом:

class Service
{
    /**
     * @param string
     * @return Response
     */
    public function process( $input )
    {
        $response = new Response();
        // Populate $response->items[] object with strings...
        return $response;
    }
}

Затем используйте стратегию 'Zend_Soap_Wsdl_Strategy_ArrayOfTypeComplex' при использовании Zend_Soap_Autodiscover для создания WSDL. Хотя это, вероятно, не приведет к получению именно того результата, который вам нужен, он должен произвести нечто семантически ближе, чем то, что вы получаете в настоящее время. Ключом к этому подходу является правильное получение PHPDoc.

Если это по-прежнему не работает, опубликуйте ключевые биты своего кода, так как это поможет быстрее решить проблему.

...