2017-03-15 8 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( "alias2") XYZはABC

関連する問題