2013-07-25 22 views
5

Ho un XSD che descrive alcune sequenze di tipi complessi ad es.Generazione di array per sequenze XSD tramite 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> 

Ora quando uso JaxBs XJC per convertire questo in classi Java che genererà me un java.util.List nella mia classe Catalog per il campo e getter/setter di Category.

Tuttavia, ciò di cui ho bisogno per utilizzarlo in un servizio web Axis2 utilizzando java2wsdl sono array come Category[].

Sono un po 'familiare con attacchi JAXB e già provato specificando il tipo di raccolta utilizzando:

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

che ha portato in codice non valido, perché è stato ancora utilizzando un java.util.List, ma con un costruttore new Category[]<Category>.

Ovviamente posso sempre modificare il codice generato dopo la generazione, ma questo potrebbe causare problemi quando provo a rigenerarlo.

Quello che ho ora è:

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

Quello che voglio è:

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

Tutte le idee? Attualmente sto usando XJC 2.2.6 con Axis2 1.6.2.

risposta

1

Penso che è necessario utilizzare il tag 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> 

genera la seguente classe:

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

    } 

(Utilizzando la org.apache.cxf CXF-xjc-plugin 2.6.2 Maven plug-in)

Avrai anche bisogno della definizione di Categoria nel tuo XSD ...