2009-09-16 5 views
0

J'ai une super classe abstraite:JAXB - problème étrange

@XmlSeeAlso({AndQuery.class, OrQuery.class, NotQuery.class, PropertyQuery.class, MultiQuery.class}) 
@XmlRootElement 
public abstract class Query { 

Cette classe a une sous-classe:

public abstract class MultiQuery extends Query { 

et cette dernière super classe a aussi deux sous-classes: AndQuery et OrQuery annotées avec @ XmlRootNode.

J'ai aussi une classe PropertyQuery qui étend la super classe Query.

Tout ce qu'il est correct quand je fais un poste comme celui-ci:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
         <orQuery> 
          <query xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="propertyQuery"> 
           <propertyName>SenderContractNumber</propertyName> 
           <propertyValue>D*</propertyValue> 
          </query> 
          <query xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="propertyQuery"> 
           <propertyName>SenderContractNumber</propertyName> 
           <propertyValue>A*</propertyValue> 
          </query> 
    <query xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="andQuery"> 
          <query xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="propertyQuery"> 
           <propertyName>documentNumber</propertyName> 
           <propertyValue>222</propertyValue> 
          </query> 
          <query xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="propertyQuery"> 
           <propertyName>documentNumber</propertyName> 
           <propertyValue>222</propertyValue> 
          </query> 

</query> 
</orQuery> 

Ce que je veux est un POST xml comme ceci:

<orQuyery> 
    <query>...</query> 
    <andQuery> 
     <query>...</query> 
    </andQuery> 
</orQuery> 

insteand de ce que je mets ci-dessus. Pouvez-vous me dire s'il vous plaît ce que je dois annoter parce que ma classe OrQuery s'attend à ne voir que des nœuds de requête et non!

S'il vous plaît aider ...

Merci beaucoup

+0

nous avons besoin du code source pour OrQuery – skaffman

Répondre

1

On dirait que vous essayez d'avoir un grand nombre de vos requêtes contiennent d'autres requêtes. Disons simplement que vous voulez que MultiQuery contienne une liste d'autres requêtes.

Si vous n'avez qu'une liste de type Requête, JAXB ne pourra pas déterminer les types de requêtes que vous souhaitez placer dans la liste. Vous pouvez spécifier toutes les options pour ce que la liste peut contenir. De cette façon, le schéma qui est généré pour permettre l'un des types de spécifié.

Exemple:

@XmlElements({ 
    @XmlElement(type=AndQuery.class), 
    @XmlElement(type=OrQuery.class), 
    @XmlElement(type=NotQuery.class), 
    @XmlElement(type=PropertyQuery.class), 
    @XmlElement(type=MultiQuery.class) 
}) 
List<Query> queries;