2017-03-15 48 views
1

如何在同一元素上使用多個@XStreamAlias註釋。當我這樣做:對同一元素使用多個@XStreamAlias註釋

@XStreamAlias("alias1") 
@XStreamAlias("alias2") 
class ABC{ 
// 
} 

我得到編譯錯誤。有什麼辦法可以做到這一點?

+0

我認爲是不可能的註釋,但你可以通過XStream初始化來實現別名註冊:'xStream.alias(「alias1」,ABC.class);' – Mark

+0

但是如果我必須多次解析xml,那麼我必須對每個實例多次使用它的XStream。任何其他方式? –

+0

「解析xml多次」是什麼意思? – Mark

回答

-1

這裏例如用編程的方式:

import java.io.InputStream; 
import java.util.List; 

import org.junit.Test; 

import com.thoughtworks.xstream.XStream; 
import com.thoughtworks.xstream.annotations.XStreamAlias; 
import com.thoughtworks.xstream.annotations.XStreamAsAttribute; 

import lombok.Data; 


public class MultiAlias { 

    @Test 
    public void smokeTest() { 
     InputStream file = MultiAlias.class.getResourceAsStream("MultiAliasTest.xml"); 
     XStream xStream = new XStream(); 
     xStream.ignoreUnknownElements(); 
     xStream.processAnnotations(Parent.class); 
     xStream.alias("child", Child.class); 
     xStream.alias("kind", Child.class); 

     Parent parent = (Parent) xStream.fromXML(file); 

     System.out.println(parent); 
    } 

    @XStreamAlias("parent") 
    @Data 
    public class Parent { 

     @XStreamAsAttribute 
     private String name; 

     private List<Child> children; 

    } 

    @Data 
    public class Child { 
     private String name; 
    } 

} 

XML:

<?xml version="1.0" encoding="UTF-8"?> 
<parent name="Adam"> 
     <age>33</age> 
     <children> 
      <child> 
       <name>Iva</name> 
      </child> 
      <kind> 
       <name>Peter</name> 
      </kind> 
     </children> 
</parent> 

輸出:

MultiAlias.Parent(name=Adam, children=[MultiAlias.Child(name=Iva), MultiAlias.Child(name=Peter)]) 
-1

我認爲,馬克說,這是不可能用註解(在網上找不到任何東西)。 在我的特殊情況下,作爲散步的周圍,我所做的是從基類(Vivek示例中的ABC)擴展並將它們自己的註釋放在子類中並使用這些類。解決方案取決於你的代碼實現。 Regards.-

ABC類

@XStreamAlias( 「alias1」) DFG延伸ABC

@XStreamAlias( 「別名2」) XYZ延伸ABC