繁体   English   中英

JAXB继承+元素重命名

[英]JAXB inheritance + element rename

我有以下构造:

@XMLTransient
public abstract class Foo {
   protected String name;
}

@XmlRootElement
@XmlType(propOrder={"name"})
public class BarX extends Foo {

   public String getXThing() {
      return name;
   }

   public void setXThing(String thing) {
      name = thing;
   }
}

@XmlRootElement
@XmlType(propOrder={"name"})
public class BarY extends Foo {

   public String getYBlah() {
      return name;
   }

   public void setYBlah(String blah) {
      name = blah;
   }
}

在XML内,我需要BarX而不是name标签的thing而对于BarY,我想拥有blah而不是name 有可能吗,我怎么能得到呢?

您可以执行以下操作(您已经很接近了):

package forum11340316;

import javax.xml.bind.annotation.XmlTransient;

@XmlTransient
public abstract class Foo {
   protected String name;
}

BarX

package forum11340316;

import javax.xml.bind.annotation.*;

@XmlRootElement
@XmlType(propOrder={"XThing"})
public class BarX extends Foo {

   @XmlElement(name="thing")
   public String getXThing() {
      return name;
   }

   public void setXThing(String thing) {
      name = thing;
   }

}

巴里

package forum11340316;

import javax.xml.bind.annotation.*;

@XmlRootElement
@XmlType(propOrder={"YBlah"})
public class BarY extends Foo {

   @XmlElement(name="blah")
   public String getYBlah() {
      return name;
   }

   public void setYBlah(String blah) {
      name = blah;
   }

}

演示

package forum11340316;

import javax.xml.bind.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(BarX.class, BarY.class);
        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

        BarX barX = new BarX();
        barX.setXThing("XThing");
        marshaller.marshal(barX, System.out);

        BarY barY = new BarY();
        barY.setYBlah("YBlah");
        marshaller.marshal(barY, System.out);
    }

}

产量

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<barX>
    <thing>XThing</thing>
</barX>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<barY>
    <blah>YBlah</blah>
</barY>

欲获得更多信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM