एक्सएमएल स्ट्रिंग

एक प्रोफाइलबैच में 1 प्रोफाइल हैसूची
प्रोफ़ाइल सूची में एक या अधिक प्रोफ़ाइल शामिल हैं
एक प्रोफ़ाइल में 1 उपयोग प्रतिबंध हैं

<profilesBatch version="1.0" id="745" date="2012-12-13" transportKeyLabel="str1234">
  <profilesList>
    <profile iccid="str1234" profileType="str1234">
      <useRestrictions>
        <maximumDownloadAttempts>745</maximumDownloadAttempts>
        <maximumConfirmationAttempts>745</maximumConfirmationAttempts>
        <maximumNumberEIDs>745</maximumNumberEIDs>
        <maximumDownloadsPerEID>745</maximumDownloadsPerEID>
        <allowDownloadForDownloaded>true</allowDownloadForDownloaded>
        <allowDownloadForInstalled>true</allowDownloadForInstalled>
        <allowDownloadForError>true</allowDownloadForError>
      </useRestrictions>
    </profile>
  </profilesList>
</profilesBatch>

कक्षा प्रोफाइलबैच

@Getter
@Setter
@XmlRootElement(name = "ProfilesBatch")
public class ProfilesBatch
{
    @JacksonXmlProperty(isAttribute = true)
    private String date;

    @JacksonXmlElementWrapper(localName="profilesList")
    @JacksonXmlProperty(localName="profilesList")
    private ProfilesList profilesList;

    @JacksonXmlProperty(isAttribute = true)
    private String transportKeyLabel;

    @JacksonXmlProperty(isAttribute = true)
    private Header header;

    @JacksonXmlProperty(isAttribute = true)
    private String id;

    @JacksonXmlProperty(isAttribute = true)
    private String version;

}

वर्ग प्रोफ़ाइलसूची

@Getter
@Setter
@XmlRootElement(name = "ProfilesList")
public class ProfilesList
{
    @JacksonXmlElementWrapper(localName="profile")
    @JacksonXmlProperty(localName="profile")
    private List<Profile> profile;
}

कक्षा प्रोफ़ाइल

@Getter
@Setter
@XmlRootElement(name = "Profile")
public class Profile
{
    @JacksonXmlProperty(isAttribute = true)
    private String iccid;

    @JacksonXmlProperty(isAttribute = true)
    private String profileType;

    @JacksonXmlElementWrapper(localName="useRestrictions")
    private UseRestrictions useRestrictions;

}

कक्षा उपयोग प्रतिबंध

@Getter
@Setter
@XmlRootElement(name = "useRestrictions")
public class UseRestrictions {

    @JacksonXmlProperty(localName = "maximumDownloadAttempts")
    private int maximumDownloadAttempts;

    @JacksonXmlProperty(localName = "maximumNumberEIDs")
    private int maximumNumberEIDs;

    @JacksonXmlProperty(localName = "maximumConfirmationAttempts")
    private int maximumConfirmationAttempts;

    @JacksonXmlProperty(localName = "maximumDownloadsPerEID")
    private int maximumDownloadsPerEID;

    @JacksonXmlProperty(localName = "allowDownloadForInstalled")
    private boolean allowDownloadForInstalled;

    @JacksonXmlProperty(localName = "allowDownloadForDownloaded")
    private boolean allowDownloadForDownloaded;

    @JacksonXmlProperty(localName = "allowDownloadForError")
    private boolean allowDownloadForError;

}

मैं जैक्सन-डेटाफॉर्मेट-एक्सएमएल के साथ स्प्रिंग-बूट का उपयोग कर रहा हूं। करते समय

XmlMapper xmlMapper = new XmlMapper();
ProfilesBatch profilesBatch = xmlMapper.readValue(data, ProfilesBatch.class);

जहां डेटा एक्सएमएल स्ट्रिंग है

मिल रहा है

com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:Unrecognized field "maximumDownloadAttempts" (class sm.movasim.sftp.service.espgmodel.Profile), not marked as ignorable

क्या कक्षाओं और टिप्पणियों में कुछ गड़बड़ है? ध्यान दें कि सभी वर्गों को सेटर्स और गेटर्स मिलते हैं

0
Kevin Joymungol 18 पद 2020, 10:21

2 जवाब

सबसे बढ़िया उत्तर

अपनी ProfilesList कक्षा में बदलाव करें

    @Getter
    @Setter
    @XmlRootElement(name = "ProfilesList")
    public static class ProfilesList {
        @JacksonXmlElementWrapper(localName = "profile", useWrapping = false)
        @JacksonXmlProperty(localName = "profile")
        private List<Profile> profile;
    }

कारण: डिफ़ॉल्ट @JacksonXmlElementWrapper को एक रैपर टैग की आवश्यकता है => आपकी <profile> सूची को दूसरे <profile></profile> स्तर में लपेटने की आवश्यकता है, इससे बचने के लिए useWrapping = false सेट करें।

2
Mạnh Quyết Nguyễn 18 पद 2020, 11:02

आपको वास्तव में ProfileList वर्ग की आवश्यकता नहीं है।

इन एनोटेशन के साथ सीधे ProfileBatch वर्ग में सूची रखें:

@XmlRootElement(name = "ProfilesBatch")
public class ProfilesBatch
{
    @JacksonXmlElementWrapper(localName="profilesList")
    @JacksonXmlProperty(localName="profile")
    private List<Profile> profilesList;

इसके अलावा, एक तरफ ध्यान दें, प्रोफ़ाइल वर्ग में UseRestrictions को एनोटेट किया जा सकता है

@JacksonXmlProperty(localName="useRestrictions")
private UseRestrictions useRestrictions;

आपको ऑब्जेक्ट्स के लिए रैपर एनोटेशन की आवश्यकता नहीं है।

0
DarkMatter 18 पद 2020, 11:23