Ik heb een probleem met PHP SOAP & multidimentionale arrays.
Ik krijg het maar niet voor elkaar om de correctly WSDL structuur te creeren die bij mijn multidimensionale array hoort.
De array:
De dimarray bevat een aantal associative array items. Ik weet echter niet de keys van te voren die ik in de dimarray stop (wel de structuur van de array die daar inzit), de eerste keys zijn ook niet belangrijk.
Ik krijg het echter niet voor elkaar om een WSDL te schrijven die deze mutidemensionale array correct beschrijft. telkens wordt het een AnyType als ik het pakketje ontvang op C#/JAVA omdat ik de structuur niet goed beschreven krijg. Welke ik dus vervolgens niet goed kan verwerken in die talen omdat ik dan zelf de AnyType XML moet gaan parsen.
dat gebeurt dus met de volgende wsdl specificatie:
Dit lijkt al veel beter te gaan want ik krijg nu wel een array terug, maar daarbinnen zijn de elementen dus weer AnyTypes
Ik probeer dit nu al een week uit te vogelen maar kom er dus niet achter
Mijn WSDL:
Ik krijg het maar niet voor elkaar om de correctly WSDL structuur te creeren die bij mijn multidimensionale array hoort.
De array:
code:
1
2
3
4
5
6
7
8
9
| $data = array( 'somestring' => 'somedata', 'somevalue' => 1200, 'dimarray' => array( '2' => array('id' => 2, 'anotherstring' => 'xxx', 'value' => 43), '12' => array('id' => 12, 'anotherstring' => 'xxx', 'value' => 34), '3' => array('id' => 3, 'anotherstring' => 'xxx', 'value' => 54), ) ); |
De dimarray bevat een aantal associative array items. Ik weet echter niet de keys van te voren die ik in de dimarray stop (wel de structuur van de array die daar inzit), de eerste keys zijn ook niet belangrijk.
Ik krijg het echter niet voor elkaar om een WSDL te schrijven die deze mutidemensionale array correct beschrijft. telkens wordt het een AnyType als ik het pakketje ontvang op C#/JAVA omdat ik de structuur niet goed beschreven krijg. Welke ik dus vervolgens niet goed kan verwerken in die talen omdat ik dan zelf de AnyType XML moet gaan parsen.
dat gebeurt dus met de volgende wsdl specificatie:
code:
1
| <s:element name="dimarray" /> |
code:
1
| <s:element name="q" type="soapenc:Array" soapenc:arrayType="s:ur-type"></s:element> |
Dit lijkt al veel beter te gaan want ik krijg nu wel een array terug, maar daarbinnen zijn de elementen dus weer AnyTypes
Ik probeer dit nu al een week uit te vogelen maar kom er dus niet achter
Mijn 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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
| <?xml version="1.0" encoding="utf-8"?> <wsdl:definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="mywebserver" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://soap.q-go.net/soap_client/wsdl/schema" > <wsdl:types> <s:schema elementFormDefault="qualified" targetNamespace="http://mywebserver"> <s:element name="SOAP_call"> <s:complexType> <s:all> <s:element name="function" type="s:string"/> <s:element name="param1" type="s:string"/> <s:element name="param2" type="s:string"/> </s:all> </s:complexType> </s:element> <s:element name="SOAP_callResponse"> <s:complexType> <s:all> <s:element name="somestring" type="s:string"/> <s:element name="somevalue" type="s:int" minOccurs="0"/> <s:element name="dimarray" /> </s:all> </s:complexType> </s:element> </s:schema> </wsdl:types> <wsdl:message name="callRequest"> <wsdl:part name="SOAP_call" element="tns:SOAP_call"/> </wsdl:message> <wsdl:message name="callResponse"> <wsdl:part name="SOAP_callResponse" element="tns:SOAP_callResponse"/> </wsdl:message> <wsdl:portType name="PortType"> <wsdl:operation name="SOAP_call"> <wsdl:input message="tns:callRequest"/> <wsdl:output message="tns:callResponse"/> </wsdl:operation> </wsdl:portType> <wsdl:binding name="SoapBinding" type="tns:PortType"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="SOAP_call"> <soap:operation soapAction="http://mywebservice/wsdl/SOAP_call" style="document"/> <wsdl:input> <soap:body use="literal"/> </wsdl:input> <wsdl:output> <soap:body use="literal"/> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="Service"> <wsdl:port name="Port" binding="tns:SoapBinding"> <soap:address location="http://localhost/soap_test.php"/> </wsdl:port> </wsdl:service> </wsdl:definitions> |