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
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>                  
>>>>>>>>>
>>>>>>>>                
>>>>>>>>
>>>>>>            
>>>>>>
>>>>        
>>>>
>
>  
>

Reply via email to