aspose file tools*
The moose likes Web Services and the fly likes problem with WSDL2Java and nested complex types Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Web Services
Bookmark "problem with WSDL2Java and nested complex types" Watch "problem with WSDL2Java and nested complex types" New topic
Author

problem with WSDL2Java and nested complex types

Dario Rehman
Greenhorn

Joined: Nov 24, 2006
Posts: 18
I generated a Web Service Client with Eclipse (which is using Axis 1.3) from a WSDL that contains nested complex types.

I noticed that the generated Java code doesn't contain the innermost complex types. Is this some bug in WSDL2Java?

Thanks.
sveta deshpande
Greenhorn

Joined: Oct 30, 2007
Posts: 4
Hi, Eclipse means, are you using WebSphere Integration developer?
Please let me know,as ?i have sum issues reg: it.

Fine thn,
Shveta.
Dario Rehman
Greenhorn

Joined: Nov 24, 2006
Posts: 18
Originally posted by sveta deshpande:
Hi, Eclipse means, are you using WebSphere Integration developer?
Please let me know,as ?i have sum issues reg: it.

Fine thn,
Shveta.


I am using JBoss 4.0.4 GA.
Peer Reynders
Bartender

Joined: Aug 19, 2005
Posts: 2922
    
    5
Are you able to post the WSDL?
Peer Reynders
Bartender

Joined: Aug 19, 2005
Posts: 2922
    
    5
Originally posted by Dario Rehman:
I noticed that the generated Java code doesn't contain the innermost complex types. Is this some bug in WSDL2Java?


The behavior you are seeing is not a bug - its a feature. The the "missing" types converted to standard Java types - not their own Beans.



MyDocType maps to this:



So String2Of10ArrayOf2to7 can be found on ArrayOfStringArrays[0] through ArrayOfStringArrays[6]
And String2Of10 can be found on ArrayOfStringArrays[0][0] to ArrayOfStringArrays[0][1] up to
ArrayOfStringArrays[6][0] and ArrayOfStringArrays[6][1].

This is standard JAX-RPC WSDL-to-Java mapping. Whenever it sees a maxOccurs > 1 it will map to an array type (not an indexed property on a bean) and minOccurs other than "0" are ignored. Furthermore restrictions on the string length are ignored.
Dario Rehman
Greenhorn

Joined: Nov 24, 2006
Posts: 18
Originally posted by Peer Reynders:


The behavior you are seeing is not a bug - its a feature. The the "missing" types converted to standard Java types - not their own Beans.



MyDocType maps to this:



So String2Of10ArrayOf2to7 can be found on ArrayOfStringArrays[0] through ArrayOfStringArrays[6]
And String2Of10 can be found on ArrayOfStringArrays[0][0] to ArrayOfStringArrays[0][1] up to
ArrayOfStringArrays[6][0] and ArrayOfStringArrays[6][1].

This is standard JAX-RPC WSDL-to-Java mapping. Whenever it sees a maxOccurs > 1 it will map to an array type (not an indexed property on a bean) and minOccurs other than "0" are ignored. Furthermore restrictions on the string length are ignored.


Is there some way of overriding this type mapping so that it will map to a property on a bean?

Thanks.
Dario Rehman
Greenhorn

Joined: Nov 24, 2006
Posts: 18
Here is the WSDL:



and here is the generated client Java code:




and the SOAP envelope that is sent:



The element that is causing problems is the Quadro element.
This element should appear in the SOAP envelope as something like, as specified in the WSDL:
<Quadro xmlns="">
<Linha>
<Campo>aaaa-mmm-dd</Campo>
<Campo>aaaa-mmm-dd</Campo>
</Linha>
<Linha>
<Campo>aaaa-mmm-dd</Campo>
<Campo>aaaa-mmm-dd</Campo>
</Linha>
</Quadro>

How can I change the WSDL so the element Campo appears in the SOAP envelope?
Peer Reynders
Bartender

