S
scaerry
Hallo zusammen, ich brauche dringend Hilfe, denn ich weiß nicht was ich tue
bin ganz neu im Gebiet Webservices. Ich habe schon dieses Tutorial hier http://www.tutorials.de/forum/php-tutorials/166733-php5-einstieg-soap.html gemacht und das hat auch funktioniert. Jetzt bin ich soweit, dass ich selber herumspielen will, was aber leider ganz und garnicht funktioniert. Letztendlich möchte ich, dass ich anhand einer WSDL Beschreibung eine Funktion auf dem Server aufrufen kann, die mir eine XML Datei mit Daten aus einer Datenbank erstellt.
Dazu habe ich folgende Dateien:
artikel.wsdl
server.php
client.php
Die Funktion mit dem XML erstellen klappt schon, das habe ich bereits in einem normalen Programm getestet. Wenn ich das ganze dann über client.php ausführe, bekomme ich folgende Ausgabe:
Bitte helft mir
bin ganz neu im Gebiet Webservices. Ich habe schon dieses Tutorial hier http://www.tutorials.de/forum/php-tutorials/166733-php5-einstieg-soap.html gemacht und das hat auch funktioniert. Jetzt bin ich soweit, dass ich selber herumspielen will, was aber leider ganz und garnicht funktioniert. Letztendlich möchte ich, dass ich anhand einer WSDL Beschreibung eine Funktion auf dem Server aufrufen kann, die mir eine XML Datei mit Daten aus einer Datenbank erstellt.
Dazu habe ich folgende Dateien:
artikel.wsdl
Code:
<?xml version ="1.0"?>
<!-- WSDL-Beschreibung der Artikeldaten -->
<definitions name="artikel"
xmlns:typens="http://localhost/soap/artikel.wsdl"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns="http://schemas.xmlsoap.org/wsdl/">
<!-- Messages.. -->
<message name="createXMLRequest">
<part name="request" type="xsd:int"/>
</message>
<message name="createXMLResponse">
<part name="response" type="xsd:int"/>
</message>
<!-- PortType.. -->
<portType name="artikelPort">
<operation name="createXML">
<input message="typens:createXMLRequest"/>
<output message="typens:createXMLResponse"/>
</operation>
</portType>
<!-- Bindings -->
<binding name="artikelBinding" type="typens:artikelPort">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="createXML">
<soap:operation soapAction="urn:artikelAction#createXML"/>
<input>
<soap:body use="encoded" namespace="urn:artikelAction" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
<output>
<soap:body use="encoded" namespace="urn:artikelAction" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</output>
</operation>
</binding>
<!-- Ende -->
<service name="artikelService">
<port name="artikelPort" binding="typens:artikelBinding">
<soap:address location="urn:artikel"/>
</port>
</service>
</definitions>
server.php
Code:
<?php
function createXML($zahl1)
{
if ($zahl1 == 1)
{
require("dbinfo.php");
// Start XML Datei
$dom = new DOMDocument('1.0', 'iso-8859-1');
$comment = $dom->appendChild(new DOMComment('Artikeldaten'));
$node = $dom->createElement("Artikeldaten");
$parnode = $dom->appendChild($node);
// Opens a connection to a MySQL server
$connection=mysql_connect (localhost, $username, $password);
if (!$connection) { die('Not connected : ' . mysql_error());}
// Set the active MySQL database
$db_selected = mysql_select_db($database, $connection);
if (!$db_selected) {
die ('Can\'t use db : ' . mysql_error());
}
// Select all the rows in the markers table
$query = "SELECT * FROM markers WHERE 1";
$result = mysql_query($query);
if (!$result) {
die('Invalid query: ' . mysql_error());
}
header("Content-type: text/xml");
// Iterate through the rows, adding XML nodes for each
while ($row = @mysql_fetch_assoc($result))
{
// ADD TO XML DOCUMENT NODE
$node = $dom->createElement("Artikel");
$newnode = $parnode->appendChild($node);
$newnode->setAttribute("name",$row['name']);
$newnode->setAttribute("address", $row['address']);
$newnode->setAttribute("lat", $row['lat']);
$newnode->setAttribute("lng", $row['lng']);
$newnode->setAttribute("type", $row['type']);
}
// echo $dom->saveXML();
echo $dom->save("artikeldaten.xml");
return 1;
}
else
{
return 0;
}
}
$server = new SoapServer(NULL,
array('uri' => "http://localhost/soap/"));
$server->addFunction('createXML');
$server->handle();
?>
client.php
Code:
<?php
$client = new SoapClient('http://localhost/soap/artikel.wsdl', array('exceptions' => 0));
$result = $client->createXML(1);
if(is_soap_fault($result))
{
echo "FehlerCode: " . $result->faultcode . "<br>\n";
echo "Beschreibung: " . $result->faultstring . "<br>\n";
echo "Sender: " . $result->faultactor . "<br>\n";
}
else
{
echo $result;
}
?>
Die Funktion mit dem XML erstellen klappt schon, das habe ich bereits in einem normalen Programm getestet. Wenn ich das ganze dann über client.php ausführe, bekomme ich folgende Ausgabe:
Code:
FehlerCode: Client
Beschreibung: DTD are not supported by SOAP
Sender:
Bitte helft mir