Comments inlined below... On 31 Aug, 11:35, [EMAIL PROTECTED] wrote: > Hi Graham > > Some more comments in line... > > On 31 Aug, 11:26, Graham Charters <[EMAIL PROTECTED]> wrote: > > > > > Hi Simon, thanks for the rapid comments. Here's my thoughts on the > > two issues you identified: > > > > 1/ What should SCA do if it finds a method without annotations, i.e. > > > no type information > > > This probably depends on the type of service. Service types which > > don't have a service description (e.g. local, REST and Atom), don't > > require this information to be specified. Service types which do have > > service descriptions (soap, json-rpc, xml-rpc), do (to varying > > degrees). > > > I think if the binding type requires documentation then we should warn > > and not generate (rather than generating something which is of no > > use). If the binding type doesn't require documentation then it's > > included. > > > > 2/ How can methods be omitted from the service interface, i.e. we just > > > don't want to expose the method > > > I don't think the absence of comments should be used as a control > > mechanism for the reason you and Matt have already highlighted (might > > want to document something but still not have it on the service > > interface). > > > I quite like the idea of using interfaces to add this level of > > control. It would also be consistent with SCA (SCA Java does this and > > also supports the same class implementation approach we use (i.e. > > where there is no interface)). How about something like: > > > /** > > * Scaffold implementation for a remote StockQuote Web service. > > * > > * @service StockQuoteInterface > > * @binding.soap > > * > > */ > > StockQuoteImpl implements StockQuoteInterface, ANOtherInterface { > > ... > > > } > > So I like @service StokeQuoteInterface > > If you are suggesting that we can parse the StockQuoteInterface to > pull out the method names which should be provided as service > interfaces (without the need for further annotation on the interface > itself) then this could work. My approach was a contraction of this by > just providing the method names after the interface name in the > annotation but your approach is more forward thinking. >
We should be able to update this in SCA_AnnotationReader.php. I believe all the information is available through Reflection. You can call getInterfaces() on the ReflectionClass, which returns an array of ReflectionClass objects, one for each interface. I don't think we would require further annotations in the interface, but we will need to decided whether to use annotations/documentation in an interface if it is provided. > Presumably the default would be to provide all methods if no interface > is described. > Yes, so this would be backwards compatible. > > > > This would be taken to mean that only those methods defined on > > StockQuoteInterface are part of the soap service. Those in > > ANOtherInterface or just in StockQuoteImpl would be excluded. I'd > > prefer to pursue this approach rather than creating a new annotations > > which may go away in the near future. > > > Does this make sense and seem sensible? > > > On 31 Aug, 09:30, [EMAIL PROTECTED] wrote: > > > > On 31 Aug, 08:42, Graham Charters <[EMAIL PROTECTED]> wrote: > > > > > Pecl Request #11944 (http://pecl.php.net/bugs/bug.php?id=11944) is > > > > asking for finer-grained control over the methods which are surfaced > > > > on a service interface. We currently just use class visibility (i.e. > > > > all public methods) to control this. > > > > > There's a small amount of discussion in the request, but I thought it > > > > would be good to raise it here to get greater visibility and gather > > > > more options/opinions. > > > > > Graham. > > > > Following up on the comments made in the feature request... > > > > It is true that in the Java SCA implementation the @Service > > > information is associated with interfaces so a class will implementat > > > one, or more, interfaces and this tells the runtime which methods of > > > the class should be treated as service methods. > > > > This is not currently how the PHP SCA implementation works. All > > > annotations are placed on the class itself. This leads to a level of > > > simplicity in service construction but we pay for this in lack of > > > flexibility, for example, in excluding some methods from the service > > > interface. At least given the set of annotations we have at the > > > moment. > > > > Having said this I'm not convinced that the use of unannotated (is > > > that a word?) methods as part of the service interface makes a lot of > > > sense give the way that the implementation works at the moment. If you > > > look at what is actually generated in the WSDL in the case of the > > > method "function foo($bar)" in the feature request it doesn't seem to > > > be that useful. I.e. it defines null input and output types. I assume > > > this is because there are no annotations for SCA to use for typing the > > > interface. Fine for PHP but not so great for a service interface. > > > > So there are two issues here > > > > 1/ What should SCA do if it finds a method without annotations, i.e. > > > no type information > > > 2/ How can methods be omitted from the service interface, i.e. we just > > > don't want to expose the method > > > > As first suggested we could omit methods that don't have comments at > > > all.. However this is problematic for issue 2 as annotations may have > > > been included for producing the documentation that the annotations > > > were originally designed for. However I think we should consider > > > omitting methods without annotations due to issue 1 so this could be a > > > short term solution 2. > > > > Following the conversation on for issue 2. Maybe, as an alternative to > > > @scaExcludeMethod we could defined some new annotation for the header > > > block that works as an alternative to defining an interface (we should > > > look whether interfaces could be made to work), e.g. > > > > /** > > > * Scaffold implementation for a remote StockQuote Web service. > > > * > > > * @service > > > * @serviceinterface GetQuote getQuote > > > * @binding.soap > > > * > > > */ > > > > If these don't appear then the default would be to operate as now > > > with all of the (annotated) methods being parsed. The intention here > > > being to replace/augment this with annotations on interfaces if/'when > > > they work. > > > > Regards > > > > Simon --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "phpsoa" group. To post to this group, send email to phpsoa@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.co.uk/group/phpsoa?hl=en -~----------~----~----~----~------~----~------~--~---