次のような xml パケットを非整列化しようとしています。
<response>
<returncode>SUCCESS</returncode>
<meetings>
<meeting>
<meetingID>test01</meetingID>
<meetingName>Test</meetingName>
<createTime>1315254777880</createTime>
<attendeePW>ap</attendeePW>
<moderatorPW>mp</moderatorPW>
<hasBeenForciblyEnded>false</hasBeenForciblyEnded>
<running>true</running>
</meeting>
</meetings>
</response>
ただし、ミーティング要素は個別にリクエストすることもできます
<response>
<returncode>SUCCESS</returncode>
<meetingName>Test</meetingName>
<meetingID>test01</meetingID>
<createTime>1315254777880</createTime>
<voiceBridge>70775</voiceBridge>
<messageKey/>
<message/>
</response>
両方の目的で 1 つの会議クラスを再利用したい:
@XmlAccessorType(XmlAccessType.FIELD)
public abstract class BBBBase {
@XmlElement
private String returncode,messageKey,message;
@XmlRootElement(name="response")
public class BBBMeeting extends BBBBase{
@XmlElement
private String voiceBridge, meetingName, meetingID, attendeePW,moderatorPW;
@XmlRootElement(name="response")
public class BBBMeetings extends BBBBase{
@XmlElementWrapper(name="meetings")
@XmlElement(name="meeting")
private List<BBBMeeting> meetings;
@XmlRootElement を BBBMeeting に残すと、BBBMeetings をアンマーシャリングすると例外が発生します: java.lang.ClassCastException: nl.project.response.BBBMeeting を nl.project.response.BBBMeetings にキャストできません
それを削除すると、BBBMeetings を正常に非整列化できますが、BBBMeeting を非整列化できなくなります。
回避策は、@XmlRootElement で注釈が付けられた具象実装クラスを使用して基本 BBBMeeting クラスを作成することです。しかし、これは私にはエレガントではないようです。プライベート リスト ミーティングでの @XmlElement アノテーションと思います。そのクラスのクラスレベルの注釈をオーバーライドしますが、明らかにそうではありません。