I can't remember why I did this but it failed a specific test (probably a unit test but i can't remember)




Nadir Amra <[EMAIL PROTECTED]>

26/06/2006 04:20

Please respond to
"Apache AXIS C Developers List" <[email protected]>

To
"Apache AXIS C Developers List" <[email protected]>
cc
Subject
the handling of nested anonymous types





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