Thank you, Dennis ! -----Original Message----- From: Dennis Sosnoski [mailto:[EMAIL PROTECTED] Sent: Friday, March 11, 2005 3:53 PM To: [email protected] Subject: Re: Empty namespace - again
The schema spec leaves no room for doubt on this issue. Here's an excerpt of the schema element definition: <schema attributeFormDefault = (qualified | unqualified) : unqualified blockDefault = (#all | List of (extension | restriction | substitution)) : '' elementFormDefault = (qualified | unqualified) : unqualified finalDefault = (#all | List of (extension | restriction)) : '' ... The elementFormDefault attribute defaults to "unqualified" if not supplied, meaning that only the global elements and types are namespace qualified. - Dennis Dennis M. Sosnoski Enterprise Java, XML, and Web Services Training and Consulting http://www.sosnoski.com Redmond, WA 425.885.7197 Dino Chiesa wrote: >Yes ! Ack! > >I have seen this before. > >When the schema does not declare an elementFormDefault , .NET assumes >it is one way, And AXIS assumes it is the other. > >This is a bug in one or the other.(I don't know what a schema parser is >expected to do with EFD is missing). > >The workaround is to specify elementFormDefault, one way or the other, >in the schema. > >Good catch, Anne! > > > > >-----Original Message----- >From: Richard Wallis [mailto:[EMAIL PROTECTED] >Sent: Friday, March 11, 2005 1:29 PM >To: Anne Thomas Manes >Cc: Dino Chiesa >Subject: RE: Empty namespace - again > > Anne, > >Please award yourself a gold star! The elementFormDefault="qualified" >solved it, and 18:24 on a Friday night in an empty office after a >[very] long week. ;-} > >I've copied this to Dino for his interest. > >Many thanks again, > > Richard. > > > >>-----Original Message----- >>From: Anne Thomas Manes [mailto:[EMAIL PROTECTED] >>Sent: 11 March 2005 18:10 >>To: Richard Wallis >>Subject: Re: Empty namespace - again >> >>I'm surprised that .NET got confused by this, because normally it >>handles valid schema definitions. Perhaps Dino can shead some light on >> >> > > > >>it. But here's a work around. Add the elementFormDefault="qualified" >>attribute to the scehma definition, which will make the <return> >>element namespace qualified. >> >><wsdl:definitions xmlns:impl="urn:LookupBorrower" >>xmlns:intf="urn:LookupBorrower" >>xmlns:apachesoap="http://xml.apache.org/xml-soap" >>xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" >>xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" >>xmlns:xsd="http://www.w3.org/2001/XMLSchema" >>xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" >>targetNamespace="urn:LookupBorrower"> >> <wsdl:types> >> <xsd:schema targetNamepsace="urn:LookupBorrower" >> elementFormDefault="qualified"> >> <xsd:element name="echoString"> >> <xsd:complexType> >> <xsd:sequence> >> <xsd:element name="inputString" type="xsd:string"/> >> </xsd:sequence> >> </xsd:complexType> >> </xsd:element> >> <xsd:element name="echoResponse"> >> <xsd:complexType> >> <xsd:sequence> >> <xsd:element name="return" type="xsd:string"/> >> </xsd:sequence> >> </xsd:complexType> >> </xsd:element> >> </xsd:schema> >> </wsdl:types> >> <wsdl:message name="echoStringRequest"> >> <wsdl:part name="parameters" element="intf:echoString"/> >></wsdl:message> <wsdl:message name="echoStringResponse"> >> <wsdl:part name="parameters" >>element="intf:echoResponse"/> </wsdl:message> <wsdl:portType >>name="LookupBorrower"> >> <wsdl:operation name="echoString"> >> <wsdl:input message="impl:echoStringRequest"/> >> <wsdl:output message="impl:echoStringResponse"/> >> </wsdl:operation> >> </wsdl:portType> >> <wsdl:binding name="LookupBorrowerSoapBinding" >> type="impl:LookupBorrower"> >> <wsdlsoap:binding style="document" >> transport="http://schemas.xmlsoap.org/soap/http"/> >> <wsdl:operation name="echoString"> >> <wsdl:input> >> <wsdlsoap:body use="literal"/> >> </wsdl:input> >> <wsdl:output> >> <wsdlsoap:body use="literal"/> >> </wsdl:output> >> </wsdl:operation> >> </wsdl:binding> >> <wsdl:service name="LookupBorrowerService"> >> <wsdl:port name="LookupBorrower" >> binding="impl:LookupBorrowerSoapBinding"> >> <wsdlsoap:address >> >>location="http://localhost:8080/axis/services/LookupBorrower"/> >> </wsdl:port> >> </wsdl:service> >></wsdl:definitions> >> >> >>On Fri, 11 Mar 2005 17:56:50 -0000, Richard Wallis >><[EMAIL PROTECTED]> wrote: >> >> >>>Anne, >>> >>>I did, but it didn't! >>> >>>Here is my bit of C# built in Visual C#.net pulling in the Web >>>reference of my wsdl as supplied by my Axis server: >>> >>>static void Main(string[] args) >>>{ >>> ConsoleApplication1.rjwpc.LookupBorrowerService srv = new >>>ConsoleApplication1.rjwpc.LookupBorrowerService(); >>> String ret = srv.echoString("Hi there"); >>> Console.WriteLine("Response: "+ret); } >>> >>>It ret is set to null after the echoString() call. Digging >>> >>> >>in to the >> >> >>>auto created C# code I get the following: >>> >>>/// <remarks/> >>>[System.Web.Services.Protocols.SoapDocumentMethodAttribute("", >>>RequestNamespace="urn:LookupBorrower", >>>ResponseNamespace="urn:LookupBorrower", >>>Use=System.Web.Services.Description.SoapBindingUse.Literal, >>> >>> >>> >>ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrappe >> >> >>>d) >>>] >>>[return: System.Xml.Serialization.XmlElementAttribute("return")] >>>public string echoString(string inputString) { >>> object[] results = this.Invoke("echoString", new object[] >>>{inputString}); >>> return ((string)(results[0])); >>>} >>> >>>The ResponseNamespace="urn:LookupBorrower" makes me wonder >>> >>> >>what NS it >> >> >>>is looking for 'return' to be in. >>>Debug shows 'results' is a one element array with that >>> >>> >>element being >> >> >>>null. >>> >>>I'm getting more confused by the hour. >>> >>>Richard. >>> >>>P.S. I'm not too concerned about XMLSpy either! >>> >>> >>> >>> >>>>-----Original Message----- >>>>From: Anne Thomas Manes [mailto:[EMAIL PROTECTED] >>>>Sent: 11 March 2005 17:36 >>>>To: Richard Wallis >>>>Subject: Re: Empty namespace - again >>>> >>>>I don't understand what XMLSpy is complaining about, but >>>> >>>> >>there are a >> >> >>>>number of known errors in XMLSpy. Perhaps it's just complaining >>>>because I used the same namespace for both the WSDL and >>>> >>>> >>the schema >> >> >>>>(which is acceptable). >>>> >>>>But there's nothing wrong with the second point. .NET will not >>>>object to the fact that <return> is unqualified, because >>>> >>>> >>that's what >> >> >>>>the schema says it should be. .NET was objecting to the fact that >>>>the child element of the SOAP Body was unqualified. >>>> >>>>Try. You'll see. >>>> >>>>Anne >>>> >>>> >>>>On Fri, 11 Mar 2005 17:01:42 -0000, Richard Wallis >>>><[EMAIL PROTECTED]> wrote: >>>> >>>> >>>>>Hi Anne, >>>>> >>>>>Thanks for this, but two problems: >>>>>1. My copy of XMLSpy complains "Message part 'parameters' >>>>> >>>>> >>>>(in Message >>>> >>>> >>>>>echoStringRequest) - parameter intf:echoString: NS >>>>> >>>>> >>prefix does not >> >> >>>>>refer to this schema!" >>>>> >>>>>But more importantly, >>>>>2. The problem still persists but nested 1 level down, >>>>> >>>>> >>>>'return' still >>>> >>>> >>>>>has xmlns="": >>>>> >>>>> <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> >>>>> <echoStringResponse xmlns="urn:LookupBorrower"> >>>>> <return xmlns="">Hello mum</return> >>>>> </echoStringResponse> >>>>> </soapenv:Body> >>>>> </soapenv:Envelope> >>>>> >>>>>Richard. >>>>> >>>>> >>>>> >>>>>>-----Original Message----- >>>>>>From: Anne Thomas Manes [mailto:[EMAIL PROTECTED] >>>>>>Sent: 11 March 2005 15:56 >>>>>>To: [email protected] >>>>>>Subject: Re: Empty namespace - again >>>>>> >>>>>>Richard, >>>>>> >>>>>>This is not a valid doc/literal WSDL document. You need to define >>>>>>the WSDL differently depending on whether you want rpc/encoded, >>>>>>rpc/literal, of doc/literal. >>>>>> >>>>>>Here's how you should define your WSDL if you'd like >>>>>> >>>>>> >>to create a >> >> >>>>>>doc/literal service conforming to the "wrapped" >>>>>>programming convention (which offers the best >>>>>> >>>>>> >>>>interoperability with >>>> >>>> >>>>>>.NET). >>>>>> >>>>>><wsdl:definitions xmlns:impl="urn:LookupBorrower" >>>>>>xmlns:intf="urn:LookupBorrower" >>>>>>xmlns:apachesoap="http://xml.apache.org/xml-soap" >>>>>>xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" >>>>>>xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" >>>>>>xmlns:xsd="http://www.w3.org/2001/XMLSchema" >>>>>>xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" >>>>>>targetNamespace="urn:LookupBorrower"> >>>>>> <wsdl:types> >>>>>> <xsd:schema targetNamepsace="urn:LookupBorrower"> >>>>>> <xsd:element name="echoString"> >>>>>> <xsd:complexType> >>>>>> <xsd:sequence> >>>>>> <xsd:element name="inputString" >>>>>> >>>>>> >>type="xsd:string"/> >> >> >>>>>> </xsd:sequence> >>>>>> </xsd:complexType> >>>>>> </xsd:element> >>>>>> <xsd:element name="echoResponse"> >>>>>> <xsd:complexType> >>>>>> <xsd:sequence> >>>>>> <xsd:element name="return" type="xsd:string"/> >>>>>> </xsd:sequence> >>>>>> </xsd:complexType> >>>>>> </xsd:element> >>>>>> </xsd:schema> >>>>>> </wsdl:types> >>>>>> <wsdl:message name="echoStringRequest"> >>>>>> <wsdl:part name="parameters" element="intf:echoString"/> >>>>>> </wsdl:message> <wsdl:message name="echoStringResponse"> >>>>>> <wsdl:part name="parameters" >>>>>> >>>>>> >>element="intf:echoResponse"/> >> >> >>>>>> </wsdl:message> >>>>>> <wsdl:portType name="LookupBorrower"> >>>>>> <wsdl:operation name="echoString"> >>>>>> <wsdl:input message="impl:echoStringRequest"/> >>>>>> <wsdl:output message="impl:echoStringResponse"/> >>>>>> </wsdl:operation> >>>>>> </wsdl:portType> >>>>>> <wsdl:binding name="LookupBorrowerSoapBinding" >>>>>> type="impl:LookupBorrower"> >>>>>> <wsdlsoap:binding style="document" >>>>>> transport="http://schemas.xmlsoap.org/soap/http"/> >>>>>> <wsdl:operation name="echoString"> >>>>>> <wsdl:input> >>>>>> <wsdlsoap:body use="literal"/> >>>>>> </wsdl:input> >>>>>> <wsdl:output> >>>>>> <wsdlsoap:body use="literal"/> >>>>>> </wsdl:output> >>>>>> </wsdl:operation> >>>>>> </wsdl:binding> >>>>>> <wsdl:service name="LookupBorrowerService"> >>>>>> <wsdl:port name="LookupBorrower" >>>>>> binding="impl:LookupBorrowerSoapBinding"> >>>>>> <wsdlsoap:address >>>>>> >>>>>> >>>>>> >>>>>> >>location="http://localhost:8080/axis/services/LookupBorrower"/> >> >> >>>>>> </wsdl:port> >>>>>> </wsdl:service> >>>>>></wsdl:definitions> >>>>>> >>>>>> >>>>>>On Fri, 11 Mar 2005 15:37:34 -0000, Richard Wallis >>>>>><[EMAIL PROTECTED]> wrote: >>>>>> >>>>>> >>>>>>>Here is the whole doc. >>>>>>> >>>>>>>For information I have tested this with all 4 possible >>>>>>> >>>>>>> >>>>>>combinations of >>>>>> >>>>>> >>>>>>>document/rpc & literal/encoded and the work fine >>>>>>> >>>>>>> >>axis to axis. >> >> >>>>>>>The problem is that .net doesn't like xmlns="" or encoded. >>>>>>> >>>>>>><wsdl:definitions xmlns:impl="urn:LookupBorrower" >>>>>>>xmlns:intf="urn:LookupBorrower" >>>>>>>xmlns:apachesoap="http://xml.apache.org/xml-soap" >>>>>>>xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" >>>>>>>xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" >>>>>>>xmlns:xsd="http://www.w3.org/2001/XMLSchema" >>>>>>>xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" >>>>>>>targetNamespace="urn:LookupBorrower"> >>>>>>> <wsdl:message name="echoStringRequest"> >>>>>>> <wsdl:part name="inputString" >>>>>>> >>>>>>> >>>>type="xsd:string"/> >>>> >>>> >>>>>>> </wsdl:message> >>>>>>> <wsdl:message name="echoStringResponse"> >>>>>>> <wsdl:part name="return" type="xsd:string"/> >>>>>>> </wsdl:message> >>>>>>> <wsdl:portType name="LookupBorrower"> >>>>>>> <wsdl:operation name="echoString" >>>>>>>parameterOrder="inputString"> >>>>>>> <wsdl:input >>>>>>> >>>>>>> >>>>>>message="impl:echoStringRequest"/> >>>>>> >>>>>> >>>>>>> <wsdl:output >>>>>>> >>>>>>> >>>>>>message="impl:echoStringResponse"/> >>>>>> >>>>>> >>>>>>> </wsdl:operation> >>>>>>> </wsdl:portType> >>>>>>> <wsdl:binding name="LookupBorrowerSoapBinding" >>>>>>>type="impl:LookupBorrower"> >>>>>>> <wsdlsoap:binding style="document" >>>>>>>transport="http://schemas.xmlsoap.org/soap/http"/> >>>>>>> <wsdl:operation name="echoString"> >>>>>>> <wsdl:input> >>>>>>> <wsdlsoap:body use="literal" >>>>>>>encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" >>>>>>>namespace="urn:LookupBorrower"/> >>>>>>> </wsdl:input> >>>>>>> <wsdl:output> >>>>>>> <wsdlsoap:body use="literal" >>>>>>>encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" >>>>>>>namespace="urn:LookupBorrower"/> >>>>>>> </wsdl:output> >>>>>>> </wsdl:operation> >>>>>>> </wsdl:binding> >>>>>>> <wsdl:service name="LookupBorrowerService"> >>>>>>> <wsdl:port name="LookupBorrower" >>>>>>>binding="impl:LookupBorrowerSoapBinding"> >>>>>>> <wsdlsoap:address >>>>>>> >>>>>>> >>>>>>> >>location="http://localhost:8080/axis/services/LookupBorrower"/> >> >> >>>>>>> </wsdl:port> >>>>>>> </wsdl:service> >>>>>>></wsdl:definitions> >>>>>>> >>>>>>>Regards, >>>>>>> Richard. >>>>>>> >>>>>>> >>>>>>>>-----Original Message----- >>>>>>>>From: Anne Thomas Manes [mailto:[EMAIL PROTECTED] >>>>>>>>Sent: 11 March 2005 15:22 >>>>>>>>To: [email protected] >>>>>>>>Subject: Re: Empty namespace - again >>>>>>>> >>>>>>>>Please provide the rest of the WSDL document. >>>>>>>> >>>>>>>>Can we assume that you have defined the <return> element >>>>>>>> >>>>>>>> >>>>>>in the WSDL? >>>>>> >>>>>> >>>>>>>>Anne >>>>>>>> >>>>>>>> >>>>>>>>On Fri, 11 Mar 2005 15:00:29 -0000, Richard Wallis >>>>>>>><[EMAIL PROTECTED]> wrote: >>>>>>>> >>>>>>>> >>>>>>>>>Hi, >>>>>>>>> >>>>>>>>>This combination in the WSDL used as input to wsdl2java: >>>>>>>>> >>>>>>>>> <wsdlsoap:binding style="document" ........... >>>>>>>>> <wsdlsoap:body use="literal" ......... >>>>>>>>> >>>>>>>>>Results in an empty namespace thus: >>>>>>>>> >>>>>>>>> <soapenv:Body> >>>>>>>>> <return xmlns="">Hello World</return> >>>>>>>>> </soapenv:Body> >>>>>>>>> >>>>>>>>>Following many threads on this list it is clear >>>>>>>>> >>>>>>>>> >>that this >> >> >>>>>>>>is a problem. >>>>>>>> >>>>>>>> >>>>>>>>>If you are trying to consume an axis service in .net it >>>>>>>>> >>>>>>>>> >>>>>>>>appears to be >>>>>>>> >>>>>>>> >>>>>>>>>a 'show stopper'. I have tried use="encoded" but .net >>>>>>>>> >>>>>>>>> >>>>>>>>rejects it, and >>>>>>>> >>>>>>>> >>>>>>>>>also style="rpc" but still get xmlns="". >>>>>>>>> >>>>>>>>>As yet I have not been able to identify a work >>>>>>>>> >>>>>>>>> >>>>around for this. >>>> >>>> >>>>>>>>>Although there seems to some hints of a bug fix >>>>>>>>> >>>>>>>>> >>for this >> >> >>>>>>>>>in the pipeline, it is still a problem in 1.2RC3. >>>>>>>>> >>>>>>>>>Questions: >>>>>>>>> 1. Is there a work around for this so >>>>>>>>> >>>>>>>>> >>that I can >> >> >>>>>>>>>at >>>>>>>>> >>>>>>>>> >>>>>>>>least use >>>>>>>> >>>>>>>> >>>>>>>>>my axis service in .net? >>>>>>>>> >>>>>>>>> 2. Is there a fix for this that will appear in >>>>>>>>> >>>>>>>>> >>>>>>the next RC? >>>>>> >>>>>> >>>>>>>>>Richard Wallis >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>> >>>>>> >>>> >>>> > > >
