[VS2008/ZendStudio] WSDL xsd:int forceren ipv. xsd:integer *

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Topicstarter
(overleden)
Ik heb de volgende (test) WSDL uit Zend studio, die wordt geëxporteerd a.d.h.v. wat PHP classes:
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 :P Volgens Zend is de default mapping "int" :?

[ 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


Acties:
  • 0 Henk 'm!

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Ik kwam bij een zoekactie deze tegen:
http://www.experts-exchan...ages/Java/Q_22468548.html

Lijkt met jouw probleem samen te hangen in die zin dat VS xsd:integer niet goed lijkt te snappen. Lost je probleem natuurlijk niet op, maar je staat in elk geval niet alleen ;)

Edit: Aha, integer is een unbound integer, dus dat wil je niet mappen naar een bound numeriek type. Is eigenlijk best logisch... volgens mij is Zend degene die het fout doet in dit geval :)
Bron: http://social.msdn.micros...0-4284-980a-0dcec67db094/

[ Voor 34% gewijzigd door bigbeng op 11-11-2008 11:18 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Topicstarter
(overleden)
bigbeng schreef op dinsdag 11 november 2008 @ 11:13:
Ik kwam bij een zoekactie deze tegen:
http://www.experts-exchan...ages/Java/Q_22468548.html

Lijkt met jouw probleem samen te hangen in die zin dat VS xsd:integer niet goed lijkt te snappen. Lost je probleem natuurlijk niet op, maar je staat in elk geval niet alleen ;)
Ik zie het ja. Nu nog een oplossing :P
bigbeng schreef op dinsdag 11 november 2008 @ 11:13:
Edit: Aha, integer is een unbound integer, dus dat wil je niet mappen naar een bound numeriek type. Is eigenlijk best logisch... volgens mij is Zend degene die het fout doet in dit geval :)
Bron: http://social.msdn.micros...0-4284-980a-0dcec67db094/
Klopt, zie mijn edit onderaan de TS ;) Ik ben nu aan 't puzzelen of ik ZS zo ver kan krijgen...

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


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Topicstarter
(overleden)
Schopje :P
Ik krijg Zend studio niet zo ver dat 'ie xsd:int uitpoept voor integers; ook niet als ik de DocBlock verander naar int.

PHP:
1
2
3
4
5
6
class Foo {
    /**
     * @var integer
     */
    public $id;
}

Geeft:
XML:
1
2
3
4
5
<xsd:complexType name="Foo">
    <xsd:all>
        <xsd:element name="id" type="xsd:integer"/>
    </xsd:all>
</xsd:complexType>

Maar:

PHP:
1
2
3
4
5
6
class Foo {
    /**
     * @var int
     */
    public $id;
}

Geeft ook doodleuk xsd:integer (lees: dezelfde output)... :(

offtopic:
Mezelf maar even een titlechange gegeven :P
[VS2008/Zend Studio] WSDL integer mapped naar string?
>>
[VS2008/ZendStudio] WSDL xsd:int forceren ipv. xsd:integer *

[ Voor 14% gewijzigd door RobIII op 27-11-2008 14:48 ]

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


Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Ik heb nooit met Zend Studio gewerkt, maar staat de type mapping niet ergens in een (xsl) template?

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

  • CMG
  • Registratie: Februari 2002
  • Laatst online: 10-12-2024

CMG

je zou een visual studio add-in kunnen maken die in de text versie van dit document gewoon een regex-replace los laat met een druk op de knop, dat is de makkelijkste oplossing die ik kan bedenken aangezien ik helaas niet bekend ben met Zend. Als je daar zelf de output terug geeft zou je er zelf natuurlijk in PHP ook een replace op kunnen los laten...

NKCSS - Projects - YouTube


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Topicstarter
(overleden)
Niemand_Anders schreef op vrijdag 28 november 2008 @ 09:19:
Ik heb nooit met Zend Studio gewerkt, maar staat de type mapping niet ergens in een (xsl) template?
Ik was inderdaad al van plan de Zend directories eens door te gaan spitten; kijken of ik daar ergens iets kan vinden.
CMG schreef op vrijdag 28 november 2008 @ 09:53:
je zou een visual studio add-in kunnen maken die in de text versie van dit document gewoon een regex-replace los laat met een druk op de knop, dat is de makkelijkste oplossing die ik kan bedenken aangezien ik helaas niet bekend ben met Zend. Als je daar zelf de output terug geeft zou je er zelf natuurlijk in PHP ook een replace op kunnen los laten...
Dat is ook een idee, maar wat omslachtig denk ik. Wel het overwegen waard though.

[ Voor 44% gewijzigd door RobIII op 28-11-2008 13:38 ]

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

Pagina: 1