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
|
|
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]
