2014-10-07 4 views
0

Я хочу сделать сопоставления в соответствии с JAXB и XStream.Как использовать XStream для списка <Object>?

Вот фрагмент кода:

@XmlElements({ 
     @XmlElement(name = "Success", type = SuccessType.class), 
     @XmlElement(name = "Warnings", type = WarningsType.class), 
     @XmlElement(name = "BagTypes", type = HashMap.class) 
}) 
protected List<Object> successAndWarningsAndBagTypes; 

Как сделать аналогичные отображения аннотаций для List<Object> с XStream?

Или проще и лучше будет делить этот List<Object> на отдельные экземпляры классов?

обновление:

Я должен отобразить этот фрагмент кода в соответствии этого XML-файла:

<EI_BaggageTypesRS Version="1.0" xmlns="http://www.opentravel.org/OTA/2003/05"> 
    <Success/> 
    <BagTypes> 
     <ResponseBagType> 
      <code>AA</code> 
      <description>Golf Bag</description> 
     </ResponseBagType> 
     <ResponseBagType> 
      <code>BA</code> 
      <description>Skis</description> 
     </ResponseBagType> 
     <ResponseBagType> 
      <code>DA</code> 
      <description>Snow Board</description> 
     </ResponseBagType> 
     <ResponseBagType> 
      <code>CA</code> 
      <description>Fishing Gear</description> 
     </ResponseBagType> 
     <ResponseBagType> 
      <code>EA</code> 
      <description>Surf Board</description> 
     </ResponseBagType> 
    </BagTypes> 
</EI_BaggageTypesRS> 

Любые предложения?

+0

необходимо больше фрагментов кода. –

+0

@yogeshprajapati Я обновил вопрос с xml-файлом. –

+0

Вы генерируете свои классы из некоторой схемы XML с помощью XJC? Или написать их вручную? – lexicore

ответ

0

Предполагая, что код генерируется из схемы XML, я буду отвечать на этот вопрос:

Или проще и лучше будет разделить этот список, чтобы отделить экземпляры класса?

См. this answer. Один из способов разделить ваш successAndWarningsAndBagTypes будет использовать мой Simplify plugin. Вы можете использовать simplify:as-element-property, чтобы разделить одно имущество @XmlElements на несколько @XmlElement (без s в конце). Например, из этого:

<xs:complexType name="typeWithElementsProperty"> 
    <xs:choice maxOccurs="unbounded"> 
     <xs:annotation> 
      <xs:appinfo> 
       <simplify:as-element-property/> 
      </xs:appinfo> 
     </xs:annotation> 
     <xs:element name="a" type="xs:string"/> 
     <xs:element name="b" type="xs:int"/> 
    </xs:choice> 
</xs:complexType> 

Вы получите это:

@XmlElement(name = "a", type = String.class) 
protected List<String> a; 
@XmlElement(name = "b", type = Integer.class) 
protected List<Integer> b; 

Однако я не уверен, как использовать JAXB плагинов с wsimport. Должно быть возможно, просто никогда не пробовал это.