2010年2月16日星期二

[fw-webservices] Re: DocBlocking SOAP types.

On 16 February 2010 16:41, Nathan Rixham <nrixham@gmail.com> wrote:
> Nathan Rixham wrote:
>> Richard Quadling wrote:
>>> Hi.
>>>
>>> I want to docblock a set of properties to be xml primitive datatypes [1].
>>>
>>> Considering that this is the correct type for the XML/SOAP/WSDL
>>> communication, how do I "bypass" Zend_WSDL / Zend_AutoDiscovery so
>>> that these types go through cleanly. I know that as far as PHP is
>>> concerned, the type is loose and it will be my responsibility to
>>> encode the values accordingly. It is in the WSDL generation, and hence
>>> the docblocks, that I want these types to be valid.
>>>
>>> I think I can achieve this by the following steps.
>>>
>>> 1 - Create a new concrete class from the
>>> Zend_Soap_Wsdl_Strategy_Abstract abstract class, say
>>> Zend_Soap_Wsdl_Strategy_W3C (as the type are defined by W3C).
>>> 2 - Implement the addComplexType() method to validate the type against
>>> the list and return it if is OK.
>>>
>>> What I am stuck on is how do I cascade from the new class so that I
>>> can still drop back to the Zend_Soap_Wsdl_Strategy_ArrayOfTypeComplex.
>>>
>>> I think the Zend_Soap_Wsdl_Strategy_Composite is of use here, but I
>>> can't quite work out how to use it.
>>>
>>> Any ideas would be appreciated.
>>>
>>> Regards,
>>>
>>> Richard Quadling.
>>>
>>> [1] http://www.w3.org/TR/xmlschema11-2/#built-in-primitive-datatypes
>>>
>>
>> AFAIK the Zend Soap WSDL accessor already maps up php types to xsd
>> types; a PHP String maps to an xsd:string, integer to xsd:int and so forth.
>>
>> XML schema 1.1 datatypes are pretty much the same as; and backwards
>> compatible with the current xml schema datatypes (which are still the
>> recommended standard, as 1.1 isn't a recommendation yet, work in
>> progress) and use the same namespace. Thus the existing implementation
>> should be xml w3c complaint both now and in the future.
>>
>> All that's said purely based on the zend docs [1] and not through
>> practically using Zend_Soap_Wsdl_* though!
>
>
> sigh.. [1] = http://framework.zend.com/manual/en/zend.soap.wsdl.html
> (specifically Type mapping) - might make more sense now!
>
>
>

I think you've missed the point.

I want to tell the outside world, via the WSDL, that property X is an
xsd:datetime (hmm ok, for that to make sense forget PHP's DateTime
builtin class)

How do I do that using AutoDiscovery?

PHP doesn't have all the types that I can ask for.

If I use PHP's types, they are all strings. So any junk can be put in.

The consumer of the service isn't PHP, but (I believe) C#. So strongly typed.


It isn't about mapping PHP "types" to W3C types.


--
-----
Richard Quadling
"Standing on the shoulders of some very clever giants!"
EE : http://www.experts-exchange.com/M_248814.html
EE4Free : http://www.experts-exchange.com/becomeAnExpert.jsp
Zend Certified Engineer : http://zend.com/zce.php?c=ZEND002498&r=213474731
ZOPA : http://uk.zopa.com/member/RQuadling

没有评论: