cxf wsdl2java 生成 ArrayOf<Type> 而不是 Type[]
cxf wsdl2java generating ArrayOf<Type> instead of Type[]
我正在使用 cxf wsdl2java 命令行命令来生成客户端(java 文件)。我的 xsd 看起来像这样 -
<xs:complexType name="ArrayOfString">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="string" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:element name="ConfirmSMSResults">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="1" minOccurs="1" name="sessionId" type="xs:string"/>
<xs:element maxOccurs="1" minOccurs="1" name="smsIds" type="tns:ArrayOfString"/>
</xs:sequence>
</xs:complexType>
生成的java文件ConfirmSMSResults.java
有这样的东西
@XmlElement(required = true)
protected ArrayOfString smsIds;
它应该在哪里protected String[] smsIds;
我在 xsd
文件中定义的 date
数据类型遇到了类似的问题,该数据类型已转换为 XMLGregorianCalendar
。但是,我通过使用外部 xjb
文件并在其中定义绑定来解决它。可以找到 here。我似乎找不到与 Array 问题类似的东西。
提前致谢。
你是说
it should be protected String[] smsIds
而实际上您的 XSD 并没有这么说。
你的XSD是说smsIDs
是ArrayOfString
类型的complexType
,定义在顶部,CXF会创建一个对应的对象ArrayOfString
.它里面有一个名为 string
的元素,它可以出现多次,所以你可能会在它为你的 XSD.
生成的 ArrayOfString
对象中找到你的数组/列表
如果你想删除那个包装器对象,在你的 XSD 你必须改变这个:
<xs:element maxOccurs="1" minOccurs="1" name="smsIds" type="tns:ArrayOfString"/>
到
<xs:element maxOccurs="unbounded" minOccurs="0" name="smsIds" type="xsd:string"/>
好吧,看来我错过了什么。 type
属性 指的是 ArrayofString
对象,而应该是 xs:string
。似乎不需要 ArrayOfStrings
对象。此外,maxOccurs
应等于 unbounded
。最终结果 -
<xs:element name="ConfirmSMSResults">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="1" minOccurs="1" name="sessionId" type="xs:string"/>
<xs:element maxOccurs="unbounded" minOccurs="1" name="smsIds" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
我还添加了 collectionType="indexed"
到我的 xjb 文件。所以现在看起来像这样 <jaxb:globalBindings collectionType ="indexed">
我正在使用 cxf wsdl2java 命令行命令来生成客户端(java 文件)。我的 xsd 看起来像这样 -
<xs:complexType name="ArrayOfString">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="string" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:element name="ConfirmSMSResults">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="1" minOccurs="1" name="sessionId" type="xs:string"/>
<xs:element maxOccurs="1" minOccurs="1" name="smsIds" type="tns:ArrayOfString"/>
</xs:sequence>
</xs:complexType>
生成的java文件ConfirmSMSResults.java
有这样的东西
@XmlElement(required = true)
protected ArrayOfString smsIds;
它应该在哪里protected String[] smsIds;
我在 xsd
文件中定义的 date
数据类型遇到了类似的问题,该数据类型已转换为 XMLGregorianCalendar
。但是,我通过使用外部 xjb
文件并在其中定义绑定来解决它。可以找到 here。我似乎找不到与 Array 问题类似的东西。
提前致谢。
你是说
it should be
protected String[] smsIds
而实际上您的 XSD 并没有这么说。
你的XSD是说smsIDs
是ArrayOfString
类型的complexType
,定义在顶部,CXF会创建一个对应的对象ArrayOfString
.它里面有一个名为 string
的元素,它可以出现多次,所以你可能会在它为你的 XSD.
ArrayOfString
对象中找到你的数组/列表
如果你想删除那个包装器对象,在你的 XSD 你必须改变这个:
<xs:element maxOccurs="1" minOccurs="1" name="smsIds" type="tns:ArrayOfString"/>
到
<xs:element maxOccurs="unbounded" minOccurs="0" name="smsIds" type="xsd:string"/>
好吧,看来我错过了什么。 type
属性 指的是 ArrayofString
对象,而应该是 xs:string
。似乎不需要 ArrayOfStrings
对象。此外,maxOccurs
应等于 unbounded
。最终结果 -
<xs:element name="ConfirmSMSResults">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="1" minOccurs="1" name="sessionId" type="xs:string"/>
<xs:element maxOccurs="unbounded" minOccurs="1" name="smsIds" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
我还添加了 collectionType="indexed"
到我的 xjb 文件。所以现在看起来像这样 <jaxb:globalBindings collectionType ="indexed">