You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by Richard Persche <rp...@us.hyperwave.com> on 2005/08/08 17:12:57 UTC
Problem with referenced elements in wsdl2java
Hi,
I am not an Axis developer but I think I found a problem with Axis 1.2.1 (same behavior with Axis 1.3 observed by Joe Nall) which I want to share with you.
When a wsdl contains elements that are defined by ref="xzy"
[...]
<xs:element name="countryCode" type="CompoundCountryCodeIdentifierType" nillable="true"/>
<xs:element name="geoRef" type="CompoundGeoRefIdentifierType" nillable="true"/>
<xs:complexType name="MyType">
<xs:choice>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="region" type="xs:string" nillable="true" minOccurs="0"/>
<xs:element ref="geoRef" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="countryCode" minOccurs="0"/>
</xs:sequence>
<xs:sequence>
<xs:element name="myIdentifier" type="MyIdentifierType" nillable="true" minOccurs="0"/>
</xs:sequence>
</xs:choice>
</xs:complexType>
[...]
the code produced by wsdl2java does not look correct:
Code:
MyType.java
private static org.apache.axis.description.TypeDesc typeDesc =
new org.apache.axis.description.TypeDesc(MyType.class, true);
static {
typeDesc.setXmlType(new javax.xml.namespace.QName("http://www.dod.mil/ddms/1.0/ddms#", "MyType"));
org.apache.axis.description.ElementDesc elemField = new org.apache.axis.description.ElementDesc();
elemField.setFieldName("name");
elemField.setXmlName(new javax.xml.namespace.QName("http://www.dod.mil/ddms/1.0/ddms#", "name"));
elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
elemField.setNillable(false);
typeDesc.addFieldDesc(elemField);
elemField = new org.apache.axis.description.ElementDesc();
elemField.setFieldName("region");
elemField.setXmlName(new javax.xml.namespace.QName("http://www.dod.mil/ddms/1.0/ddms#", "region"));
elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
elemField.setMinOccurs(0);
elemField.setNillable(true);
typeDesc.addFieldDesc(elemField);
elemField = new org.apache.axis.description.ElementDesc();
elemField.setFieldName("geoRef");
elemField.setXmlName(new javax.xml.namespace.QName("http://www.dod.mil/ddms/1.0/ddms#", "geoRef"));
elemField.setXmlType(new javax.xml.namespace.QName("http://www.dod.mil/ddms/1.0/ddms#", "geoRef"));
elemField.setMinOccurs(0);
elemField.setNillable(false);
elemField.setMaxOccursUnbounded(true);
typeDesc.addFieldDesc(elemField);
elemField = new org.apache.axis.description.ElementDesc();
elemField.setFieldName("countryCode");
elemField.setXmlName(new javax.xml.namespace.QName("http://www.dod.mil/ddms/1.0/ddms#", "countryCode"));
elemField.setXmlType(new javax.xml.namespace.QName("http://www.dod.mil/ddms/1.0/ddms#", "countryCode"));
elemField.setMinOccurs(0);
elemField.setNillable(false);
typeDesc.addFieldDesc(elemField);
elemField = new org.apache.axis.description.ElementDesc();
elemField.setFieldName("MyIdentifier");
elemField.setXmlName(new javax.xml.namespace.QName("http://www.dod.mil/ddms/1.0/ddms#", "myIdentifier"));
elemField.setXmlType(new javax.xml.namespace.QName("http://www.dod.mil/ddms/1.0/ddms#", "MyIdentifierType"));
elemField.setMinOccurs(0);
elemField.setNillable(true);
typeDesc.addFieldDesc(elemField);
}
When I added the following code to the JavaBeanHelperWriter.java to handle referenced types, the code was created correctly. (see below)
1_2_1/src/org/apache/axis/wsdl/toJava/JavaBeanHelperWriter.java
Lines 345++
xmlType = elemType.getQName();
//check ref type
if (elemType != null &&
elemType.getRefType() != null &&
elemType.getRefType().getQName() != null) {
xmlType = elemType.getRefType().getQName();
}
[...]
typeDesc.addFieldDesc(elemField);
elemField = new org.apache.axis.description.ElementDesc();
elemField.setFieldName("geoRef");
elemField.setXmlName(new javax.xml.namespace.QName("http://www.dod.mil/ddms/1.0/ddms#", "geoRef"));
elemField.setXmlType(new javax.xml.namespace.QName("http://www.dod.mil/ddms/1.0/ddms#", "CompoundGeoRefIdentifierType"));
elemField.setMinOccurs(0);
elemField.setNillable(false);
elemField.setMaxOccursUnbounded(true);
typeDesc.addFieldDesc(elemField);
elemField = new org.apache.axis.description.ElementDesc();
elemField.setFieldName("countryCode");
elemField.setXmlName(new javax.xml.namespace.QName("http://www.dod.mil/ddms/1.0/ddms#", "countryCode"));
elemField.setXmlType(new javax.xml.namespace.QName("http://www.dod.mil/ddms/1.0/ddms#", "CompoundCountryCodeIdentifierType"));
elemField.setMinOccurs(0);
elemField.setNillable(false);
[..]
I hope it is ok to send an email to this mailing list.
Regards
Richard
H
Richard Persché
Senior Systems Consultant
Tel. 617.901.4175
Fax 617.507.8425
richard.persche@hyperwave.com <ma...@hyperwave.com>
www.hyperwave.com <http://www.hyperwave.com/>
Re: Problem with referenced elements in wsdl2java
Posted by Davanum Srinivas <da...@gmail.com>.
Could you please open a bug report?
thanks,
dims
On 8/8/05, Richard Persche <rp...@us.hyperwave.com> wrote:
>
>
>
> Hi,
>
>
>
> I am not an Axis developer but I think I found a problem with Axis 1.2.1
> (same behavior with Axis 1.3 observed by Joe Nall) which I want to share
> with you.
>
>
>
> When a wsdl contains elements that are defined by ref="xzy"
>
>
>
> […]
>
> <xs:element name="countryCode"
> type="CompoundCountryCodeIdentifierType" nillable="true"/>
>
> <xs:element name="geoRef"
> type="CompoundGeoRefIdentifierType" nillable="true"/>
>
> <xs:complexType name="MyType">
>
> <xs:choice>
>
> <xs:sequence>
>
> <xs:element
> name="name" type="xs:string"/>
>
> <xs:element
> name="region" type="xs:string" nillable="true" minOccurs="0"/>
>
> <xs:element
> ref="geoRef" minOccurs="0" maxOccurs="unbounded"/>
>
> <xs:element
> ref="countryCode" minOccurs="0"/>
>
> </xs:sequence>
>
> <xs:sequence>
>
> <xs:element
> name="myIdentifier" type="MyIdentifierType" nillable="true" minOccurs="0"/>
>
> </xs:sequence>
>
> </xs:choice>
>
> </xs:complexType>
>
> […]
>
>
>
> the code produced by wsdl2java does not look correct:
>
>
>
> Code:
>
> MyType.java
>
>
>
> private static org.apache.axis.description.TypeDesc
> typeDesc =
>
> new
> org.apache.axis.description.TypeDesc(MyType.class, true);
>
>
>
> static {
>
> typeDesc.setXmlType(new
> javax.xml.namespace.QName("http://www.dod.mil/ddms/1.0/ddms#",
> "MyType"));
>
> org.apache.axis.description.ElementDesc elemField =
> new org.apache.axis.description.ElementDesc();
>
> elemField.setFieldName("name");
>
> elemField.setXmlName(new
> javax.xml.namespace.QName("http://www.dod.mil/ddms/1.0/ddms#",
> "name"));
>
> elemField.setXmlType(new
> javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema",
> "string"));
>
> elemField.setNillable(false);
>
> typeDesc.addFieldDesc(elemField);
>
> elemField = new
> org.apache.axis.description.ElementDesc();
>
> elemField.setFieldName("region");
>
> elemField.setXmlName(new
> javax.xml.namespace.QName("http://www.dod.mil/ddms/1.0/ddms#",
> "region"));
>
> elemField.setXmlType(new
> javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema",
> "string"));
>
> elemField.setMinOccurs(0);
>
> elemField.setNillable(true);
>
> typeDesc.addFieldDesc(elemField);
>
> elemField = new
> org.apache.axis.description.ElementDesc();
>
> elemField.setFieldName("geoRef");
>
> elemField.setXmlName(new
> javax.xml.namespace.QName("http://www.dod.mil/ddms/1.0/ddms#",
> "geoRef"));
>
> elemField.setXmlType(new
> javax.xml.namespace.QName("http://www.dod.mil/ddms/1.0/ddms#",
> "geoRef"));
>
> elemField.setMinOccurs(0);
>
> elemField.setNillable(false);
>
> elemField.setMaxOccursUnbounded(true);
>
> typeDesc.addFieldDesc(elemField);
>
> elemField = new
> org.apache.axis.description.ElementDesc();
>
> elemField.setFieldName("countryCode");
>
> elemField.setXmlName(new
> javax.xml.namespace.QName("http://www.dod.mil/ddms/1.0/ddms#",
> "countryCode"));
>
> elemField.setXmlType(new
> javax.xml.namespace.QName("http://www.dod.mil/ddms/1.0/ddms#",
> "countryCode"));
>
> elemField.setMinOccurs(0);
>
> elemField.setNillable(false);
>
> typeDesc.addFieldDesc(elemField);
>
> elemField = new
> org.apache.axis.description.ElementDesc();
>
> elemField.setFieldName("MyIdentifier");
>
> elemField.setXmlName(new
> javax.xml.namespace.QName("http://www.dod.mil/ddms/1.0/ddms#",
> "myIdentifier"));
>
> elemField.setXmlType(new
> javax.xml.namespace.QName("http://www.dod.mil/ddms/1.0/ddms#",
> "MyIdentifierType"));
>
> elemField.setMinOccurs(0);
>
> elemField.setNillable(true);
>
> typeDesc.addFieldDesc(elemField);
>
> }
>
>
>
> When I added the following code to the JavaBeanHelperWriter.java to handle
> referenced types, the code was created correctly. (see below)
>
>
>
> 1_2_1/src/org/apache/axis/wsdl/toJava/JavaBeanHelperWriter.java
>
> Lines 345++
>
> xmlType = elemType.getQName();
>
>
>
> //check ref type
>
> if (elemType != null &&
>
> elemType.getRefType() != null &&
>
> elemType.getRefType().getQName() != null) {
>
> xmlType = elemType.getRefType().getQName();
>
> }
>
>
>
>
>
> […]
>
> typeDesc.addFieldDesc(elemField);
>
> elemField = new
> org.apache.axis.description.ElementDesc();
>
> elemField.setFieldName("geoRef");
>
> elemField.setXmlName(new
> javax.xml.namespace.QName("http://www.dod.mil/ddms/1.0/ddms#",
> "geoRef"));
>
> elemField.setXmlType(new
> javax.xml.namespace.QName("http://www.dod.mil/ddms/1.0/ddms#",
> "CompoundGeoRefIdentifierType"));
>
> elemField.setMinOccurs(0);
>
> elemField.setNillable(false);
>
> elemField.setMaxOccursUnbounded(true);
>
> typeDesc.addFieldDesc(elemField);
>
> elemField = new
> org.apache.axis.description.ElementDesc();
>
> elemField.setFieldName("countryCode");
>
> elemField.setXmlName(new
> javax.xml.namespace.QName("http://www.dod.mil/ddms/1.0/ddms#",
> "countryCode"));
>
> elemField.setXmlType(new
> javax.xml.namespace.QName("http://www.dod.mil/ddms/1.0/ddms#",
> "CompoundCountryCodeIdentifierType"));
>
> elemField.setMinOccurs(0);
>
> elemField.setNillable(false);
>
> [..]
>
>
>
>
>
> I hope it is ok to send an email to this mailing list.
>
>
>
> Regards
>
>
>
> Richard
>
>
> H
>
>
> Richard Persché
>
> Senior Systems Consultant
>
> Tel. 617.901.4175
>
> Fax 617.507.8425
>
> richard.persche@hyperwave.com
>
> www.hyperwave.com
>
>
>
>
>
--
Davanum Srinivas -http://blogs.cocoondev.org/dims/