2013-07-25 31 views
5

Mam XSD opisujące niektóre sekwencje typów złożonych, np.Generowanie tablic dla sekwencji XSD za pośrednictwem 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> 

Teraz gdy używam JaxBs XJC przekonwertować to do klas Javy wygeneruje mi java.util.List w moim Catalog klasy dla pola i getter/setter Category.

Jednak do korzystania z usługi internetowej Axis2 przy użyciu java2wsdl potrzebuję tablic takich jak Category[].

Jestem nieco zaznajomieni z powiązaniami JAXB i już próbował określający typ kolekcji za pomocą:

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

co skutkowało nieprawidłowym kodzie, ponieważ wciąż używając java.util.List, ale z konstruktora new Category[]<Category>.

Oczywiście zawsze mogę edytować wygenerowany kod po wygenerowaniu, ale spowodowałoby to problemy przy próbie ponownego wygenerowania.

Co mam teraz jest:

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

Co chcę jest:

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

Jakieś pomysły? Aktualnie używam XJC 2.2.6 z Axis2 1.6.2.

Odpowiedz

1

myślę, trzeba użyć tagu 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> 

generuje następujące klasy:

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

    } 

(Korzystanie z org.apache.cxf CXF-XJC-plugin 2.6.2 Maven wtyczka)

Będziesz także potrzebować definicji kategorii w swoim XSD ...