PHP-SOAP-Ausgabe per Namespace beeinflussen

Kai-Behncke

Erfahrenes Mitglied
Hallo allerseits,
ich habe einen PHP-SOAP-Webservice definiert und auch eine Namespace.xsd angelegt.
Wenn ich nun über den Klienten den Service aufrufe:

PHP:
<?php


$soap = new SoapClient(
null,
array(
  "location" => "http://vm519.rz.uni-osnabrueck.de/soap/webservice.php",
  "uri" => "http://vm519.rz.uni-osnabrueck.de/soap/namespace.xsd",
  'encoding'=>'UTF-8',
  'soap_version'=>SOAP_1_2 ,
  'trace'=>1
  )
);

echo $soap->add(4, 10);
echo "<br>";
print "Request :\n".htmlspecialchars($soap->__getLastRequest()) ."<p>";
print "Request :\n".htmlspecialchars($soap->__getLastRequestHeaders()) ."<p>";
print "Response:\n".htmlspecialchars($soap->__getLastResponse())."<p>";
print "Response:\n".htmlspecialchars($soap->__getLastResponseHeaders())."<p>";
?>
..dann scheint der Namespace völlig ignoriert zu werden??
Besteht die Möglichkeit die XML-Ausgabe des SOAP-Response zu beeinflussen, also duch meinen eigenen Namensraum?

Danke und Grüße, Kai
 
Zuletzt bearbeitet von einem Moderator:
Ich habe eine Lösung gefunden. Mittels folgendem Code lässt sich die XML-SOAP-Ausgabe leicht modifizieren:

<?php


$soap = new SoapClient(
null,
array(
"location" => "http://vm519.rz.uni-osnabrueck.de/soap/webservice.php",
"uri" => "http://vm519.rz.uni-osnabrueck.de/soap/namespace.xsd",
'encoding'=>'UTF-8',
'soap_version'=>SOAP_1_2 ,
'trace'=>1,
'use' => SOAP_LITERAL
)
);




echo $soap->add(4, 10);
echo "<br>";
//echo "tet".$soap->__SoapCall(add(6,7));


function zweiter_versuch($one,$two){

$method="Rechenergebnis";
$message="Multiplikation";
$operation="Resultat";
$important_id=55;


global $soap2;

$soap2 = new SoapClient(
null,
array(
"location" => "http://vm519.rz.uni-osnabrueck.de/soap/webservice.php",
"uri" => "http://vm519.rz.uni-osnabrueck.de/soap/namespace.xsd",
'encoding'=>'UTF-8',
'soap_version'=>SOAP_1_2 ,
'trace'=>1,
'use' => SOAP_DOCUMENT
)
);




$finales_resultat=$soap2->__SoapCall("add",array($one,$two));

$xml = new XMLWriter();
$xml->openMemory();
$xml->startElementNS('objs', $method, 'ObjectNamespace');
// Send NULL to not specify the NameSpace on every call.
$xml->startElementNS('objs', $message, NULL);
//Attribute on a Namespaced node!
$xml->writeAttribute('node-attribute', $operation);
$xml->startElementNS('objs', 'Zahl', NULL);
$xml->Text($finales_resultat);
$xml->endElement();
$xml->endElement();
$xml->endElement();
// $args = new SoapVar($xml->outputMemory(), XSD_ANYXML);


print_r (htmlspecialchars($xml->outputMemory()));
echo "<br><br>";
return $finales_resultat;

}



echo "<br>";
zweiter_versuch(5,6);
echo "<br>";

print "Request :\n".htmlspecialchars($soap2->__getLastRequest()) ."<p>";

print "Response :\n".htmlspecialchars($soap2->__getLastResponse()) ."<p>";
 
Zurück