【问题标题】:Unmarshaling xml with tags contains attributes only to List使用标签解组 xml 仅包含 List 的属性
【发布时间】:2019-04-16 10:57:48
【问题描述】:

我不明白我做错了什么。我需要解组如下所示的 xml 文件:

<ApplicationMetadata xmlns="http://www.sas.com/xml/schema/namespace/ApplicationMetadata-9.4">
<Role Name="name1" Desc="desc1 " DisplayName="disp1 ">
    <Members/>
    <ContributingRoles/>
    <Capabilities>
        <Capability CapabilityId="1"/>
        <Capability CapabilityId="2"/>
        <Capability CapabilityId="3"/>
    </Capabilities>
</Role>
<Role Name="name2" Desc="desc2" DisplayName="disp2">
    <Members>
        <UserGroup Name="userGoup"/>
    </Members>
    <ContributingRoles/>
    <Capabilities>
        <Capability CapabilityId="1"/>
        <Capability CapabilityId="2"/>
    </Capabilities>
</Role>
</ApplicationMetadata>

我有下一堂课:

@XmlRootElement(name = "ApplicationMetadata", namespace = "http://www.sas.com/xml/schema/namespace/ApplicationMetadata-9.4")
@XmlAccessorType(XmlAccessType.FIELD)
public class ApplicationMetaData {

@XmlElement(name = "Role")
private List<Role> roles;

getters and setters

}

@XmlRootElement(name = "Role")
@XmlAccessorType(XmlAccessType.FIELD)
public class Role {

@XmlAttribute(name = "Name")
private String name;

@XmlAttribute(name = "Desc")
private String desc;

@XmlAttribute(name = "DisplayName")
private String displayName;

@XmlElementWrapper(name = "ContributingRoles")
@XmlElement(name = "UserGroup")
private List<UserGroup> contributionRoles;

@XmlElementWrapper(name = "Members")
@XmlElement(name = "UserGroup")
private List<UserGroup> members;

@XmlElementWrapper(name = "Capabilities")
@XmlElement(name = "Capability")
private List<Capability> capabilities;

getters and setters    

}

@XmlRootElement(name = "Capability")
@XmlAccessorType(XmlAccessType.FIELD)
public class Capability {

@XmlAttribute(name = "CapabilityId")
private String id;

getters and setters

}

@XmlRootElement (name = "UserGroup")
@XmlAccessorType(XmlAccessType.FIELD)
public class UserGroup {

@XmlAttribute(name = "Name")
private String name;

getters and setters    

}

我的解组代码是:

File file = new File(fileName);
ApplicationMetaData appMetaData = (ApplicationMetaData) 
WorkWithXml.unmarshalXml(file, ApplicationMetaData.class);

public static Object unmarshalXml(File file, Class unmarshallerClass) {
try {
    JAXBContext jaxbContext = JAXBContext.newInstance(unmarshallerClass);
    Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
    return unmarshaller.unmarshal(file);
} catch (JAXBException e) {
    LOG.error("", e);
    throw new AutotestError(e);
}
}

因此,我有 appMetaData 对象,其中包含文件中的所有角色。角色有属性,但角色内的所有列表都是空的。不是空的,而是空的。我哪里出错了?

附:这都是关于 Java 代码的 :)

【问题讨论】:

    标签: java xml jaxb unmarshalling


    【解决方案1】:

    我已经做到了:)

    相反

    @XmlElementWrapper(name = "Capabilities")
    @XmlElement(name = "Capability")
    private List<Capability> capabilities;
    

    在我使用过的角色类中

    @XmlElement (name = "Capabilities")
    Capabilities capabilities;
    

    这里是 Capabilities 类

    @XmlRootElement(name = "Capabilities")
    @XmlAccessorType(XmlAccessType.FIELD)
    public class Capabilities {
    
    @XmlElement(name = "Capability")
    private List<Capability> capability;
    
    public List<Capability> getCapability() {
        return capability;
    }
    
    public void setCapability(List<Capability> capability) {
        this.capability = capability;
    }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-02
      • 1970-01-01
      • 1970-01-01
      • 2013-08-26
      相关资源
      最近更新 更多