Jackson annotations: Dynamic Root Element name based on property value



In my Apache Wink based REST API project, I am using Jackson xml jax-rs providers. And I would like these providers to transform the POJO to XML based on Jackson/JAXB annotations. There is a requirement to dynamically set the root element name based on a property value (ie., value of a member variable). The scenarios is illustrated below:



public class Response {
public String name;
public List<Message> messageList;
}

public class Message {
private String messageDetails;
private String messageType;
}


The serialized XML will be something like:



<Response>
<Messages>
<Message>
<messageDetails>abc</messageDetails>
<messageType>Warning</messageType>
</Message>
<Message>
<messageDetails>xyz</messageDetails>
<messageType>Error</messageType>
</Message>
</Messages>
</Response>


But, our requirement is to dynamically change <Message> to <{messageType}>, ie., either <Warning> or <Error>. Expected serialized XML:



<Response>
<Messages>
<Warning>
<messageDetails>abc</messageDetails>
</Warning>
<Error>
<messageDetails>xyz</messageDetails>
</Error>
</Messages>
</Response>


Is it possible to provide Jackson/JAXB annotations to use value of messageType as element name. Please share your thoughts.


No comments:

Post a Comment