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 (JIRA)" <ax...@ws.apache.org> on 2005/08/22 23:56:08 UTC
[jira] Commented: (AXIS-2170) WSDL2JAVA does not create proper code for referenced elements
[ http://issues.apache.org/jira/browse/AXIS-2170?page=comments#action_12319648 ]
Richard Persche commented on AXIS-2170:
---------------------------------------
This wsdl creates the problem.
<wsdl:definitions xmlns="http://test.axis.com/wsdl2java/" xmlns:soapbind="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://test.axis.com/wsdl2java/" name="axisTest">
<wsdl:types>
<xs:schema targetNamespace="http://test.axis.com/wsdl2java/" xmlns="http://test.axis.com/wsdl2java/" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="unqualified" attributeFormDefault="unqualified">
<xs:element name="testString" type="xs:string"/>
<xs:element name="testDate" type="xs:date"/>
<xs:element name="my" type="MyType" nillable="true"/>
<xs:complexType name="MyType">
<xs:sequence>
<xs:element ref="testString" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="WSDLTest_Type">
<xs:sequence>
<xs:element ref="my" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
<xs:sequence>
<xs:element ref="testString" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="WSDLTestResponse_Type">
<xs:sequence>
<xs:element ref="testDate" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
<xs:element name="getWSDLTest" type="WSDLTest_Type"/>
<xs:element name="getWSDLTestResponse" type="WSDLTestResponse_Type"/>
</xs:schema>
</wsdl:types>
<wsdl:message name="GetWSDLTestRequestMessage">
<wsdl:part name="getWSDLTestRequest" element="getWSDLTest"/>
</wsdl:message>
<wsdl:message name="GetWSDLTestResponseMessage">
<wsdl:part name="getWSDLTestResponse" element="getWSDLTestResponse"/>
</wsdl:message>
<wsdl:portType name="GetWSDLTestPortType">
<wsdl:operation name="getWSDLTest">
<wsdl:input message="GetWSDLTestRequestMessage"/>
<wsdl:output message="GetWSDLTestResponseMessage"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="GetWSDLTestSoapBinding" type="GetWSDLTestPortType">
<soapbind:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="getWSDLTest" >
<soapbind:operation style="document" soapAction="http://service.wellsfargo.com/provider/pcs/account/2004/"/>
<wsdl:input>
<soapbind:body parts="getWSDLTestRequest" use="literal"/>
</wsdl:input>
<wsdl:output>
<soapbind:body parts="getWSDLTestResponse" use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="GetWSDLTestService">
<wsdl:port name="getWSDLTest" binding="GetWSDLTestSoapBinding">
<soapbind:address location="http://localhost:7001/services/getWSDLTest/"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
Check the file: MyType.java after wsdl2java
static {
typeDesc.setXmlType(new javax.xml.namespace.QName("http://test.axis.com/wsdl2java/", "MyType"));
org.apache.axis.description.ElementDesc elemField = new org.apache.axis.description.ElementDesc();
elemField.setFieldName("testString");
elemField.setXmlName(new javax.xml.namespace.QName("http://test.axis.com/wsdl2java/", "testString"));
elemField.setXmlType(new javax.xml.namespace.QName("http://test.axis.com/wsdl2java/", "testString"));
elemField.setNillable(false);
typeDesc.addFieldDesc(elemField);
}
> WSDL2JAVA does not create proper code for referenced elements
> -------------------------------------------------------------
>
> Key: AXIS-2170
> URL: http://issues.apache.org/jira/browse/AXIS-2170
> Project: Apache Axis
> Type: Bug
> Components: WSDL processing
> Versions: 1.2.1
> Environment: JRE 1.4.2_03, Win XP,
> Reporter: Richard Persche
>
> When a wsdl contains elements that are defined by ref=?xzy? the code produced by wsdl2java does not look correct:
> E.g.
> [?]
> <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);
> [..]
>
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira