Hi José,

Why would you see this WSDL is not WS-I Compliant? I don't see any problem
in the WSDL. But I do agree with you that the WSDL generated by Axis2 may
have to be tweaked on some occations to best suite your needs. Especially
the minOccurs and nillable attributes.

Just to clarify the meaning of minOccurs and nillable. minoccurs="0" would
mean that this element is optional. So it is a valid request even if this
element is missing in the request. If I take the following schema as an
example,
<xs:element name="logon">
     <xs:complexType>
       <xs:sequence>
         <xs:element minOccurs="0" name="user" nillable="true"
type="xs:string"/>
         <xs:element minOccurs="0" name="pass" nillable="true"
type="xs:string"/>
         <xs:element minOccurs="0" name="device" nillable="true"
type="xs:string"/>
         <xs:element minOccurs="0" name="cell" nillable="true"
type="xs:string"/>
       </xs:sequence>
    </xs:complexType>
</xs:element>

in here,

<logon>
    <user>Keith Chapman</user>
</logon>

is a valid request. As all elements are optional.

On the other hand nillable means that the value of a certain element could
be null (but the element has to exist)

so the following is a valid request

<logon>
    <user xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
xsi:nil="true"/>
<logon>

So as all elements are optional I'm not sending in all element but I do send
a logon element which has no value. So I state that its nill.

Hope this gives you an understanding on minoccurs and nillable.

Thanks,
Keith.

On Sat, Jun 14, 2008 at 3:27 AM, José Ferreiro <[EMAIL PROTECTED]>
wrote:

> Hello Zaq,
>
> The problem comes from the wsdl itself. It is not WS-I compliant, in terms
> of interoperability.
> If I understand well your wsdl is not so huge till now (two elements: logon
> and logonResponse).
>
> I will advise you to write your wsdl yourself using the approach wsdl
> first[1].
> This is the price to pay if you want to achieve interoperability with
> dotnet (wsdl.exe).
> Please also read this interesting article from Anne Thomas Manes. There
> is an example of WSDL wrapped style. This style is important to achieve
> interoperability with dotnet. [2]
> From there you may generate the stubs using ant wsdl2java.
>
> ::You wrote:
> ::The XML response (in firefox)
> ::<ns:logonResponse>
> ::    <ns:return>2046037248</ns:return>
> ::</ns:logonResponse>
>
>
> You may generate the UUID  type using java:
> http://java.sun.com/j2se/1.5.0/docs/api/java/util/UUID.html
> which corresponds in .net, c# as a GUID (e.g.
> ad87084f-1f7e-4875-9e5d-8a626aad3bbd).
> It is a type similar to MAC addresses [3].
> Generating an integer shouldn't be the same in .net when the
> deserialization happends in the .net client side.
> This should probably raised an error.
>
> In my opinion, you may reduce this:
>
> <xs:element name="logonResponse">
>     <xs:complexType>
>      <xs:sequence>
>        <xs:element minOccurs="0" name="return" type="xs:int"/>
>      </xs:sequence>
>     </xs:complexType>
> </xs:element>
>
> to:
>
> <xs:element minOccurs="0" name="logonResponse" type="xs:int"/>
>
> minOccurs should it  be equal to 1? Because you should always return a
> UUID.
> As written it means that sometimes the logonResponse element does not
> exist.
>
> Hope this helps!
>
> Jose Ferreiro
>
> [1] http://www.mindreef.com/newsletter/newsletter-v6.html
> [2]
> http://atmanes.blogspot.com/2005/03/wrapped-documentliteral-convention.html
> [3] http://www.csharpfriends.com/Articles/getArticle.aspx?articleID=335
>
> On Fri, Jun 13, 2008 at 10:41 PM, Chris Richmond <[EMAIL PROTECTED]>
> wrote:
>
>>  Zaq,
>>
>>
>>
>> I have seen this similar problem.  The culprit is actually that
>> nillable="true"  OR minOccurs = "0" or possibly both in those parameters(I
>> don't' remember exactly which one(s) it was I had to modify to fix it).
>> Unfortunately Axis2 produces this sort of wsdl and as far as I know you
>> cannot easily change it.
>>
>>
>>
>> Let me guess…your .net client is adding to boolean parameters along the
>> lines of isProvided? That is because .net proxy generator thinks some things
>> are optional, and rightfully so according to the WSDL.
>>
>>
>>
>> The best thing to do is take your wsdl generated by axis 2 and hand tweak
>> those attributes and .NET will produce cleaner clients for it.  Of course
>> you could always just provide TRUE for all cases of the "isProvided"(or
>> whatever it is called) variables in your .net code.
>>
>>
>>
>> Hope this helps…I had a problem with this too and I just provided hand
>> tweaked WSDL to clients to generate from.
>>
>>
>>
>> Chris
>>
>>
>>  ------------------------------
>>
>> *From:* Zaq Rizer [mailto:[EMAIL PROTECTED]
>> *Sent:* Friday, June 13, 2008 6:02 AM
>> *To:* [email protected]
>> *Subject:* Trouble with a .NET client.
>>
>>
>>
>> I have a fairly simple Axis2 setup (running in Tomcat5.5), using POJO.
>> I've written the java client code, which generated the proper WSDLs and have
>> used Ruby's wsdlDriver successfully to test my methods throughout my
>> development process, all with great success.
>>
>> However, when attempting to consume this service from a .NET (2.0) client,
>> the client is unable to understand the result of my service.  I see the call
>> to my service, and the underlying database call succeeds, in fact.
>> Basically, everything succeeds "on my end" but the client cannot handle it
>> properly.  My .NET people are having issues because the .NET framework does
>> not want to call my logon method with four input parameters and have it
>> return a single int.  It's requiring them to send six input parameters, with
>> the latter two being passed by reference (these are the outputs).  No matter
>> what they do, they only see a single 1 returned as opposed to the ten-digit
>> UUID that they should be getting.  I've read other reports and issues from
>> people in similar situations but many of the solutions seem to pertain to
>> either the nillable property, or the minOccurs property; how can I specify
>> these if I'm using java2wsdl?
>>
>> Relevant code follows ...
>>
>> My method accepts four parameters, and returns a single int.
>>
>> *the WSDL for the logon method:*
>>  <xs:element name="logon">
>>      <xs:complexType>
>>        <xs:sequence>
>>          <xs:element minOccurs="0" name="user" nillable="true"
>> type="xs:string"/>
>>          <xs:element minOccurs="0" name="pass" nillable="true"
>> type="xs:string"/>
>>          <xs:element minOccurs="0" name="device" nillable="true"
>> type="xs:string"/>
>>          <xs:element minOccurs="0" name="cell" nillable="true"
>> type="xs:string"/>
>>        </xs:sequence>
>>     </xs:complexType>
>> </xs:element>
>> <xs:element name="logonResponse">
>>     <xs:complexType>
>>      <xs:sequence>
>>        <xs:element minOccurs="0" name="return" type="xs:int"/>
>>      </xs:sequence>
>>     </xs:complexType>
>> </xs:element>
>>
>> *The Java method:*
>> public int logon(String user, String password, String device, String
>> cell){
>>      /* Database actions, create a session, etc.  */
>>      return int;  // An integer representation of a UUID.
>> }
>>
>> *The XML response (in firefox)
>> *<ns:logonResponse>
>>     <ns:return>2046037248</ns:return>
>> </ns:logonResponse>
>>
>
>


-- 
Keith Chapman
Senior Software Engineer
WSO2 Inc.
Oxygenating the Web Service Platform.
http://wso2.org/

blog: http://www.keith-chapman.org

Reply via email to