Hi Dino,

I don't like to live dangerously so I did start with the WSDL first,
then wsdl2java, then tested my solution axis - axis, finally used Visual
C#.net to pull in a Web reference to my service and let it build
everything.

The underlying code it built looks very similar to what you attached:

/// <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.Wrapped)
]
[return: System.Xml.Serialization.XmlElementAttribute("return")]
public string echoString(string inputString) {
   object[] results = this.Invoke("echoString", new object[]
{inputString});
   return ((string)(results[0]));
}

So all looks fine, but even though the SOAP looks ok when intercepted:
   <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="">Hi there</return>
         </echoStringResponse>
      </soapenv:Body>
   </soapenv:Envelope>

The C# always gives a null for the retun value (Actually 'results' is an
array of size one with that element = null.

In trying to solve this, my assumption [I know those are dangerous] was
that the xmlns="" was causing it to not identify the element it was
looking for correctly.

Richard.

> -----Original Message-----
> From: Dino Chiesa [mailto:[EMAIL PROTECTED] 
> Sent: 11 March 2005 17:49
> To: axis-user@ws.apache.org; Anne Thomas Manes
> Subject: RE: Empty namespace - again
> 
> 
> > ....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'.
> 
> No.
> 
> xmlns="" is not a problem for .NET. 
> 
> With .NET, just as with AXIS, you can specify to the XML 
> serialization engine the XML namespace to use for requests, 
> responses, and embedded complextypes.  You can specify other 
> things, too, like the xml element name, or attribute name, or 
> other stuff.  
> 
> In general, this is all done for you (by both AXIS and .NET), if you
> follow rule #1 and   Start With WSDL First (tm).  
> 
> If you like to live dangerously, and not Start With WSDL 
> First (tm) , then you need to modify the generated .NET 
> client-side stubs to introduce or modify attributes on your 
> methods and types, that agree with the XML put on the wire by AXIS.  
> 
> Here's some code that was generated by the .NET Wsdl.exe tool: 
> 
> [SoapDocumentMethodAttribute
> ("",
>   RequestNamespace="urn:ionic.webservices.2005.03.Types",
>   ResponseNamespace="urn:ionic.webservices.2005.03.Types",
>   Use=System.Web.Services.Description.SoapBindingUse.Literal,
>  
> ParameterStyle=System.Web.Services.Protocols.SoapParameterStyl
> e.Wrapped)
> ]
> [return: XmlElementAttribute("getComplexTypeReturn")]
> public MyComplexType getComplexType(string caller) {
>     object[] results = this.Invoke("getComplexType", new object[] {
>               caller});
>     return ((MyComplexType)(results[0])); }
> 
> This says,
>   -Use "" for the SoapAction. 
>   -Use the specified strings for the request and response 
> namespaces, Respectively.  They need not be the same. 
>   -literal encoding
>   -wrap the response in an element
>   -the return element will be <getComplexTypeReturn>
>   
> 
> The generated type on the .NET side looks like
>     [XmlType(Namespace="urn:ionic.webservices.2005.03.Types")]
>     public class MyComplexType {
>         ...
>     }
> 
> Which says, when serializing or de-serializing this type, the 
> xml element should be in xmlns="urn:ionic.webservices.2005.03.Types". 
> 
> If you want xmlns="", then use [XmlType("")].  This says to 
> .NET, when serializing or de-serializing, the XML element 
> should have xmlns="".  
> 
> ....and the show goes on...
> 
> By the way, the same sort of attribute-based tweaking of the 
> behavior of the XML serializer is possible on the server 
> side, for .NET services.
> So if you have a Java/AXIS webservice client that needs to 
> consume an ASMX .NET webservice, you can use these same sorts 
> of attributes to get
> the two sides to agree.   
> 
> ------
> 
> Generally though, if you follow the first law of web services interop,
> you don't have to trouble yourself with *any of* these issues.   The
> tools do it for you, which leaves more time for you to enjoy 
> your life.
> [Come to think of it, I should probably start advising people 
> to   Start
> With WSDL First(tm).  Hmm, good idea, Maybe I will do that....] 
> 
> -Dino
> 
>  
> 
> -----Original Message-----
> From: Richard Wallis [mailto:[EMAIL PROTECTED]
> Sent: Friday, March 11, 2005 12:02 PM
> To: axis-user@ws.apache.org; Anne Thomas Manes
> Subject: RE: Empty namespace - again
> 
> 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
> > > > >
> > > > >
> > > >
> > > >
> > >
> > 
> > 
> 
> 

Reply via email to