3
<staging>
    <stage>
        <name>aaaa</name>
        <taskName>aa</taskName>
        <taskName>qwqwse</taskName>
        <taskName>qwe</taskName>
        <iconName>asdad</iconName>
        <iconName>dasd</iconName>
    </stage>

    <stage>
        <name>dasda</name>
        <taskName>asdak</taskName>
        <taskName>dasdk1</taskName>
        <taskName>dasdask2</taskName>
        <iconName>dasdn</iconName>
        <iconName>dasdcon</iconName>
    </stage>
</staging>

そして、これは私のJavaクラスです:

@XStreamAlias("stage")
public class Stage {

private String name;
private List<String> taskName;
private List<String> iconName;
}

XStream 1.4.2 を使用して、その XML データを Java オブジェクトに変換しています。

SOの投稿をいくつか見ましたが、それでも問題は解決しません。

次の例外をスローします。

com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$DuplicateFieldException: Duplicate field taskName
---- Debugging information ----
field               : taskName
class               : com.thbs.soaconnect.model.configuration.Stage
required-type       : com.thbs.soaconnect.model.configuration.Stage
converter-type      :      com.thoughtworks.xstream.converters.reflection.ReflectionConverter
path                : /soaConnect/staging/stage/taskName[2]
line number         : 28
class[1]            : java.util.ArrayList
converter-type[1]   :   com.thoughtworks.xstream.converters.collections.CollectionConverter
class[2]            : com.thbs.soaconnect.model.configuration.Configuration
version             : null

以前に多くの人が提案したように、次の方法を試しました:

xstream.addImplicitCollection(Stage.class,"taskName", String.class);
xstream.addImplicitCollection(Stage.class,"iconName", String.class);

例外はスローしませんが、値を読み取ることはできませんが、各要素には値があります。

手伝ってくれませんか。

4

2 に答える 2

5

Stage クラス内に何も追加する必要はありません。Stage クラスに適切なエイリアスを追加して、addImplicitCollections を使用するだけです。

XML Input :
<stage>
        <name>dasda</name>
        <taskName>asdak</taskName>
        <taskName>dasdk1</taskName>
        <taskName>dasdask2</taskName>
        <iconName>dasdn</iconName>
        <iconName>dasdcon</iconName>
 </stage>

Code for Stage Class :
public class Stage {

private String name;
    private List<String> taskName;
    private List<String> iconName;
}

Code to retrieve parse XML using xtream object :
Xstream.alias("stage", Stage.class);
Xstream.addImplicitCollection(Stage.class,"taskName",String.class);
Xstream.addImplicitCollection(Stage.class,"iconName",String.class);

It worked for me.       
于 2014-01-07T14:54:35.790 に答える