Ik heb de volgende (test) WSDL uit Zend studio, die wordt geëxporteerd a.d.h.v. wat PHP classes:
Nu open ik een VS2008 project en maak een web-reference aan waarbij ik deze WSDL selecteer. Echer, de (enige) method GetSettings verwacht nu volgens VS een string i.p.v. de integer die overduidelijk in de WSDL staat (regel 24).
Wijzig ik de regel naar type="xsd:int" dan vreet VS het wél, maar ik krijg Zend niet zo ver om daar int i.p.v. integer voor uit te poepen.
Dit is de PHP a.d.h. waarvan Zend de WSDL genereert. AFAIK zijn xsd:int en xsd:integer synoniem en zou het VS dus niet moeten boeien welke van de twee gebruikt wordt.
Hoe krijg ik Zend zover dat 'ie xsd:int gebruikt i.p.v. xsd:integer, of (mooier IMHO) hoe krijg ik VS zo ver dat 'ie beide vreet? En hoe komt het dat VS dan maar 'terugvalt' naar string? Ik heb in Zend en VS instellingen zitten struinen en natuurlijk Google afgestruind maar ik kom eigenlijk niets tegen dat wijst op bekende problemen ofzo hiermee en ik vind nergens een mogelijkheid om deze instellingen aan te passen.
edit
Hmmm, er is schijnbaar wel een verschil tussen int en integer; in dat geval kan ik dus beter Zend xsd:int laten uitpoepen... Dat verklaart ook waarom VS naar string default; xsd:integer is immers "unbound" in het aantal cijfers en dat is het int datatype natuurlijk niet... Maarrrrr hoe krijg ik ZS dan zover
Volgens Zend is de default mapping "int"
XML:
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
| <?xml version='1.0' encoding='UTF-8'?> <!-- WSDL file generated by Zend Studio. --> <definitions name="foo" targetNamespace="urn:foo" xmlns:typens="urn:foo" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/"> <types> <xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:foo"> <xsd:complexType name="KeyValueArray"> <xsd:complexContent> <xsd:restriction base="soapenc:Array"> <xsd:attribute ref="soapenc:arrayType" wsdl:arrayType="typens:KeyValue[]"/> </xsd:restriction> </xsd:complexContent> </xsd:complexType> <xsd:complexType name="KeyValue"> <xsd:all> <xsd:element name="key" type="xsd:string"/> <xsd:element name="value" type="xsd:string"/> </xsd:all> </xsd:complexType> </xsd:schema> </types> <message name="GetSettings"> <part name="userid" type="xsd:integer"/> </message> <message name="GetSettingsResponse"> <part name="GetSettingsReturn" type="typens:KeyValueArray"/> </message> <portType name="SettingsManagerPortType"> <operation name="GetSettings"> <documentation> Returns settings for a user </documentation> <input message="typens:GetSettings"/> <output message="typens:GetSettingsResponse"/> </operation> </portType> <binding name="SettingsManagerBinding" type="typens:SettingsManagerPortType"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="GetSettings"> <soap:operation soapAction="urn:SettingsManagerAction"/> <input> <soap:body namespace="urn:foo" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </input> <output> <soap:body namespace="urn:foo" use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </output> </operation> </binding> <service name="fooService"> <port name="SettingsManagerPort" binding="typens:SettingsManagerBinding"> <soap:address location=""/> </port> </service> </definitions> |
Nu open ik een VS2008 project en maak een web-reference aan waarbij ik deze WSDL selecteer. Echer, de (enige) method GetSettings verwacht nu volgens VS een string i.p.v. de integer die overduidelijk in de WSDL staat (regel 24).
Wijzig ik de regel naar type="xsd:int" dan vreet VS het wél, maar ik krijg Zend niet zo ver om daar int i.p.v. integer voor uit te poepen.
PHP:
1
2
3
4
5
6
7
8
9
10
11
| ... /** * Returns settings for a user * * @param int $userid UserID * @return KeyValue[] */ public function GetSettings($userid) { //Do some interesting stuff here } ... |
Dit is de PHP a.d.h. waarvan Zend de WSDL genereert. AFAIK zijn xsd:int en xsd:integer synoniem en zou het VS dus niet moeten boeien welke van de twee gebruikt wordt.
Hoe krijg ik Zend zover dat 'ie xsd:int gebruikt i.p.v. xsd:integer, of (mooier IMHO) hoe krijg ik VS zo ver dat 'ie beide vreet? En hoe komt het dat VS dan maar 'terugvalt' naar string? Ik heb in Zend en VS instellingen zitten struinen en natuurlijk Google afgestruind maar ik kom eigenlijk niets tegen dat wijst op bekende problemen ofzo hiermee en ik vind nergens een mogelijkheid om deze instellingen aan te passen.
edit
Hmmm, er is schijnbaar wel een verschil tussen int en integer; in dat geval kan ik dus beter Zend xsd:int laten uitpoepen... Dat verklaart ook waarom VS naar string default; xsd:integer is immers "unbound" in het aantal cijfers en dat is het int datatype natuurlijk niet... Maarrrrr hoe krijg ik ZS dan zover
[ Voor 7% gewijzigd door RobIII op 11-11-2008 11:28 ]
There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.
Je eigen tweaker.me redirect
Over mij