<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:
in to theAnne,
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
ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrappeauto 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,
d)what NS it
]
[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
is looking for 'return' to be in.element being
Debug shows 'results' is a one element array with that
there are anull.
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
the schemanumber of known errors in XMLSpy. Perhaps it's just complaining because I used the same namespace for both the WSDL and
that's what(which is acceptable).
But there's nothing wrong with the second point. .NET will not object to the fact that <return> is unqualified, because
prefix does notthe 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:
(in MessageHi Anne,
Thanks for this, but two problems:
1. My copy of XMLSpy complains "Message part 'parameters'
echoStringRequest) - parameter intf:echoString: NS
to create a'return' stillrefer to this schema!"
But more importantly,
2. The problem still persists but nested 1 level down,
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
type="xsd:string"/>interoperability withdoc/literal service conforming to the "wrapped"
programming convention (which offers the best
.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"
element="intf:echoResponse"/></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"
location="http://localhost:8080/axis/services/LookupBorrower"/></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
axis to axis.</wsdl:port> </wsdl:service> </wsdl:definitions>
On Fri, 11 Mar 2005 15:37:34 -0000, Richard Wallis <[EMAIL PROTECTED]> wrote:
combinations ofHere is the whole doc.
For information I have tested this with all 4 possible
document/rpc & literal/encoded and the work fine
location="http://localhost:8080/axis/services/LookupBorrower"/>type="xsd:string"/>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"
</wsdl:message>message="impl:echoStringRequest"/>
<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
<wsdl:outputmessage="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
that thisin the WSDL?</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
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
for thisaround for this.is a problem.
If you are trying to consume an axis service in .net itappears to be
a 'show stopper'. I have tried use="encoded" but .netrejects it, and
also style="rpc" but still get xmlns="".
As yet I have not been able to identify a work
Although there seems to some hints of a bug fix
that I canin the pipeline, it is still a problem in 1.2RC3.
Questions:
1. Is there a work around for this so
the next RC?atleast use
my axis service in .net?
2. Is there a fix for this that will appear in
Richard Wallis
