Pregunta

Estoy utilizando PHP 5.2.10 y estoy tratando de consumir un servicio web que devuelve tipos datos complejos utilizando el extensión SOAP estándar .

El problema es que SoapClient hace objetos no pueblan que están anidados en otros objetos / matriz de objetos. Un ejemplo simplificado de lo que me pasa cuando llamo el método getUtente, especificando "my_unique_id" como parámetro es:

stdClass Object
(
    [getUtenteReturn] => stdClass Object
        (
            [userName] => my_unique_id
            [fieldOne] => ...
            [fieldTwo] => ...
            [utilizzatore] => stdClass Object
                ( // This is EMPTY instead of containing a series of userName's
                )

        )

)

La parte pertinente de la descripción WDSL es:

<element name="getUtenteResponse">
  <complexType>
    <sequence>
      <element name="getUtenteReturn" type="tns1:Cliente"/>
    </sequence>
  </complexType>
</element>
...
<complexType name="Utilizzatore">
  <sequence>
    <element name="userName" nillable="true" type="xsd:string"/>
  </sequence>
</complexType>
...
<complexType name="Cliente">
  <complexContent>
    <extension base="tns1:Utilizzatore">
      <sequence> 
        <element name="fieldOne" nillable="true" type="xsd:string"/>
        <element name="fieldTwo" nillable="true" type="xsd:string"/>
        <element name="utilizzatore" nillable="true" type="impl:ArrayOf_tns1_Utilizzatore"/>
      </sequence>
    </extension>
  </complexContent>
</complexType>

Lo que se encontró que no soy el único que experimenta este problema. En particular, me encontrado este comentario en la documentación oficial de PHP y esta otra entrada foro para dar dos ideas diferentes sobre cómo abordar la problema, pero no he sido capaz de cambiar cualquiera de los dos Ideas en un solución de trabajo : no parecen entender completamente la lógica detrás de los ejemplos dados

Le agradecería si alguien me puede guiar en esto: un código de trabajo en otro servicio web sería bienvenido, pero lo que estoy principalmente después es realmente la comprensión del problema y la lógica de las soluciones propuestas (el carril de pescado, no el ¡pez!). :)

¿Fue útil?

Solución

vieja pregunta, sin respuesta. Recientemente me encontré con este post, que explica el problema y da una solución: El consumo de SOAP servicio web complexType con PHP .

Otros consejos

Aquí están mis pensamientos inmediatos, lo siento esto no es una respuesta adecuada, sólo algunas ideas ...

En primer lugar, ¿ha intentado ver la solicitud de jabón (el sobre) se envía al servidor de jabón? ¿Se ve como debería funcionar? ¿Puede usted ver a dónde va mal? ¿Usted apenas está recibiendo un error de vuelta, un SOAPFault, o los datos incorrecto, o nada en absoluto?

En segundo lugar, ¿Ha intentado utilizar la clase SoapParam?

Por último, estoy seguro de que está haciendo este derecho, pero noto que el objeto que está construyendo tiene nombre de usuario y fieldOne y fieldTwo todo al lado del otro, pero sus programas WSDL que fieldOne y fieldTwo son parte de la clase Cliente (que nunca aparece en su ejemplo), mientras nombre de usuario debe estar dentro de la matriz utilizzatore, por lo que no debería ser más como:

stdClass Object
(
    [Cliente] => stdClass Object
        (
            [fieldOne] => ...
            [fieldTwo] => ...
            [utilizzatore] => stdClass Object
                ( // This is EMPTY instead of containing a series of userName's
                )

        )

)

La clase SoapClient es muy frustrante para mí, así que no tome nada de esto como una crítica, porque sólo esperan entender mejor a mí mismo al ofrecer ideas que podrían ayudarle.

Mac, muchas gracias por sus respuestas rápidas. vistazo a lo que se derrumbaron el .. yo no miro esto antes. De ahí que quieren compartir este .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top