2

ここでは、Simple XML Serialization(simple-xml-2.6.6.jar)を使用して、XML応答をWebサービスからPOJOクラスに変換しています。XMLは次のとおりです。

<Alerts>
        <Alert>
            <CCRDataObjectID>38</CCRDataObjectID>
            <DateTime>
                <Type>
                    <Text>Verified</Text>
                </Type>
                <ExactDateTime>2010-06-16T00:00:00Z</ExactDateTime>
            </DateTime>
            <Type>
                <Text>Allergy</Text>
            </Type>
            <Description>
                <Text>R-Tanna</Text>
            </Description>
            <Source>
                <Actor>
                    <ActorID>122</ActorID>
                </Actor>
            </Source>
            <Reaction>
                <Description>
                    <Text>rash</Text>
                </Description>
            </Reaction>
        </Alert>
        <Alert>
            <CCRDataObjectID>39</CCRDataObjectID>
            <DateTime>
                <Type>
                    <Text>Verified</Text>
                </Type>
                <ExactDateTime>2010-06-16T00:00:00Z</ExactDateTime>
            </DateTime>
            <Type>
                <Text>Allergy</Text>
            </Type>
            <Description>
                <Text>Zithromax</Text>
            </Description>
            <Source>
                <Actor>
                    <ActorID>122</ActorID>
                </Actor>
            </Source>
            <Reaction>
                <Description>
                    <Text>rash</Text>
                </Description>
            </Reaction>
        </Alert>
    </Alerts>

POJOは次のとおりです。アラートの最初のPOJO包含リストは次のとおりです。Alerts

@Root
public class Alerts {

    @ElementList
    private List<Alert> Alerts;

    public List<Alert> getAlerts() {
        return this.Alerts;
    }

    public void setAlerts(List<Alert> alerts) {
        this.Alerts = alerts;
    }

}

実際の2番目のPOJOは次のAlertとおりです。

@Root(strict=false)
public class Alert {

    @Element
    private int CCRDataObjectID;

    @Element
    private DateTime DateTime;  

    @Element
    private Type Type;  

    @Element 
    private Description Description;

    @Path("Source/Actor")
    @Element        
    private int ActorID;

    @Element
    private Reaction Reaction;

    @Root
    private static class Type {

        @Element
        private String Text;        

    }

    @Root
    private static class Description {

        @Element
        private String Text;
    }

    @Root
    private static class DateTime {

        @Element
        private Type Type;

        @Element
        private String ExactDateTime;

    }

    @Root
    private static class Reaction {

        @Element
        private Description Description;
    }

    public int getCCRDataObjectID() {
        return CCRDataObjectID;
    }

    public void setCCRDataObjectID(int cCRDataObjectID) {
        CCRDataObjectID = cCRDataObjectID;
    }   

    public String getVerification(){
        return this.DateTime.Type.Text;
    }

    public String getDateTime() {
        return this.DateTime.ExactDateTime;
    }

    public String getAllergyType() {
        return this.Type.Text;
    }
    /**
     * 
     * @return Name/Description of an Allergy
     */
    public String getDescription() {
        return this.Description.Text;
    }

    public int getActorID() {
        return ActorID;
    }

    public void setActorID(int actorID) {
        ActorID = actorID;
    }

    public String getReactionDescription() {
        return this.Reaction.Description.Text;
    }

    public String getDisplayDate() {
        SimpleDateFormat sdf = new SimpleDateFormat("d MMM yyyy");
        return sdf.format(this.DateTime.ExactDateTime);     
    }
}

解析時に次のようなエラーが発生します:

Element 'Alert' does not have a match in class com.mypck.pojo.Alerts at line 2

他の場所で使用されているため、XML応答を変更できません。XMLを解析できるように、POJOで何ができますか。

4

2 に答える 2

3

わかった。チュートリアルを行った後、答えを得ました。リストがクラス Alerts でインラインであることを伝える必要があるだけです。

@Root
public class Alerts {

    @ElementList(inline=true)
    private List<Alert> Alerts;

    public List<Alert> getAlerts() {
        return this.Alerts;
    }

    public void setAlerts(List<Alert> alerts) {
        this.Alerts = alerts;
    }

}
于 2013-01-03T12:01:46.000 に答える
1

これはすべきではありません:

@ElementList
private List<Allergy> Alerts;

なれ

@ElementList
private List<Alert> Alerts;

于 2013-01-02T11:27:56.853 に答える