Joined: Aug 19, 2005
Posts: 2922
    
    5
JAX-RPC under J2EE is required to support JAX-RPC mapping files which support some type coercion. JBossWS supports jaxrpc-mapping.xml files - Axis never has. Even if it did, there would be some decisions that you would have to make:
  • String2Of10 doesn't appear as a separate class as it is basically a string. Do you want this to appear as a bean with a single string property?
  • String2Of10ArrayOf2to7 doesn't appear as a separate class as it is simply an array of strings. Do you want this as a bean with a single string array property or an indexed string property?
  • ArrayOfStringArrays doesn't appear as separate class because it is simply and array of string arrays. I presume you want and indexed property returning String2Of10ArrayOf2to7 beans?


  • I suspect that Axis never bothered with JAX-RPC mappings files because it is just easier and more flexible to take the types that the wsdl-to-java generator produces and then write a converter to convert the generated classes to the desired object model classes. Ultimately the generated classes are just DTOs - devoid of any behavior; your object model may also choose to enforce constraints in classes that are separate from the classes the carry the data.

    So if you want beans then simply write a converter - converters also tend to be very easy to unit test.

    Axis does support bean mappings. However that would require that you to code you beans first and then fiddle with the wsdd until it leads to a WSDL that is "close enough" to the one you have - sounds like way too much work to me.
    Peer Reynders
    Bartender

    Joined: Aug 19, 2005
    Posts: 2922
        
        5
    JAX-RPC under J2EE is required to support JAX-RPC mapping files which support some type coercion. JBossWS supports jaxrpc-mapping.xml files - Axis never has. Even if it did, there would be some decisions that you would have to make:
  • String2Of10 doesn't appear as a separate class as it is basically a string. Do you want this to appear as a bean with a single string property?
  • String2Of10ArrayOf2to7 doesn't appear as a separate class as it is simply an array of strings. Do you want this as a bean with a single string array property or an indexed string property?
  • ArrayOfStringArrays doesn't appear as separate class because it is simply and array of string arrays. I presume you want a bean with an indexed property returning String2Of10ArrayOf2to7 beans?


  • I suspect that Axis never bothered with JAX-RPC mappings files because it is just easier and more flexible to take the types that the wsdl-to-java generator produces and then write a converter to convert the generated classes to the desired object model classes. Ultimately the generated classes are just DTOs - devoid of any behavior; your object model may also choose to enforce constraints in classes that are separate from the classes the carry the data.

    So if you want beans then simply write a converter - converters also tend to be very easy to unit test.

    Axis does support bean mappings. However that would require that you to code you beans first and then fiddle with the wsdd until it leads to a WSDL that is "close enough" to the one you have - sounds like way too much work to me.
    Dario Rehman
    Greenhorn

    Joined: Nov 24, 2006
    Posts: 18
    Originally posted by Peer Reynders:
  • String2Of10 doesn't appear as a separate class as it is basically a string. Do you want this to appear as a bean with a single string property?


  • Yes.

  • String2Of10ArrayOf2to7 doesn't appear as a separate class as it is simply an array of strings. Do you want this as a bean with a single string array property or an indexed string property?



  • This should be an array of the type of the previous bean.




    I suspect that Axis never bothered with JAX-RPC mappings files because it is just easier and more flexible to take the types that the wsdl-to-java generator produces and then write a converter to convert the generated classes to the desired object model classes. Ultimately the generated classes are just DTOs - devoid of any behavior; your object model may also choose to enforce constraints in classes that are separate from the classes the carry the data.

    So if you want beans then simply write a converter - converters also tend to be very easy to unit test.

    Axis does support bean mappings. However that would require that you to code you beans first and then fiddle with the wsdd until it leads to a WSDL that is "close enough" to the one you have - sounds like way too much work to me.[/QB]
     
    I agree. Here's the link: http://aspose.com/file-tools
     
    subject: problem with WSDL2Java and nested complex types