> > PERFUME PROPOSAL: SOAP FOR COCOON > > > > For the web application project I'm orchestrating, we > > wish to add commercial quality support for SOAP > > messaging: both act as a client and as a server. > > > > I have examined the existing soap client package, > > and new soap package, but I'm uncomfortable with > > them because the former is xsp based, and the later > > is implemented only as a reader. > > Is there something the reader currently prohibits you from doing ?
My anticipated application solution will probably have two or three XSL transformation steps, one or two SQL, and possibly a custom transformer or two. It is a style of software architecture I call XML-Directed Software, and it seems highly suitable for creating soap services. I'm under the impression a reader cannot do this. That somehow a reader is first, last, and all elements of a pipeline. Is this true, or am I misinformed? > > > It is my opinion that Cocoon needs components that can > > > > play well together, and can be mixed and matched. > > Therefore, I'd like to propose a package I call > > "PERFUME." > > > > PERFUME: > > > > 1) The implementation of Perfume shall result > > in three distinct Cocoon components: > > > > a) A generator that can receive a soap > > message and turn it into an xml sax > > stream. > > StreamGenerator ? > > > b) A serializer that can convert an xml > > stream into a return soap message. > > XMLSerializer ? > > or do you mean a serializer that can magically convert something like: > > <memory> > <total>123123123</total> > </memory> > > into: > > <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"; > xmlns:xsd="http://www.w3.org/2001/XMLSchema"; > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";> > <soapenv:Body> > <ns1:getTotalMemoryResponse > soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"; > xmlns:ns1="Cocoon-JVM-Memory"> > <getTotalMemoryReturn xsi:type="xsd:long">123123123</getTotalMemoryReturn> > </ns1:getTotalMemoryResponse> > </soapenv:Body> > </soapenv:Envelope> > > If this is the case, note that the serializer requires knowledge of the > request content to build up the response xml structure appropriately, > and also how it should convert the first xml document into the second. Yes, it does looks the StreamGenerator and XMLSerializer could do the job. Handling errors according to the SOAP standard may be a bit difficult, but it seems like these two components should handle the more straight forward situations. > > c) A transformer that can act as a soap > > client. Incoming xml is transmitted > > as a soap message, the pipe is blocked > > until return or time out, and then the > > received message is returned into the xml > > sax stream. > > Yes. Something like this is on my TODO list at the moment. I was > considering reusing the markup from the xsp tag lib - did you see any > problems with that ? You tell me? I haven't downloaded your client code yet. The question is whether your approach is too "reader" oriented to be metamorphosised into a transformer. > > > 2) The intended usage is: > > > > a) If one wishes to implement a soap service, > > a pipeline beginning with the generator > > and ending with the serializer is > > constructed. > > How will this actually work for the end user though ? > > Lets look at a simple pipeline: > > <map:match pattern="soap-service"> > <map:generate type="stream"/> > <map:transform type="..."/> > <map:serialize type="xml"> > </map:match> You pipeline above is exactly what I'm think of for a soap-service! > > So the real work of doing the service is done during the transform stage, > which means the end-user will have to write their own transformer/s to > convert the soap request into a soap response, manually parsing the > input soap document (!) Yes, but Cocoon components like SQLTransformer and XSLTransformer are good at this tasks. My biggest concern is that they are NOT good at handling errors, for example if someone sends the wrong message to the wrong port. > > That could be simplified by writing a SOAPTransformer that provides a > framework for calling a user defined class to do the work and return the > results, but that's actually the same as the current AxisRPCReader - just > that in the case of the reader the explicit generation and serialization > stages are removed from the pipeline. Again, see comments about XML-Directed Software. The key concept is to solve the problem in the framework of a stream of XML transformer components. Is this new, and is the present available arsenal of components small? Yes. But I believe that XML-Directed Architectures are the future of software. > I get the suspicion that the generator and serializer do more than simply > convert between http-post -> sax -> http-response ? If this is right can > you elaborate some more about what they should do ? Sorry, I can't elaborate on your suspicions, I am not yet that experienced with SOAP, but I share your suspicions. In particular, I suspect that error handling is the main requirement that falls out-of-bounds with the most simple approach as outline above. > The benefit the reader has is that it uses Axis to do all of the work, > just as if your service has been written for Axis exclusively. You just > write your business logic as a normal class and that's it. > > If there's a specific need for it, we could move the reader to a > transformer - I couldn't find any reason to do so at the time when I wrote > the reader though - is there some example you have that needs this ? Yes, I feel I do. Could you outline for me what it would take to wrap a transformer around Axis so that it can behave as a client in a Cocoon Xml pipeline stream? Thanks for all your comments: Steven P. Punte Candlelight Software [EMAIL PROTECTED] http://www.candlelightsoftware.com __________________________________________________ Do you Yahoo!? New DSL Internet Access from SBC & Yahoo! http://sbc.yahoo.com --------------------------------------------------------------------- Please check that your question has not already been answered in the FAQ before posting. <http://xml.apache.org/cocoon/faq/index.html> To unsubscribe, e-mail: <[EMAIL PROTECTED]> For additional commands, e-mail: <[EMAIL PROTECTED]>