Steve Armstrong created CXF-8305:
------------------------------------

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


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