1

次のような 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 アノテーションと思います。そのクラスのクラスレベルの注釈をオーバーライドしますが、明らかにそうではありません。

4

0 に答える 0