【问题标题】:cxf wsdl2java generating ArrayOf<Type> instead of Type[]cxf wsdl2java 生成 ArrayOf<Type> 而不是 Type[]
【发布时间】:2016-01-20 01:08:09
【问题描述】:

我正在使用 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 的问题,我似乎找不到类似的东西。

提前谢谢你。

【问题讨论】:

  • 问题不就是这个type="tns:ArrayOfString"吗? ArrayOfString 实际上是它从您的 complexType 为您创建的对象。
  • @jbx 哦,我怎么没看到。我解决了这个问题。以防万一,我将在下面发布解决方案。

标签: java xml xsd cxf xjb


【解决方案1】:

你说的是

应该是protected String[] smsIds

实际上你的 XSD 并没有这么说。

你的 XSD 说smsIDs 是一个complexType 类型的ArrayOfString,它在顶部定义,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"/>

【讨论】:

  • 谢谢,我意识到出了什么问题。我已经发布了解决方案,直到现在才看到你的解决方案。
【解决方案2】:

好吧,看来我错过了什么。 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>

我还在我的 xjb 文件中添加了collectionType="indexed"。所以它现在看起来像这样&lt;jaxb:globalBindings collectionType ="indexed"&gt;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-05
    • 1970-01-01
    • 2013-10-26
    • 2015-12-18
    • 2014-06-28
    • 2012-10-05
    • 2022-11-11
    • 2011-10-03
    相关资源
    最近更新 更多