Ik probeer al een aantal dagen een webservice in PHP aan de praat te krijgen, tot op heden niet helemaal succesvol. Voor het gemak heb ik een eenvoudige versie gemaakt:
Ik heb de volgende wsdl:
deze WSDL valideert prima.
Vervolgens heb ik de volgende testserver.php opgezet:
Als ik deze webservice aanroep krijg ik de volgende foutmelding:
Het bijbehorende request bericht ziet er als volgt uit:
Wanneer ik de wsdl aanpas zodat het request bericht één part element bevat krijg ik wel een goed resultaat. De aanroep is dan als volgt:
Met als resultaat:
Het zit hem dus duidelijk in de verwerking van het request bericht. Ik heb zelf al uitvoerig gezocht op Internet, maar zoeken op soap procedure not present resulteert steeds in één issue die op talloze bulletin boards terugkomt en is opgelost door een restart. Dat mocht voor mij niet baten. Ook lees ik over een foutmelding als een function wordt aangeroepen zonder input parameters. Dat is volgens mij ook niet het geval.
Ik heb al geprobeerd om de functions text1 en text2 op te nemen. Dit mocht helaas niet baten.
Ik hoop dat iemand mij kan helpen. Ik zit inmiddels redelijk met mijn handen in het haar
Ik heb de volgende wsdl:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
| <?xml version="1.0" encoding="UTF-8"?> <definitions targetNamespace="test" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="test" name="test"> <types> <xsd:schema targetNamespace="test" xmlns:tns="test"> <xsd:element name="text1" type="xsd:string"></xsd:element> <xsd:element name="text2" type="xsd:string"></xsd:element> </xsd:schema> </types> <message name="Request"> <part name="header" element="tns:text1"/> <part name="body" element="tns:text2"/> </message> <message name="Response"> <part name="header" element="tns:text1"/> <part name="body" element="tns:text2"/> </message> <message name="Fault"> <part name="body" element="tns:text1"/> </message> <portType name="ServicePortType"> <operation name="operation"> <input message="tns:Request"/> <output message="tns:Response"/> <fault name="foutmelding" message="tns:Fault"/> </operation> </portType> <binding name="SoapBinding" type="tns:ServicePortType"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="operation"> <soap:operation/> <input> <soap:body use="literal"/> </input> <output> <soap:body use="literal"/> </output> <fault name="foutmelding"/> </operation> </binding> <service name="Service"> <port name="ServiceSoapPort" binding="tns:SoapBinding"> <soap:address location="http://localhost/VoI/testserver.php"/> </port> </service> </definitions> |
deze WSDL valideert prima.
Vervolgens heb ik de volgende testserver.php opgezet:
code:
1
2
3
4
5
6
7
8
9
10
11
| <?php $server = new SoapServer("webservice/wsdl/test.wsdl"); $server->setClass("testClass"); $server->handle(); class testClass { function operation($input) { return array ("text1", "text2"); } } ?> |
Als ik deze webservice aanroep krijg ik de volgende foutmelding:
code:
1
2
3
4
5
6
7
8
| <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Body> <SOAP-ENV:Fault> <faultcode>SOAP-ENV:Server</faultcode> <faultstring>Procedure 'text1' not present</faultstring> </SOAP-ENV:Fault> </SOAP-ENV:Body> </SOAP-ENV:Envelope> |
Het bijbehorende request bericht ziet er als volgt uit:
code:
1
2
3
4
5
6
7
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:test="test"> <soapenv:Header/> <soapenv:Body> <test:text1>?</test:text1> <test:text2>?</test:text2> </soapenv:Body> </soapenv:Envelope> |
Wanneer ik de wsdl aanpas zodat het request bericht één part element bevat krijg ik wel een goed resultaat. De aanroep is dan als volgt:
code:
1
2
3
4
5
6
| <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:test="test"> <soapenv:Header/> <soapenv:Body> <test:text2>?</test:text2> </soapenv:Body> </soapenv:Envelope> |
Met als resultaat:
code:
1
2
3
4
5
6
| <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="test"> <SOAP-ENV:Body> <ns1:text1>text1</ns1:text1> <ns1:text2>text2</ns1:text2> </SOAP-ENV:Body> </SOAP-ENV:Envelope> |
Het zit hem dus duidelijk in de verwerking van het request bericht. Ik heb zelf al uitvoerig gezocht op Internet, maar zoeken op soap procedure not present resulteert steeds in één issue die op talloze bulletin boards terugkomt en is opgelost door een restart. Dat mocht voor mij niet baten. Ook lees ik over een foutmelding als een function wordt aangeroepen zonder input parameters. Dat is volgens mij ook niet het geval.
Ik heb al geprobeerd om de functions text1 en text2 op te nemen. Dit mocht helaas niet baten.
Ik hoop dat iemand mij kan helpen. Ik zit inmiddels redelijk met mijn handen in het haar