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

Reply via email to