[jira] [Commented] (CXF-8305) WSDL2Java generates java code that won't compile for array of byte arrays

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

[jira] [Commented] (CXF-8305) WSDL2Java generates java code that won't compile for array of byte arrays

jagadeesh (Jira)

    [ https://issues.apache.org/jira/browse/CXF-8305?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17148177#comment-17148177 ]

Steve Armstrong commented on CXF-8305:
--------------------------------------

I'm going to guess that this will go nowhere.  Please at least verify that this is a valid Java code generation bug based on the example I provided on June 20, and perhaps put pressure on the XJC team to, at the very least, have a look at it.

I think I will simply write an XJC plug-in (or perhaps just pass the code through something like sed) to correct the buggy generated code before it is compiled.

Cheers.

> WSDL2Java generates java code that won't compile for array of byte arrays
> -------------------------------------------------------------------------
>
>                 Key: CXF-8305
>                 URL: https://issues.apache.org/jira/browse/CXF-8305
>             Project: CXF
>          Issue Type: Bug
>          Components: Tooling
>    Affects Versions: 3.3.6
>            Reporter: Steve Armstrong
>            Priority: Critical
>         Attachments: test.zip
>
>
> I am using a wsdl snippet that looks like the following:
> {code:xml}
>            <xsd:complexType name="CACertificateLDAPGetResult">
>                 <xsd:annotation>
>                     <xsd:documentation>
>                         Defines the results of a caCertificateLDAPGet operation
>                     </xsd:documentation>
>                 </xsd:annotation>
>                 <xsd:sequence>
>                     <xsd:element name="Binary" type="xsd:boolean" nillable="true">
>                         <xsd:annotation>
>                             <xsd:documentation>
>                                 Indicates whether the returns attribute is string data or binary data.
>                                 True if the attribute is binary.
>                             </xsd:documentation>
>                         </xsd:annotation>
>                     </xsd:element>
>                     <xsd:element name="StringAttribute" maxOccurs="unbounded" minOccurs="0" type="xsd:string" nillable="true" >
>                         <xsd:annotation>
>                             <xsd:documentation>
>                                 A list of the strings found at a string attribute.
>                             </xsd:documentation>
>                         </xsd:annotation>
>                     </xsd:element>
>                     <xsd:element name="BinaryAttribute" maxOccurs="unbounded" minOccurs="0" type="xsd:base64Binary"
>                                  nillable="true" >
>                         <xsd:annotation>
>                             <xsd:documentation>
>                                 A list of the base64 encoded data found at a binary attribute.
>                             </xsd:documentation>
>                         </xsd:annotation>
>                     </xsd:element>                    
>                 </xsd:sequence>
>             </xsd:complexType>
> {code}
> In is the BinaryAttribute above that is of interest.
> When this gets compiled using WSDL2Java and Java 8 with collectionType="indexed", the following code snipped is produced.
>  
> {code:java}
>     /**
>      *
>      *
>      * @param values
>      *     allowed objects are
>      *     byte[]
>      */
>     public void setBinaryAttribute(byte[][] values) {
>         int len = values.length;
>         this.binaryAttribute = ((byte[][]) new byte[][len] );
>         for (int i = 0; (i<len); i ++) {
>             this.binaryAttribute[i] = ((byte[]) values[i]);
>         }
>     }
> {code}
> Clearly, this is invalid Java since you need to set len on the first dimension of the array, not the second.
> Java can't compile the code generated by WSDL2Java so that's the end of things.
> If you know of any work-around (other than *not* using collectionType="indexed", please let me know. Thanks!



--
This message was sent by Atlassian Jira
(v8.3.4#803005)