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

时间:2013-07-25 04:57:29

标签: java jaxb xsd axis2 xjc

我有一个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 ,并为{{{get} / setter 1}}。

但是,在使用java2wsdl的Axis2 webservice中使用它需要的是像 Category 这样的数组。

我对JaxB绑定有点熟悉,并且已经尝试使用:

指定集合类型
Category[]

导致代码无效,因为它仍在使用<jaxb:property collectionType="Category[]"/> ,但使用构造函数java.util.List

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

我现在得到的是:

new Category[]<Category>

我想要的是:

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

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

1 个答案:

答案 0 :(得分:1)

我认为你需要使用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中定义类别......