无法在EclipseLink - Moxy的xml文件中单独获取属性

时间:2013-12-04 11:26:26

标签: java xml eclipselink moxy

我正在用java开发一个xml映射器。我使用Eclipse Moxy,因为我遇到了一个问题。我可以将父节点的所有子节点都放入hashmap中。但问题是父节点的属性也会进入该hashmap。但我希望分别获得这些属性。以下是我的代码

我有以下xml段

<keystore name="xyz">

        <type>JKS</type>

        <password>wso2carbon</password>

        <keyAlias>wso2carbon</keyAlias>

        <keyPassword>wso2carbon</keyPassword>

 </keystore>

以下是相关的XSD部分

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="keystore">
    <xs:complexType>
      <xs:sequence>
        <xs:element type="xs:string" name="type"/>
        <xs:element type="xs:string" name="password"/>
        <xs:element type="xs:string" name="keyAlias"/>
        <xs:element type="xs:string" name="keyPassword"/>
      </xs:sequence>
      <xs:attribute type="xs:string" name="name"/>
    </xs:complexType>
  </xs:element>
</xs:schema>

我想在我的java代码中映射这个XML。当我使用Moxy访问它时,我也在子元素的映射中获得“name”属性。例如:

[0]名称

[1]输入

[2]密码

........

但我想分别获取父元素(“name”)的属性(不在子元素映射中)。我可以单独获取xml元素的属性吗?吗

这就是我的代码的样子

 private DynamicEntity getDynamicEntity()
        throws SAXException, URISyntaxException, IOException, XMLStreamException,
        ConfigurationMismatchException {


    FileInputStream xsdInputStream = null;
    DynamicJAXBContext jaxbContext;
    DynamicEntity autoElement = null;
    try {
        xsdInputStream = new FileInputStream("/home/....../automation_mapping.xsd");
        FileInputStream xmlInputStream = new FileInputStream("/home/...../automation.xml");
        jaxbContext = DynamicJAXBContextFactory.createContextFromXSD(xsdInputStream, null, null, null);
        Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
        autoElement = (DynamicEntity) unmarshaller.unmarshal(xmlInputStream);
    } catch (FileNotFoundException e) {
        e.printStackTrace(); 
    } 
    return autoElement;
}

autoElement 对象包含xml文件数据。然后我使用以下代码访问DynamicEntity

DynamicEntity myEntity=autoelment.get(name);

但问题是元素的属性无法单独使用 get()方法

1 个答案:

答案 0 :(得分:0)

DynamicEntity对应于域模型中的Java类。您可以以相同方式访问映射到属性和元素的属性的原因:

keyStoreDE.get("name");
keyStoreDE.get("type');

在真正的POJO(见下文)中,您是否能够以相同的方式访问它们:

keyStorePOJO.getName();
keyStorePOJO.getType();
import javax.xml.bind.annotation.*;

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "type",
    "password",
    "keyAlias",
    "keyPassword"
})
@XmlRootElement(name = "keystore")
public class Keystore {

    @XmlElement(required = true)
    protected String type;
    @XmlElement(required = true)
    protected String password;
    @XmlElement(required = true)
    protected String keyAlias;
    @XmlElement(required = true)
    protected String keyPassword;
    @XmlAttribute(name = "name")
    protected String name;

    // get/set methods
}