wsdl-tsclient icon indicating copy to clipboard operation
wsdl-tsclient copied to clipboard

Sequences are not generating array types

Open rostamiani opened this issue 3 years ago • 1 comments

I don't know WSDL but there is an ArrayOfstring fields that generates string instead of string[]. Isn't it wrong?

<xs:element minOccurs="0" name="Emails" nillable="true" type="q1:ArrayOfstring"/>
...
<xs:schema elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
  <xs:complexType name="ArrayOfstring">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="string" nillable="true" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
  <xs:element name="ArrayOfstring" nillable="true" type="tns:ArrayOfstring"/>
</xs:schema>

And this is the generated field:

    /** q1:ArrayOfstring */
    Emails?: string;

Version: 1.3.1

rostamiani avatar Feb 06 '22 10:02 rostamiani

Hi @rostamiani , can you try it on 1.4.0 ? Or could you please share wsdl with me?

I tried it with this kind of WSDL

  <s:complexType name="ProductSearchParameters">
      <s:sequence>
          <s:element minOccurs="0" maxOccurs="1" default="-2147483648" name="Id" type="s:int" />
          <s:element minOccurs="0" maxOccurs="1" default="-2147483648" name="CategoryId" type="s:int" />
          <s:element minOccurs="0" maxOccurs="1" default="" name="No" type="s:string" />
          <s:element minOccurs="0" maxOccurs="1" default="" name="EAN1" type="s:string" />
          <s:element minOccurs="0" maxOccurs="1" default="" name="Name" type="s:string" />
          <s:element minOccurs="0" maxOccurs="1" default="-79228162514264337593543950335" name="Price" type="s:decimal" />
          <s:element minOccurs="0" maxOccurs="1" default="0001-01-01T00:00:00" name="DateChanged" type="s:dateTime" />
          <s:element minOccurs="0" maxOccurs="1" name="ProductIds" type="tns:ArrayOfInt" />
      </s:sequence>
  </s:complexType>
  <s:complexType name="ArrayOfInt">
      <s:sequence>
          <s:element minOccurs="0" maxOccurs="unbounded" name="int" type="s:int" />
      </s:sequence>
  </s:complexType>
  <s:complexType name="ArrayOfString">
      <s:sequence>
          <s:element minOccurs="0" maxOccurs="unbounded" name="string" nillable="true" type="s:string" />
      </s:sequence>
  </s:complexType>

and I'm getting

/** GetProducts */
export interface GetProducts {
    /** searchParams */
    searchParams?: SearchParams;
    /** returnProperties */
    returnProperties?: ReturnProperties;
}

export interface ReturnProperties {
    /** s:string */
    string?: Array<string>;
}

Compared to wsimport I'm getting correct output

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "searchParams",
    "returnProperties"
})
@XmlRootElement(name = "GetProducts")
public class GetProducts {

    protected ProductSearchParameters searchParams;
    protected ArrayOfString returnProperties;
}

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "ArrayOfString", propOrder = {
    "string"
})
public class ArrayOfString {

    @XmlElement(nillable = true)
    protected List<String> string;
}

dderevjanik avatar Apr 28 '22 10:04 dderevjanik