gpt4 book ai didi

java - 通过 JaxB JXC 为 XSD 序列生成数组

转载 作者:搜寻专家 更新时间:2023-11-01 00:50:53 24 4
gpt4 key购买 nike

我有一个 XSD 描述了一些复杂类型的序列,例如

<xs:complexType name="Catalog">
<xs:sequence>
<xs:element name="Category" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="ParentCategoryIDRef"/>
<xs:element type="xs:string" name="Method"/>
</xs:sequence>
<xs:complexType>
</xs:element>
</xs:sequence>
<xs:complexType>

现在,当我使用 JaxBs XJC 将其转换为 Java 类时,它会生成一个 java.util.List 在我的 Catalog Category 的字段和 getter/setter 类.

但是,我需要在使用 java2wsdl 的 Axis2 web 服务中使用它,像 Category[] 这样的数组.

我对 JaxB 绑定(bind)有点熟悉,并且已经尝试使用以下方法指定集合类型:

<jaxb:property collectionType="Category[]"/>

导致无效代码,因为它仍在使用 java.util.List , 但有一个构造函数 new Category[]<Category> .

当然,我总是可以在生成后编辑生成的代码,但是当我尝试重新生成它时,这会导致问题。

我现在得到的是:

public class Catalog {
@XmlElement(name = "Category")
protected List<Category> category;
}

我想要的是:

public class Catalog {
@XmlElement(name = "Category")
protected Category[] category;
}

有什么想法吗?我目前正在使用 XJC 2.2.6 和 Axis2 1.6.2。

最佳答案

我认为你需要使用 javaType 标签:

<xs:complexType name="catalog">
<xs:sequence>
<xs:element name="category" type="ns:Category" >
<xs:annotation>
<xs:appinfo>
<jxb:javaType name="Category[]"/>
</xs:appinfo>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>

生成以下类:

public class Catalog {

@XmlElement(required = true, type = Category.class)
protected Category[] category;

public Category[] getCategory() {
return category;
}

public void setCategory(Category[] value) {
this.category = value;
}

}

(使用org.apache.cxf cxf-xjc-plugin 2.6.2 maven插件)

您还需要在 XSD 中定义类别...

关于java - 通过 JaxB JXC 为 XSD 序列生成数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17849323/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com