[ 
https://issues.apache.org/jira/browse/TUSCANY-2757?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Simon Nash resolved TUSCANY-2757.
---------------------------------

       Resolution: Fixed
    Fix Version/s:     (was: Java-SCA-Next)
                   Java-SCA-1.5.1
         Assignee: Simon Nash

Fixed in the 1.x branch under r813785 and in the 1.5.1 branch under r813790 
(the same fix as TUSCANY-3267).

> Top down round trip problem where wrapper elements are marked as nillable by 
> JAXB during WSDL generation
> --------------------------------------------------------------------------------------------------------
>
>                 Key: TUSCANY-2757
>                 URL: https://issues.apache.org/jira/browse/TUSCANY-2757
>             Project: Tuscany
>          Issue Type: Bug
>          Components: Java SCA Axis Binding Extension
>    Affects Versions: Java-SCA-1.4
>         Environment: All
>            Reporter: Simon Laws
>            Assignee: Simon Nash
>             Fix For: Java-SCA-1.5.1
>
>         Attachments: 2757-temp.patch
>
>
> With a top down scenario where a java interface is generated from WSDL, for 
> example, by using wsimport, and is then used in Tuscany the Tuscany code 
> regenerates the WSDL from the Java interface and in doing so creates XSD 
> based on the generated Java types. In this situation JAXB appears to assumed 
> that the wrapper element types are nillable. This breaks the JAXWS wrapped 
> algorithm that explicitly states that wrapped interface elements should not 
> be nillable. If I remove the generated wrapped element classes and have 
> Tuscany generated the WSDL based on the interface itself then it works. 
> Here is the WSDL. that we start with..
>     <wsdl:types>
>         <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"; 
>                     
> targetNamespace="http://www.example.org/CreditCardPayment/";
>                     xmlns:tns="http://www.example.org/CreditCardPayment/";>
>             
>             <xsd:element name="authorize" type="tns:AuthorizeType"/>
>             <xsd:complexType name="AuthorizeType">
>                 <xsd:sequence>
>                     <xsd:element name="CreditCard" 
> type="tns:CreditCardDetailsType"></xsd:element>
>                     <xsd:element name="Amount" type="xsd:float"></xsd:element>
>                 </xsd:sequence>
>             </xsd:complexType>
>             <xsd:element name="authorizeResponse" 
> type="tns:AuthorizeResponseType"/>
>             <xsd:complexType name="AuthorizeResponseType">
>                 <xsd:sequence>
>                     <xsd:element name="Status" 
> type="xsd:string"></xsd:element>
>                 </xsd:sequence>
>             </xsd:complexType>
>             <xsd:complexType name="CreditCardDetailsType">
>                 <xsd:sequence>
>                     <xsd:element name="CreditCardType" 
> type="tns:CreditCardTypeType" minOccurs="0" />
>                     <xsd:element name="CreditCardNumber" type="xsd:string" 
> minOccurs="0" />
>                     <xsd:element name="ExpMonth" type="xsd:int" minOccurs="0" 
> />
>                     <xsd:element name="ExpYear" type="xsd:int" minOccurs="0" 
> />
>                     <xsd:element name="CardOwner" type="tns:PayerType" 
> minOccurs="0" />
>                     <xsd:element name="CVV2" type="xsd:string" minOccurs="0" 
> />
>                 </xsd:sequence>
>             </xsd:complexType>
>             <xsd:simpleType name="CreditCardTypeType">
>                 <xsd:restriction base="xsd:token">
>                     <xsd:enumeration value="Visa" />
>                     <xsd:enumeration value="MasterCard" />
>                     <xsd:enumeration value="Discover" />
>                     <xsd:enumeration value="Amex" />
>                 </xsd:restriction>
>             </xsd:simpleType>
>             <xsd:complexType name="PayerType">
>                 <xsd:sequence>
>                     <xsd:element name="Name" type="xsd:string" />
>                     <xsd:element name="Address" type="tns:AddressType" />
>                 </xsd:sequence>
>             </xsd:complexType>
>             <xsd:complexType name="AddressType">
>                 <xsd:sequence>
>                     <xsd:element name="Street" type="xsd:string" />
>                     <xsd:element name="City" type="xsd:string" />
>                     <xsd:element name="State" type="xsd:string" />
>                     <xsd:element name="ZipCode" type="xsd:string" />
>                     <xsd:element name="HomePhone" type="xsd:string" />
>                 </xsd:sequence>
>             </xsd:complexType>
>         </xsd:schema>
>     </wsdl:types>
>     <wsdl:message name="AuthorizeRequest">
>         <wsdl:part name="parameters" element="tns:authorize"></wsdl:part>
>     </wsdl:message>
> wsimport generates a set of classes...
> payment/creditcard/
>    AddressType
>   AuthorizeType
>   AuthorizeResponseType
>   CreditCardDetailsType 
>   etc
> With the Composite...
> <composite xmlns="http://www.osoa.org/xmlns/sca/1.0"; 
> xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0";
>     xmlns:c="http://creditcard"; targetNamespace="http://creditcard"; 
> name="creditcard">
>     <component name="CreditCardPaymentWSClient">
>         <implementation.java 
> class="payment.creditcard.impl.CreditCardPaymentImpl" />
>         <reference name="creditCardPayment">
>             <binding.ws uri="http://localhost:8084/CreditCardPayment"; />
>         </reference>
>         <service name="CreditCardPayment">
>             <!--t:binding.jsonrpc uri="/jsonrpc/CreditCardPayment" /-->
>             <binding.sca />
>         </service>
>     </component>
>     <component name="CreditCardPaymentWS">
>         <implementation.java 
> class="payment.creditcard.ws.impl.CreditCardPaymentWSImpl" />
>         <service name="CreditCardPayment">
>             <binding.ws uri="http://localhost:8084/CreditCardPayment"; />
>         </service>
>     </component>
> </composite>
> Running Tuscany and using the following URL
> http://l3aw203:8084/CreditCardPayment?wsdl
> Gives rise to the following WSDL...
> <wsdl:types>
> −
> <xs:schema targetNamespace="http://www.example.org/CreditCardPayment/"; 
> version="1.0">
> <xs:element name="authorize" nillable="true" type="tns:AuthorizeType"/>
> <xs:element name="authorizeResponse" nillable="true" 
> type="tns:AuthorizeResponseType"/>
> −
> <xs:complexType name="CreditCardDetailsType">
> −
> <xs:sequence>
> <xs:element minOccurs="0" name="CreditCardType" 
> type="tns:CreditCardTypeType"/>
> <xs:element minOccurs="0" name="CreditCardNumber" type="xs:string"/>
> <xs:element minOccurs="0" name="ExpMonth" type="xs:int"/>
> <xs:element minOccurs="0" name="ExpYear" type="xs:int"/>
> <xs:element minOccurs="0" name="CardOwner" type="tns:PayerType"/>
> <xs:element minOccurs="0" name="CVV2" type="xs:string"/>
> </xs:sequence>
> </xs:complexType>
> −
> <xs:complexType name="PayerType">
> −
> <xs:sequence>
> <xs:element name="Name" type="xs:string"/>
> <xs:element name="Address" type="tns:AddressType"/>
> </xs:sequence>
> </xs:complexType>
> −
> <xs:complexType name="AddressType">
> −
> <xs:sequence>
> <xs:element name="Street" type="xs:string"/>
> <xs:element name="City" type="xs:string"/>
> <xs:element name="State" type="xs:string"/>
> <xs:element name="ZipCode" type="xs:string"/>
> <xs:element name="HomePhone" type="xs:string"/>
> </xs:sequence>
> </xs:complexType>
> −
> <xs:complexType name="AuthorizeType">
> −
> <xs:sequence>
> <xs:element name="CreditCard" type="tns:CreditCardDetailsType"/>
> <xs:element name="Amount" type="xs:float"/>
> </xs:sequence>
> </xs:complexType>
> −
> <xs:complexType name="AuthorizeResponseType">
> −
> <xs:sequence>
> <xs:element name="Status" type="xs:string"/>
> </xs:sequence>
> </xs:complexType>
> −
> <xs:simpleType name="CreditCardTypeType">
> −
> <xs:restriction base="xs:string">
> <xs:enumeration value="Visa"/>
> <xs:enumeration value="MasterCard"/>
> <xs:enumeration value="Discover"/>
> <xs:enumeration value="Amex"/>
> </xs:restriction>
> </xs:simpleType>
> </xs:schema>
> </wsdl:types>
> −
> <wsdl:message name="authorizeResponse">
> <wsdl:part name="authorizeResponse" element="authorizeResponse">
>     </wsdl:part>
> </wsdl:message>
> Where autorize and authorizeResponse elements are marked as nillable. This 
> breaks the tuscany code and causes and array out of bounds exception

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to