[SOAP] SOAP body aanpassen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • querex
  • Registratie: Oktober 2008
  • Laatst online: 05-09 09:31
Geachte tweakers,

Ik ben al een tijdje bezig met een SOAP koppeling op te zetten voor het doorgeven van database gegevens tussen verschillende systemen / server. Dit platform en taal onafhankelijk (vandaar SOAP).

Ik maak gebruik van Pear SOAP 0.12.0 http://pear.php.net/package/SOAP/

Momenteel werkt deze SOAP communicatie waarmee ik iets meegeef en ik iets terug krijg.
Echter verloopt dit in een redelijke basis communicatie:

Ik stuur op:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
 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/"
 xmlns:ns4="urn:SOAP_Example_Server"
 SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<ns4:echoStructAsSimpleTypes>
<inputStruct xsi:type="xsd:string">7</inputStruct>
</ns4:echoStructAsSimpleTypes>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>


Ik krijg terug:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
 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/"
 xmlns:ns4="urn:SOAP_Example_Server"
 SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<ns4:echoStructAsSimpleTypesResponse>
<outputString xsi:type="xsd:string">111</outputString>
<outputInteger xsi:type="xsd:int">0</outputInteger>
<outputFloat xsi:type="xsd:float">0</outputFloat>
</ns4:echoStructAsSimpleTypesResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>


Zoals u kan zien is de data die ik opstuur:
code:
1
2
3
<ns4:echoStructAsSimpleTypes>
<inputStruct xsi:type="xsd:string">7</inputStruct>
</ns4:echoStructAsSimpleTypes>


En volgende data terugkrijg:
code:
1
2
3
4
5
<ns4:echoStructAsSimpleTypesResponse>
<outputString xsi:type="xsd:string">111</outputString>
<outputInteger xsi:type="xsd:int">0</outputInteger>
<outputFloat xsi:type="xsd:float">0</outputFloat>
</ns4:echoStructAsSimpleTypesResponse>


Mijn vraag:
Hoe is het mogelijk om de data die ik terugkrijg in te delen als bijvoorbeeld:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<ns4:echoStructAsSimpleTypesResponse> 
 <boek>
  <titel>Tralala</titel>
  <auteur>Joske</auteur>
 </boek>
 <boek>
  <titel>Boemboemboem</titel>
  <auteur>Fikske</auteur>
 </boek>
 <boek>
  <titel>Pingping</titel>
  <auteur>Suske</auteur>
 </boek>
</ns4:echoStructAsSimpleTypesResponse>


Als het nodig moest zijn om mijn PHP code even te posten hoor ik dit ook graag...
Er is zeer weinig over deze SOAP te vinden, ik heb al enkele ebooks en websites en SOAP forums doorgenomen maar kom er niet uit.

Alle info is welkom!!!

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 23:06

MueR

Admin Tweakers Discord

is niet lief

Ongetwijfeld is het mogelijk. Zodra je het uit de Reponse hebt is het namelijk gewoon een string (of object, weet ik even niet meer). Ik vraag me alleen af hoe jij van "111", "0" en "0" iets leesbaars wil maken zoals in je voorbeeld.

Nog afgezien daarvan snap ik niet helemaal waarom je de body van de soap response wil aanpassen. Je wil het waarschijnlijk gewoon gebruiken in je eigen code. Dan is het makkelijker om het in een nieuw object danwel array te stoppen.

[ Voor 11% gewijzigd door MueR op 19-04-2010 10:32 ]

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • querex
  • Registratie: Oktober 2008
  • Laatst online: 05-09 09:31
MueR schreef op maandag 19 april 2010 @ 10:30:
Ongetwijfeld is het mogelijk. Zodra je het uit de Reponse hebt is het namelijk gewoon een string (of object, weet ik even niet meer). Ik vraag me alleen af hoe jij van "111", "0" en "0" iets leesbaars wil maken zoals in je voorbeeld.

Nog afgezien daarvan snap ik niet helemaal waarom je de body van de soap response wil aanpassen. Je wil het waarschijnlijk gewoon gebruiken in je eigen code. Dan is het makkelijker om het in een nieuw object danwel array te stoppen.
De "111", "0" en "0" zijn momenteel 3 test waardes maar deze hebben momenteel geen bijdrage tot de werking. Het is gewoon om de communicatie te testen.

Ik wil de body van de soap response aanpassen zodat ik elk database object (isbn boek) met zijn bijhorende gegevens (titel, auteur, rugdikte, ...) teruggeven in een overzichtelijke manier.

U zou persoonlijk alles in 1 array voegen en deze doorsturen met de communicatie en aan ontvangst zeide terug uiteen halen zoals men het nodig heeft?

Alvast bedankt voor je reactie!

Acties:
  • 0 Henk 'm!

  • zwippie
  • Registratie: Mei 2003
  • Niet online

zwippie

Electrons at work

Waar je iig mee kunt beginnen is je result in een DOM plaatsen:
PHP:
1
2
$dom = new DomDocument();
$dom->loadXML($client->getLastResponse());

En dan weer met XPath over je DOM heen wandelen en boek-objecten maken, of een XML transformatie uitvoeren om tot de gewenste structuur te komen.

How much can you compute with the "ultimate laptop" with 1 kg of mass and 1 liter of volume? Answer: not more than 10^51 operations per second on not more than 10^32 bits.