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 "Derek Foster (JIRA)" <ji...@apache.org> on 2006/07/14 01:37:31 UTC

[jira] Commented: (AXIS2-844) WSDL2Java uses XmlObject for skeleton parameter when data in XML schema in same namespace as WSDL document

    [ http://issues.apache.org/jira/browse/AXIS2-844?page=comments#action_12420967 ] 

Derek Foster commented on AXIS2-844:
------------------------------------

See also AXIS2-765 and AXIS2-845.

> WSDL2Java uses XmlObject for skeleton parameter when data in XML schema in same namespace as WSDL document
> ----------------------------------------------------------------------------------------------------------
>
>          Key: AXIS2-844
>          URL: http://issues.apache.org/jira/browse/AXIS2-844
>      Project: Apache Axis 2.0 (Axis2)
>         Type: Bug

>   Components: wsdl, databinding, Tools
>     Versions: 1.0
>  Environment: JDK 5.0
>     Reporter: Derek Foster
>     Assignee: Ajith Harshana Ranabahu
>     Priority: Critical

>
> I have discovered that the Axis WSDL2Java code generator produces incorrect results under the following circumstances:
> 1) The WSDL document declares a target namespace.
> 2) The 'types' section of the document imports a schema with the same namespace.
> 3) A 'message' is declared to use an element of a type declared within the schema.
> 4) An operation is declared to use the message as an input or output parameter.
> When the above scenario occurs, the WSDL2Java code generator acts as if the elements declared in the schema do not exist and apparently goes to its fallback method of treating the data as if it were declared 'xs:any'. Note that schemas that do not share the same namespace with the WSDL document seem to work fine.
> Using the WSDL and schema below, and the given WSDL2Java command line, I get XMLBeans classes generated. However, the generated skeleton methods take parameters of type OMElement and return a result of type OMElement (with the Axis 1.0 release. With the current nightly build they use type XmlObject instead), instead of using generated XMLBeans wrapper classes that are specific to the WSDL file being parsed.
> According to various documentation I have read, there should be no problem with this. The same namespace should be perfectly legal to use both for the WSDL document itself and for XML elements and types declared within it. (Note, however, that the WSDL document messages, bindings, and so forth should occupy a different symbol space from the XML elements and types in the same namespace, so that one could have, for instance, both a message named "foo" as well as an xs:element named "foo" without conflict.)
> This is a big problem for me, since sharing the same namespace for both of these elements is done both by several WSDL files within my own company, as well as those that have been given to my company to use from external sources. I MIGHT be able to change the WSDL produced by my company, but can't do much about the ones that we have been given from outside. This essentially makes WSDL2Java unusable for me until this issue is fixed.
> A bit more information can be found in the developer list under the thread "[Axis2] Why do I get service skeletons taking OMElement, and uncompilable code?".
> Here is an example of WSDL that reproduces the problem:
> The WSDL:
> <?xml version="1.0" encoding="UTF-8"?>
> <definitions name="FDefinitions"
>    targetNamespace="http://www.example.com/wsdl/2004-10-01/feu"
>    xmlns:carshdr="http://www.example.com/wsdl/2004-10-01/cars"
>    xmlns:carsfault="http://www.example.com/wsdl/2006-06-13/carsfault"
>    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
>    xmlns:tns="http://www.example.com/wsdl/2004-10-01/feu"
>    xmlns:feu="http://www.dummy-temp-address"
>    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
>    xmlns:xs="http://www.w3.org/2001/XMLSchema"
>    xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
>    xmlns="http://schemas.xmlsoap.org/wsdl/">
>    <wsdl:types>
>       <xs:schema>
>          <xs:import namespace="http://www.dummy-temp-address"
> schemaLocation="FEU.xsd"/>
>       </xs:schema>
>       <xs:schema targetNamespace="http://www.example.com/wsdl/2004-10-01/feu">
>          <xs:element name="full-event-updates">
>             <xs:complexType>
>                <xs:sequence>
>                   <xs:element name="full-event-update" type="feu:FullEventUpdate" minOccurs="0" maxOccurs="unbounded"/>
>                </xs:sequence>
>             </xs:complexType>
>          </xs:element>
>          <xs:element name="full-event-update" type="feu:FullEventUpdate"/>
>          <xs:element name="return" type="xs:string"/>
>       </xs:schema>
>       <xs:schema targetNamespace="http://www.example.com/wsdl/2004-10-01/cars">
>          <xs:element name="CPassword" type="xs:string"/>
>          <xs:element name="CLogin" type="xs:string"/>
>       </xs:schema>
>       <xs:schema targetNamespace="http://www.example.com/wsdl/2006-06-13/carsfault">
>          <xs:element name="generalFault" type="xs:string"/>
>       </xs:schema>
>    </wsdl:types>
>    <message name="FEvent">
>       <part name="contents" element="tns:full-event-update"/>
>    </message>
>    <message name="FRecap">
>       <part name="contents" element="tns:full-event-updates"/>
>    </message>
>    <message name="FResponse">
>       <part name="return" element="tns:return"/>
>    </message>
>    <message name="CPassword">
>       <part name="CPassword" element="carshdr:CPassword"/>
>    </message>
>    <message name="CLogin">
>       <part name="CLogin" element="carshdr:CLogin"/>
>    </message>
>    <message name="GeneralFault">
>       <part name="faultDetail" element="carsfault:generalFault"/>
>    </message>
>    <portType name="FPortType">
>       <documentation>F Port Type</documentation>
>       <operation name="acceptFEvent" parameterOrder="contents">
>          <input name="acceptFEventRequest" message="tns:FEvent"/>
>          <output name="acceptFEventResponse" message="tns:FResponse"/>
>          <fault name="GeneralFault" message="tns:GeneralFault"/>
>       </operation>
>       <operation name="acceptFRecap" parameterOrder="contents">
>          <input name="acceptFRecapRequest" message="tns:FRecap"/>
>          <output name="acceptFRecapResponse" message="tns:FResponse"/>
>          <fault name="GeneralFault" message="tns:GeneralFault"/>
>       </operation>
>    </portType>
>    <binding name="FSoapBinding" type="tns:FPortType">
>       <documentation>F Soap Binding</documentation>
>       <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
>       <operation name="acceptFEvent">
>          <soap:operation soapAction="acceptFEventAction"/>
>          <input>
>             <soap:header message="tns:CLogin" part="CLogin" use="literal"/>
>             <soap:header message="tns:CPassword" part="CPassword" use="literal"/>
>             <soap:body use="literal"/>
>          </input>
>          <output>
>             <soap:body use="literal"/>
>          </output>
>          <fault name="GeneralFault">
>             <soap:fault name="GeneralFault" use="literal"/>
>          </fault>
>       </operation>
>       <operation name="acceptFRecap">
>          <soap:operation soapAction="acceptFRecapAction"/>
>          <input>
>             <soap:header message="tns:CLogin" part="CLogin" use="literal"/>
>             <soap:header message="tns:CPassword" part="CPassword" use="literal"/>
>             <soap:body use="literal"/>
>          </input>
>          <output>
>             <soap:body use="literal"/>
>          </output>
>          <fault name="GeneralFault">
>             <soap:fault name="GeneralFault" use="literal"/>
>          </fault>
>       </operation>
>    </binding>
>    <service name="FService">
>       <documentation>F Web Service</documentation>
>       <port name="FPort" binding="tns:FSoapBinding">
>          <soap:address location="http://localhost:8080/axis/services/FService"/>
>       </port>
>    </service>
> </definitions>
>  
> The schema:
> <?xml version="1.0" encoding="UTF-8"?>
> <xs:schema targetNamespace="http://www.dummy-temp-address"
>            xmlns="http://www.dummy-temp-address"
>            xmlns:xs="http://www.w3.org/2001/XMLSchema"
>  
> xmlns:cars="http://www.crc-corp.com/schemas/cars/schema_annotation"
>            elementFormDefault="unqualified"
>            attributeFormDefault="unqualified"
>            version="DRAFT">
>    <xs:element name="full-event-update" type="FullEventUpdate"/>
>    <xs:complexType name="FullEventUpdate">
>       <xs:sequence>
>          <xs:element name="message-header" type="MessageHeader"/>
>          <xs:element name="event-reference" type="EventReference"/>
>          <xs:any/>
>       </xs:sequence>
>    </xs:complexType>
>    <xs:complexType name="MessageHeader">
>       <xs:sequence>
>          <xs:any/>
>       </xs:sequence>
>    </xs:complexType>
>    <xs:complexType name="EventReference">
>       <xs:sequence>
>          <xs:element name="event-id" type="xs:string"/>
>          <xs:element name="update" type="xs:unsignedInt"/>
>          <xs:element name="response-plan-id" type="xs:string" minOccurs="0"/>
>       </xs:sequence>
>    </xs:complexType>
> </xs:schema>
> The WSDL command line:
>    WSDL2Java --databinding-method xmlbeans 
>              --uri FEUImport.wsdl 
>              --server-side 
>              --generate-all 
>              --service-description 
>              --output generatedSrc 
>              --package crc.feuimport.wsdl2java 
> The skeleton interface that is getting generated:
>     /**
>      * FEUServiceSkeletonInterface.java
>      *
>        * This file was auto-generated from WSDL
>      * by the Apache Axis2 version: 1.0 May 05, 2006 (12:31:13 IST)
>      */
>     package crc.feuimport.wsdl2java;
>     /**
>      *  FServiceSkeletonInterface java skeleton interface for the axisService
>      */
>     public interface FServiceSkeletonInterface {
>      
>    
>         /**
>          * Auto generated method signature
>          
>           * @param param0
>          
>          */
>         public  org.apache.axiom.om.OMElement acceptFEURecap
>                   (org.apache.axiom.om.OMElement param0 )
>          
>            throws crc.feuimport.wsdl2java.FServiceSkeleton.GeneralFaultException;
>      
>    
>         /**
>          * Auto generated method signature
>          
>           * @param param4
>          
>          */
>         public  org.apache.axiom.om.OMElement acceptFEUEvent
>                   (org.apache.axiom.om.OMElement param4 )
>          
>            throws crc.feuimport.wsdl2java.FServiceSkeleton.GeneralFaultException;
>      
>     }
>  

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


---------------------------------------------------------------------
To unsubscribe, e-mail: axis-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-dev-help@ws.apache.org