The handling of a nested anonymous type is not performed correctly.  For 
example, something like:

<element name="getCityInfoStringResponse">
    <complexType>
     <sequence>
      <element name="getCityInfoStringReturn" nillable="true" type="
xsd:string"/>
      <element name="MultiCompany">
                         <xsd:complexType>
                                 <xsd:sequence>
                                         <xsd:element name="Companies" 
type="xsd:string"/>
                                         <xsd:element name="Warning" type=
"xsd:string"/>
                                 </xsd:sequence>
                         </xsd:complexType>
       </element>
     </sequence>
    </complexType>
   </element>

You will not get MultiCompany class defined and in various parts of the 
code you will invalid code generated, such as in prototypes you would get 

AXIS_OUT_PARAM >_getCityInfoStringResponse_MultiCompany

In this particular case, I was able to solve the problem by updating the 
code in WSDL2Ws.java, method exposeMessagePartsThatAreAnonymousTypes() by 
removing the the following check:

&& !(type.getQName().getLocalPart().toString().lastIndexOf(">")>1)

from 

                 if(type.getQName().getLocalPart().toString().startsWith(
">")&& !(type.getQName().getLocalPart().toString().lastIndexOf(">")>1))

And updating the newTypeName from

QName newTypeName = new QName(parameterType.getName().getNamespaceURI(), 
parameterType.getName().getLocalPart().substring(1));

to

QName newTypeName = new QName(parameterType.getName().getNamespaceURI(), 
     parameterType.getName().getLocalPart().substring(1).replaceAll(">",
"_"));

Although this fixed this particular problem, I do not think this is a 
complete fix (I added another anonymous type nested within the 
MultiCompany called MultiCompany2 and it did not get processed).   I have 
been studying the code and basically I am wondering why I also should not 
remove the check from method exposeNestedTypesThatAreAnonymousTypes:

 && name.lastIndexOf(">")>0

from line 875: 

 if(name.startsWith(">") && name.lastIndexOf(">")>0)

and similarly, remove the check from method exposeReferenceTypes(): 

 && referencedType.getQName().getLocalPart().lastIndexOf(">") == 0

from line 1435: 

 if(referencedType!=null && 
referencedType.getQName().getLocalPart().startsWith(">") && 
referencedType.getQName().getLocalPart().lastIndexOf(">") == 0)

I guess I do not understand why we check if there are no more ">" 
characters, since in nested types there might be multiple ">" characters. 
In addition, the language specific name in info/Types.java's Type method 
has the following code:

                if (this.languageSpecificName.charAt(0) == '>')
                {
                    this.languageSpecificName =
                        ">"
                            + 
this.languageSpecificName.substring(1).replaceAll(
                                ">",
                                "_");
                }



Nadir K. Amra


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to