2013-07-25 24 views
5

Tôi đã có XSD mô tả một số chuỗi các loại phức tạp, ví dụ:Tạo mảng cho chuỗi XSD qua JaxB JXC

<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> 

Bây giờ khi tôi sử dụng JaxBs XJC để chuyển đổi này vào các lớp Java nó sẽ tạo ra cho tôi một java.util.List trong lớp Catalog của tôi cho trường và getter/setter của Category.

Tuy nhiên, những gì tôi cần để sử dụng nó trong dịch vụ web Axis2 sử dụng java2wsdl là các mảng như Category[].

tôi là một chút quen thuộc với các ràng buộc JAXB và đã cố gắng xác định loại bộ sưu tập sử dụng:

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

mà dẫn đến mã không hợp lệ, vì nó vẫn còn sử dụng một java.util.List, nhưng với một constructor new Category[]<Category>.

Tất nhiên tôi luôn có thể chỉnh sửa mã được tạo sau khi tạo, nhưng điều này sẽ gây ra sự cố khi tôi cố gắng tạo lại.

Những gì tôi đã có bây giờ là:

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

Những gì tôi muốn là:

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

Bất kỳ ý tưởng? Tôi hiện đang sử dụng XJC 2.2.6 với Axis2 1.6.2.

Trả lời

1

Tôi nghĩ rằng bạn cần phải sử dụng thẻ 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> 

Tạo lớp sau:

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; 
     } 

    } 

(Sử dụng CXF-XJC-plugin org.apache.cxf 2.6.2 maven plugin)

Bạn cũng sẽ cần định nghĩa Danh mục trong XSD của mình ...

Các vấn đề liên quan