将类类型绑定到元素的动态方式

时间:2013-10-31 16:03:57

标签: java xml xml-deserialization simple-framework

我将此xml格式作为来自不同http请求的输出。

<transaction>
<respmsg>...</respmsg>
<respcode>0000</respcode>
<status>success</status>
</transaction>

以下是我的交易类表示

@root
class Transaction {
   @Element
   public ResponseMessage respmsg;
   @Element
   public int respcode;
   @Element
   public String status;
}

“respmsg”属性的抽象类表示

abstract class ResponseMessage {

}

这很容易映射到Class对象。但是,“respmsg”对于每个请求都是不同的 对于登录请求,respmsg可能是

<respmsg>
   <firstname>John</firstname>
   <lastname>Doe</lastname>
   <mobilephone>1234</mobilephone>
   <email>johndoe@test.com</email>
</respmsg>


class LoginResponseMessage extends ResponseMessage {
    @Element
    public String firstname;

    @Element
    public String lastname;

    @Element
    public String mobilephone;

    @Element
    public String email;
}

并且对于位置请求,它可能是

<respmsg>
   <address1>121 121 UAE Bldg, dubai</address1>
   <address2/>
   <city>Dubai</city>
   <postalcode>121</postalcode>
   <region>dubai</region>
</respmsg>

class LocationResponseMessage extends ResponseMessage {
    @Element
    public String address1;

    @Element
    public String address2;

    @Element
    public String postalcode;

    @Element
    public String region;
}

如何设计我的类以便它知道在反序列化期间用于respmsg的类的类型?

String xmlData = retrieve(urls[0]); //retrieve fetches the string xml from the http request
Serializer serializer = new Persister();
Reader reader = new StringReader(xmlData);
Transaction t = serializer.read(Transaction.class, reader, false);

1 个答案:

答案 0 :(得分:0)

根据要求,将我的评论作为答案发布:


如何在<respmsg>标记中添加属性,说明它属于哪种类型?

例如:

<respmsg type="LocationResponseMessage">
相关问题