Hola amigos, necesito una pequeña ayuda ya que tengo un pequeño problema al construir una respuesta WSDL que interpreta Flex, resumiendo lo que tiene que devolver el servicio que estoy creando es esto:
event.result: XMLList( <-- Flex debug / XML -->
<ConsultarCatalogoResponse xmlns="http://tempuri.org/" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ConsultarCatalogoResult>
<libros>
<libro>
<libroid>593</libroid>
<titulo>Jason y los Argonautas</titulo>
<imagen>http://127.127.127.127:92/files/593/img/THjason-y-los-argonautas.jpg</imagen>
<descripcion>Jason y los Argonautas cuenta la mítica historia de como Jason y los Argonautas se embarcaron el la historia que dio lugar al libro de Jason y los Argonautas. La imagen puede parecer de los Chemical Brothers pero es extraída de la fantástica historia de Jason y los Argonautas.</descripcion>
<codlibro>JSONARGOS</codlibro>
<fichero>Big_Brother_DS.pdf</fichero>
<Estado>1</Estado>
<ancho>849</ancho>
<alto>1100</alto>
</libro>
<libro>
otro libro...
</libro>
<libro>
otro libro...
</libro>
<libroscategorias>
<categoria>
<categoriaid>1</categoriaid>
<descripcion>Categoria 1</descripcion>
<Libroid>1</Libroid>
<Libroid>2</Libroid>
</categoria>
<categoria>
<categoriaid>2</categoriaid>
<descripcion>Categoria 2</descripcion>
<Libroid>1</Libroid>
<Libroid>5</Libroid>
</categoria>
</libroscategorias>
</libros>
</ConsultarCatalogoResult>
</ConsultarCatalogoResponse>
<-- end XML / end Flex debug --> )El problema lo tengo cuando construyo el array / object que no se como demonios meterle mas de 1 Libroid para indicarle a Flex que esa categoría pertenece a Libro1, Libro2, Libro3
El array es este:
<?php
function mymodule_service_service() { /* Hook based -> hook_service() */
return array(
// MyWSDLCall
array(
'#method' => 'MyWSDLCall',
'#callback' => '_MyWSDLReturn',
'#return' => 'struct',
'#help' => 'Devuelve cosas.',
),
);
}
function _MyWSDLReturn() {
// varias SQL...
// varios foreach para cargar cada nodo...
// loop construtor con info de nodo
// loop dentro de constructor para info categoria:
foreach ($node->taxonomy as $taxonomy) {
$categorias[] = array(
'categoria' => array(
'categoriaid' => $taxonomy->tid,
'descripcion' => $taxonomy->name,
'Libroid' => $node->nid,
),
);
}
}
?>Y eso me devuelve un XML asi:
event.result: XMLList( <-- Flex debug / XML -->
<ns1:soap_call_wrapperResponse xmlns:ns1="http://127.127.127.127/services/soap/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
<return>
<libros xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="unnamed_struct_use_soapval[11]">
<item>
<libro>
<libroid xsi:type="xsd:string">1</libroid>
<titulo xsi:type="xsd:string">Jason y los Argonautas</titulo>
<imagen xsi:type="xsd:string">http://127.127.127.127/files/593/img/THjason-y-los-argonautas.jpg</imagen>
<descripcion xsi:type="xsd:string">Jason y los Argonautas, Jason y los Argonautas, Jason y los Argonautas, Jason y los Argonautas, Jason y los Argonautas, Jason y los Argonautas, Jason y los Argonautas, Jason y los Argonautas, Jason y los Argonautas, Jason y los Argonautas</descripcion>
<codlibro xsi:type="xsd:string">MUDAFUKA1</codlibro>
<fichero xsi:type="xsd:string">ruta-pdf.pdf</fichero>
<Estado xsi:type="xsd:string">1</Estado>
<ancho xsi:type="xsd:int">849</ancho>
<alto xsi:type="xsd:int">1100</alto>
</libro>
</item>
<item>
<libro>
otro libro...
</libro>
</item>
<item>
<libro>
otro libro...
</libro>
</item>
</libros>
<libroscategorias xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="unnamed_struct_use_soapval[12]">
<item>
<categoria>
<categoriaid xsi:type="xsd:int">0</categoriaid>
<descripcion xsi:type="xsd:string">Todas</descripcion>
</categoria>
</item>
<item>
<categoria>
<categoriaid xsi:type="xsd:int">0</categoriaid>
<descripcion xsi:type="xsd:string">Cat-0</descripcion>
<Libroid xsi:type="xsd:int">3</Libroid>
</categoria>
</item>
<item>
<categoria>
<categoriaid xsi:type="xsd:int">1</categoriaid>
<descripcion xsi:type="xsd:string">Cat-1</descripcion>
<Libroid xsi:type="xsd:int">1</Libroid>
</categoria>
</item>
</libroscategorias>
</return>
</ns1:soap_call_wrapperResponse>
<-- end XML / end Flex debug --> )En primer lugar que no se por que demonios sale un 'item' por cada elemento, eso aunque parezca que altera la estructura del XML no afecta a la programación de Flex aunque me gustaría saber como puedo quitarlo.
En segundo lugar no se como se puede formar un XML sin usar array(), utilizando como object me crea entradas mas raras aun, tipo <_numeric_0> y cosas asi.
Tiene algo que ver con '#return' => 'struct', del hook_service() =?
¿Alguien sabe por que sale eso de SOAP-ENC:arrayType="unnamed_struct_use_soapval[11]"? no he trabajado mucho con WSDL perdonar mi ignorancia... :/
La pregunta es, ¿estoy construyendo bien la respuesta? ¿se puede usar algún otro método, por ejemplo SimpleXML y pegarle un echo? ¿sabéis como digo?
Al principio de todo probé lo mas obvio, un echo '<xml bla bla bla bla>' y me lo interpreta como todo un String cambiándome todos los < y > del XML por entidades HTML lt; y gt; el Flex... grrr!
No se puede alterar la programación Flex por lo que necesito enviarle todos los libros que correspondan a la categoría en cuestión en cada etiqueta 'Libroid' tal y como aparece en el primer XML ya que si no no me lo interpreta bien...
Si alguien sabe de lo que estoy hablando le agradecería una ayuda por favor amigos :(

Comments
Hola amigo!.. se que el post
Hola amigo!.. se que el post es viejo, pero ahorita tengo un problema muy parecido, queria saber si habias logrado resolver?