Hi, .NET generates a wsdl schema with elementFormDefault="qualified", while Axis generates a wsdl schema with elemtnFormDefaut="unqualified".
So, the xmlns="" appears in soap message when Axis service is called from .NET client which uses .NET stub from Axis WSDL using wsdl.exe. In this case, the xmlns="" is ordinary and is not prolem in Axis and .NET interop at least in my tests. Althoug this is a matter of taste, the xmlns="" can be seen as unusual for users. As for me, the message <echoStringResponse xmlns="urn:LookupBorrower"> <return>Hello mum</return> </echoStringResponse> looks more pretty than <echoStringResponse xmlns="urn:LookupBorrower"> <return xmlns="">Hello mum</return> </echoStringResponse> . So I guess .NET and some other WS toolkit(JWSDP, WebLogic) makes schema with elementFormDefault="qualified" although the XML schema declares the default value as unqualified. The other pretty-look (without xmlns="") serialization form can be : <ns1:echoStringResponse xmlns:ns1="urn:LookupBorrower"> <return>Hello mum</return> </ns1:echoStringResponse> I am not sure any option/parameter exists in Axis for serialization like this. Thanks. ----- Original Message ----- From: "Dino Chiesa" <[EMAIL PROTECTED]> To: <axis-user@ws.apache.org> Sent: Saturday, March 12, 2005 7:13 AM Subject: RE: Empty namespace - again Dennis, > it's .NET that has the problem. Does that match your understanding, Dino? Nope. When I run .NET's wsdl.exe on a wsdl that contains a schema that omits the elementFormDefault attribute, the generated client-side proxy classes have inline code attributes that specify elements should be unqualified. Dennis, I believe this agrees with your translation of the spec requirements. When I modify the schema to specify an elementFormDefault, the generated client-side proxy agrees with that attribute value. In other words, everything behaves as expected. So unless Richard is seeing something different, then .NET is behaving properly. > The bug that you referenced, dims, is for WSDL generation from Axis. This problem is with the actual operation based on a supplied WSDL, if I'm understanding it correctly. I don't know, I am not clear on just what steps Richard has followed. We need him to ring back in here. If he generates his .NET client-side proxy from the (broken) WSDL generated by AXIS, then... he would see the error he described. It would agree with what I have just reproduced myself. If he generated his .NET client-side proxy from the original static WSDL, and saw that problem, then there's something wrong on the .NET side. But this would disagree with what I have just seen in my tests. I suspect Richard is across the pond, though, and won't be getting back to us until next week. . . --- The bug Dims referenced, still exists in RC3. -D -----Original Message----- From: Dennis Sosnoski [mailto:[EMAIL PROTECTED] Sent: Friday, March 11, 2005 4:49 PM To: axis-user@ws.apache.org Subject: Re: Empty namespace - again I haven't followed this in detail all the way through, but from what I can see of the schema in this email it sounds like Axis is doing the correct thing, it's .NET that has the problem. Does that match your understanding, Dino? The bug that you referenced, dims, is for WSDL generation from Axis. This problem is with the actual operation based on a supplied WSDL, if I'm understanding it correctly. - Dennis Davanum Srinivas wrote: >Dino, > >Is the issue same as in JIRA bug AXIS-1366? >(http://issues.apache.org/jira/browse/AXIS-1366) > >Or should we create a new issue for it? > >thanks, >dims > > >On Fri, 11 Mar 2005 12:41:41 -0800, Dino Chiesa <[EMAIL PROTECTED]> 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.Wrapp >>>e >>> >>> >>>>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: axis-user@ws.apache.org >>>>>>>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: axis-user@ws.apache.org >>>>>>>>>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 >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>> >>>>>>> >>>>> >>>>> > > > >