0

クライアントから次の XML を受け取りました。

<data>
    <action>someAction</action>  // actionX, actionY, and so forth...
    <params>
        <name>Some name</name>
        <tel>1234567890</tel>
        .
        .
        .
        etc...
    </params>
</data>

次のクラスを作成しました。

class Data<T> {
    String action;
    T params;
}

class ContentX {
    String name;
    String tel;
}

class ContentY {
    String id;
    String productDesc;
}

Data クラスを使用して、XML をオブジェクトに変換する必要があります。アクションに応じて、T 属性を ContentX や ContentY などの特定のクラスにマップする必要があります。

例として、私はすでにこれを試しましたが、うまくいきませんでした:

Data<ContentX> data = (Data<ContentX>) xstream.fromXML(XML);

次の例外が発生します。

Exception in thread "main" com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$UnknownFieldException: No such field java.lang.Object.name
---- Debugging information ----
field               : name
class               : java.lang.Object
required-type       : java.lang.Object
converter-type      : com.thoughtworks.xstream.converters.reflection.ReflectionConverter
path                : /data/params/name
line number         : 1
class[1]            : com.xstream.xml.Data
version             : null
-------------------------------
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.determineType(AbstractReflectionConverter.java:453)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:294)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:234)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshallField(AbstractReflectionConverter.java:355)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doUnmarshal(AbstractReflectionConverter.java:306)
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:234)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50)
at com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:134)
at com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:32)
at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1058)
at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1042)
at com.thoughtworks.xstream.XStream.fromXML(XStream.java:913)
at com.thoughtworks.xstream.XStream.fromXML(XStream.java:904)
4

1 に答える 1

2
    XStream xstream = new XStream();
    Data<ContentX> data = new Data<ContentX>();
    data.action="push";
    data.params=new ContentX();
    data.params.name="where";
    data.params.tel="1712";

    xstream.alias("data", Data.class);
    xstream.alias("params", ContentX.class);
    String xml = xstream.toXML(data);
    System.out.println(xml);

    Data<ContentX> result = (Data<ContentX>)xstream.fromXML(xml);
    System.out.println(result.action);
    System.out.println(result.params.name);
    System.out.println(result.params.tel);
于 2012-11-07T05:51:37.453 に答える