On 9/5/07, Simon Nash <[EMAIL PROTECTED]> wrote: > > +1 to doing the fixup in one place, and rationalizing all the > places where we generate WSDL. I'd appreciate some pointers to > where these are as I don't think I've found them all yet :-) > > Simon > > Simon Laws wrote: > > > On 9/5/07, Simon Nash <[EMAIL PROTECTED]> wrote: > > > >>I have concerns about making the Tuscany code wrong to compensate for > >>the generated WSDL being wrong. This feels like a step in the wrong > >>direction, and it won't allow non-Tuscany Web service clients to call > >>Tuscany services that use generated WSDL. > >> > >>Instead, I'd prefer to have Tuscany postprocess the incorrect > >>WSDLDefinition returned by the Axis2 generator and fix it up so that > >>it's correct. The seems much cleaner and more robust that having > >>Tuscany override parts of the Axis2 generator code. If in future > >>the Axis2 code returns a correct WSDLDefinition, then the Tuscany > >>postprocessor can just pass it through unchanged. > >> > >>I am willing to take on the task of implementing this. > >> > >> Simon > >> > >>ant elder wrote: > >> > >> > >>>On 9/2/07, Simon Laws <[EMAIL PROTECTED]> wrote: > >>> > >>> > >>>>On 8/31/07, Simon Laws <[EMAIL PROTECTED]> wrote: > >>>> > >>>> > >>>>> > >>>>>On 8/31/07, Raymond Feng <[EMAIL PROTECTED]> wrote: > >>>>> > >>>>> > >>>>>>Hi, > >>>>>> > >>>>>>The operation.getInput() cannot be null to qualify for the wrapper > >>>>>>style. > >>>>>>There must be a part in the input message corresponding to the > >>>> > >>>>operation > >>>> > >>>> > >>>>>>name: > >>>>>> > >>>>>>input > >>>>>> --- message > >>>>>> --- part (only one part) > >>>>>> --- element (the element name should be the same as > >>>> > >>>>the > >>>> > >>>> > >>>>>>operation name) > >>>>>> > >>>>>>The element should look like this: > >>>>>> > >>>>>><element name="myMethod"> > >>>>>> <complexType> > >>>>>> <sequence/> <!-- an empty sequence --> > >>>>>> </complexType> > >>>>>></element> > >>>>>> > >>>>>>Thanks, > >>>>>>Raymond > >>>>>> > >>>>>>----- Original Message ----- > >>>>>>From: "Simon Laws" <[EMAIL PROTECTED]> > >>>>>>To: "tuscany-dev" <[email protected]> > >>>>>>Sent: Friday, August 31, 2007 10:34 AM > >>>>>>Subject: Wrapper style test in WSDL processing? > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>>>There is a test to determine whether a WSDL operation follows the > >>>>>>>"wrapped" > >>>>>>>style in accordance with JAX-WS 2.0 spec. See > >>>>>>>WSDLOperationIntrospectorImpl > >>>>>>>( > >>>>>>> > >>>>>> > >> > http://svn.apache.org/repos/asf/incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/impl/WSDLOperationIntrospectorImpl.java > >> > >>>>>>>) > >>>>>>> > >>>>>>>The code is currently > >>>>>>> > >>>>>>> public boolean isWrapperStyle() throws InvalidWSDLException { > >>>>>>> if (wrapperStyle == null) { > >>>>>>> wrapperStyle = > >>>>>>> wrapper.getInputChildElements() != null && ( > >>>>>>>operation.getOutput() == null || wrapper > >>>>>>> .getOutputChildElements() != null); > >>>>>>> } > >>>>>>> return wrapperStyle; > >>>>>>> } > >>>>>>> > >>>>>>>Which doesn't seem to cater for the case where there may be no > input > >>>>>>>parameters. I'm diving into this code now to see if I can work out > >>>>>> > >>>>>>what it > >>>>>> > >>>>>> > >>>>>>>means but if anyone has any insight I would appreciate it. > >>>>>>> > >>>>>>>Needless to say I have a scenario where I am trying to auto > generate > >>>>>> > >>>>>>WSDL > >>>>>> > >>>>>> > >>>>>>>for a method with the signature > >>>>>>> > >>>>>>>String myMethod() > >>>>>>> > >>>>>>>And it's complaining that it's not wrapped. > >>>>>>> > >>>>>>>Simon > >>>>>>> > >>>>>> > >>>>>> > > >>>>>>--------------------------------------------------------------------- > >>>>>>To unsubscribe, e-mail: [EMAIL PROTECTED] > >>>>>>For additional commands, e-mail: [EMAIL PROTECTED] > >>>>>> > >>>>>>What you are saying sounds right to me, I.e. you can validly have no > >>>>> > >>>>>parameters in your method but in this case it should build an empty > >>>> > >>>>sequence > >>>> > >>>> > >>>>><element name="myMethod"> > >>>>> <complexType> > >>>>> <sequence/> <!-- an empty sequence --> > >>>>> </complexType> > >>>>></element> > >>>>> > >>>>>And have this as the single input type. I'm deeper into the code now > >>>>>looking for why this isn't the case. > >>>>> > >>>>>Thanks Raymond > >>>>> > >>>>>Simon > >>>>> > >>>> > >>>>I've done a bit more investigation now. For the signature > >>>> > >>>>String foo() > >>>> > >>>>Axis2 Java2WSDL generates > >>>> > >>>> <wsdl:types> > >>>> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" > >>>> attributeFormDefault="qualified" > >>>>elementFormDefault="qualified" > >>>> targetNamespace="http://test/xsd"> > >>>> <xs:element name="fooResponse"> > >>>> <xs:complexType> > >>>> <xs:sequence> > >>>> <xs:element name="return" nillable="true" > >>>> type="xs:string" /> > >>>> </xs:sequence> > >>>> </xs:complexType> > >>>> </xs:element> > >>>> </xs:schema> > >>>> </wsdl:types> > >>>> <wsdl:message name="fooMessage" /> > >>>> <wsdl:message name="fooResponseMessage"> > >>>> <wsdl:part name="part1" element="ns:fooResponse" /> > >>>> </wsdl:message> > >>>> > >>>>So in our code when it comes to testing for wrapped it returns false > >>>>because > >>>>this doesn't match the algorithm that was presented earlier in this > >>>>thread, > >>>>i.e. there is no part of the input message corresponding to the > message > >>>>name. So when you try this in Tuscany is throws an exception saying > that > >>>>the > >>>>operation is not wrapped. > >>>> > >>>>It would be inconvenient for us to not support operations with no > >>>>parameters. As the wsdl generation process assumes that the target > >>>>operations will be generated as wrapped operations here's what I did.. > >>>> > >>>>1/ Changed the isWrapperStyle test (in WSDLOperationIntrospectorImpl) > >> > >>to > >> > >>>>read. > >>>> > >>>> public boolean isWrapperStyle() throws InvalidWSDLException { > >>>> if (wrapperStyle == null) { > >>>> wrapperStyle = > >>>> (operation.getInput > >>>>().getMessage().getParts().values().size() > >>>>== 0 ||wrapper.getInputChildElements() != null) && > >>>> (operation.getOutput() == null || > >>>>wrapper.getOutputChildElements() != null); > >>>> } > >>>> return wrapperStyle; > >>>> } > >>>> > >>>>I.e. I'm letting it pass if there are no input parts at all which I > >>>>believe > >>>>is valid according the the JAX-WS 2.0 spec > >>>> > >>>>2/ Fixed the getWrapperInfo method to take account of the case where > >> > >>there > >> > >>>>are no input params > >>>> > >>>> if (in != null) { > >>>> for (XmlSchemaElement e : getInputChildElements()) > { > >>>> inChildren.add(getElementInfo(e)); > >>>> } > >>>> } > >>>> > >>>>3/ Fixed the Axis2 binding to properly deal with the case when no > >>>>parameters > >>>>are present in Axis2ServiceInOutSyncMessageReceiver. > >>>> > >>>> public void invokeBusinessLogic(MessageContext inMC, MessageContext > >>>>outMC) throws AxisFault { > >>>> try { > >>>> OMElement requestOM = inMC.getEnvelope > >>>>().getBody().getFirstElement(); > >>>> Object[] args = null; > >>>> > >>>> if (requestOM != null) { > >>>> args = new Object[] {requestOM}; > >>>> } > >>>> > >>>>The Axis2ServiceInMessageReceiver needs the same fix if we go with > this. > >>>> > >>>>This works with the forward message relying on the soap action to > >>>>indentify > >>>>the correct operation. > >>>> > >>>>I haven't checked this in as the code seems to have been carefully > >> > >>crafted > >> > >>>>to assume that there will always be an input parameter. Can someone > >>>>explain > >>>>why this is thought to be the case? > >>> > >>> > >>> > >>>If there's no objections very soon then how about just doing this fix > >> > >>for > >> > >>>now so Tuscany tolerates the Axis2 way for now (and something similar > >> > >>for > >> > >>>TUSCANY-1658)? > >>> > >>> ...ant > >>> > >> > >> > >> > >>--------------------------------------------------------------------- > >>To unsubscribe, e-mail: [EMAIL PROTECTED] > >>For additional commands, e-mail: [EMAIL PROTECTED] > >> > >>We seem to be agreeing that patching up the axis generators is no ideal > > > > > > I quite like the sound of fixing up the WSDL after it's generated. > > > > We do WSDL generation in several places so we would have to trap them > > (ideally by rationalizing to use only one set of code if we can) > > > > Regards > > > > Simon > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > We certainly do in binding-ws-axis2 and java2wsdl. The sca remote binding calls into ws-axis2 but would need a fix it it's moved. Not sure where ?wsdl is done. Those are the ones I know about. Luciano and Ant are the experts here.
Simon
