同じ要素に対して複数の@XStreamAliasアノテーションを使用する方法。私がこのようにすると:同じ要素に対して複数の@XStreamAliasアノテーションを使用する
@XStreamAlias("alias1")
@XStreamAlias("alias2")
class ABC{
//
}
コンパイルエラーが発生します。これを達成する方法はありますか?ここで
同じ要素に対して複数の@XStreamAliasアノテーションを使用する方法。私がこのようにすると:同じ要素に対して複数の@XStreamAliasアノテーションを使用する
@XStreamAlias("alias1")
@XStreamAlias("alias2")
class ABC{
//
}
コンパイルエラーが発生します。これを達成する方法はありますか?ここで
プログラム的な方法と例です。
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)])
マークが言うように、私は(それが注釈では不可能である、と思いますウェブで何も見つかりません)。 私の特別なケースでは、ウォーク・アラウンドとして、私は基本クラス(Vivekの例ではABC)から拡張して、独自の注釈を子クラスに入れてそれらのクラスを使用することでした。バッドは、コードの実装に依存します。 Regards.-
ABCクラス
@XStreamAlias( "ALIAS1") DFGはABCを拡張
@XStreamAlias( "alias2") XYZはABC
では不可能である私の意見を拡張XStreamの初期化によるエイリアス登録で行うことができます: 'xStream.alias(" alias1 "、ABC.class);' – Mark
xmlを何度も解析しなければならない場合は、 XStreamのその他の方法で? –
「xmlを何度も解析する」とはどういう意味ですか? – Mark