2009-09-16 3 views
0

У меня есть супер абстрактный класс:JAXB - странная проблема

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

Этот класс имеет подкласс:

public abstract class MultiQuery extends Query { 

и последний супер класс имеет также два подкласса: AndQuery и OrQuery с аннотацией @ XmlRootNode.

У меня также есть класс PropertyQuery, который расширяет класс Query super.

Все это нормально, когда я делаю пост так:

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

Что я хочу, чтобы POST XML-как это:

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

insteand, что я ставлю выше.

Не могли бы вы рассказать мне, что мне нужно комментировать, потому что мой класс OrQuery ожидает увидеть только узлы запроса и нет!

Пожалуйста, помогите ...

Большое спасибо

+0

нам нужен исходный код для OrQuery – skaffman

ответ

1

Это звучит, как вы пытаетесь иметь много ваших запросов содержат другие запросы. Скажем так, вы хотите, чтобы любой MultiQuery содержал список других запросов.

Если у вас есть только запрос типа запроса, JAXB не сможет определить, какие типы запросов вы хотите поместить в список. Вы можете указать все параметры, которые могут содержать список. Таким образом, схема, сгенерированная для разрешения любого из указанных типов.

Пример:

@XmlElements({ 
    @XmlElement(type=AndQuery.class), 
    @XmlElement(type=OrQuery.class), 
    @XmlElement(type=NotQuery.class), 
    @XmlElement(type=PropertyQuery.class), 
    @XmlElement(type=MultiQuery.class) 
}) 
List<Query> queries; 
Смежные вопросы