2011-07-25 13 views
0

私は自分のXStreamの仕事を「ズームイン」しすぎるかもしれないと思いますが、さまざまな大きな複雑なオブジェクトを含むXMLストリームをマーシャリングしようとしています。 、タグの内容をXStreamで読み取る

import com.thoughtworks.xstream.annotations.XStreamAsAttribute; 
public class TypedString { 
    @XStreamAsAttribute 
    private String type; 
    private String value; 

    public TypedString(String type, String value) { 
     this.type = type; 
     this.value = value; 
    } 
    // getters omitted 
} 

:だから私はそうのように、type属性を持つ文字列の概念を包むために、「TypedString」オブジェクトを作成し

<name type="string">My Name</name> 
<speed type="dice">2d6</speed> 

次のようなタグをたくさん持っている傾向がありますこれは何かが欠落しているに違いないことを知っています - タグの内容を使って "value"変数をどのように設定することができますか?(例:firs上記の例では、typeは "string"で、値は "My Name"です)。

public class TypedStringTest { 
    private XStream xStream; 

    @Before 
    public void setUp() { 
     xStream = new XStream(); 
     xStream.processAnnotations(TypedString.class); 
     xStream.alias("name", TypedString.class); 
    } 

    @Test 
    public void testBasicUnmarshalling() { 
     TypedString typedString = (TypedString) xStream.fromXML("<name type=\"string\">Name</name>"); 
     assertEquals("string", typedString.getType()); 
     assertEquals("Name", typedString.getValue()); 
    } 
} 

二アサーションに失敗します。

私はこのための簡単なユニットテストを書きました。

TypedStringクラスに追加する必要があるアノテーションがありますか?または、ここで大きく拡大してしまったことがありますか(たとえば、これらのタグを含むクラスのアノテーションですべて行う必要があります)。 @XStreamAsAttributeアノテーションは、親タグから使用できるようには見えませんでした。適用されたタグを表すオブジェクトで定義する必要がありました。それで、私はそうでなければ賛美された弦を作った。私はXStreamが暗黙の援助なしにマーシャルしなければならないと感じる。

一言で言えば、どこで迷子になったのですか?

+0

答えのためにサイトの周りを見て、私が見ている最高のコンバータです - 実際にXStreamの注釈でこれを行う方法はありませんか? – Phantomwhale

答えて

0
@XStreamAlias("name") 
@XStreamConverter(value=ToAttributedValueConverter.class, strings={"value"}) 
public class TypedString { 
    private String type; 
    private String value; 
} 
0
@XStreamConverter(value=ToAttributedValueConverter.class, strings={"value"}) 
public class TypedString { 
    @XStreamAsAttribute 
    private String type; 
    private String value; 
} 

これは、単一のライン値のために動作します。

このような場合、値には空白が入ります。

<name type="string"> 
    My Name 
</name> 

この場合、値は ""になります。

+0

私は、その複数の行の大文字小文字の区別がどのように得られるか知りたいと思います。 – Rodolfo

関連する問題