> ....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.SoapParameterStyle.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: [email protected]; 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: [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
> > > >
> > > >
> > >
> > >
> >
>
>