JAXB映射到对象而不是字符串

时间:2015-06-28 19:27:44

标签: java xml jaxb

我有以下XML:

<game name="m1itskow" sourcefile="maygay1bsw.c" ismechanical="yes" cloneof="m1itsko" romof="m1itsko">
    <description>It's A Knockout (Maygay) (M1A/B) (set 24)</description>
    <year>199?</year>
    <manufacturer>Maygay</manufacturer>
</game>

今天我在Game类中有制造商作为String,但是我需要映射到制造商类,我应该怎么做?可能吗?感谢。

编辑:无法更改XML,因为这是第三方工具生成的文件。

1 个答案:

答案 0 :(得分:0)

对xml结构进行了更改

XML

<?xml version="1.0" encoding="UTF-8"?>
<game name="m1itskow" sourcefile="maygay1bsw.c" ismechanical="yes" cloneof="m1itsko" romof="m1itsko">
    <description>It's A Knockout (Maygay) (M1A/B) (set 24)</description>
    <year>199?</year>
    <manufacturer>
    <manufacturer-name>Maygay</manufacturer-name>
    </manufacturer>
</game>

POJO游戏和制造商......

game.java

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
    public class game {
        private String name;
        private String sourcefile;
        private String ismechanical;
        private String cloneof;
        private String romof;
        private String description;
        private String year;
        private Manufacturer manufacturer=new Manufacturer();
        public game() {}
    @XmlAttribute  
    public String getIsmechanical() {
          return ismechanical;
        }
        public void setIsmechanical(String ismechanical) {
          this.ismechanical = ismechanical;
        }
        @XmlAttribute
        public String getCloneof() {
          return cloneof;
        }
        public void setCloneof(String cloneof) {
          this.cloneof = cloneof;
        }
        @XmlAttribute
        public String getRomof() {
          return romof;
        }
        public void setRomof(String romof) {
          this.romof = romof;
        }
    @XmlAttribute  
    public String getName() {  
        return name;  
    }  
    public void setName(String name) {  
        this.name = name;  
    }
    @XmlAttribute
    public String getSourcefile() {
      return sourcefile;
    }
    public void setSourcefile(String sourcefile) {
      this.sourcefile = sourcefile;
    }
    @XmlElement
    public String getDescription() {
      return description;
    }
    public void setDescription(String description) {
      this.description = description;
    }
    @XmlElement
    public String getYear() {
      return year;
    }
    public void setYear(String year) {
      this.year = year;
    }
    @XmlElement(name="manufacturer")
    public Manufacturer getManufacturer() {
      return manufacturer;
    }
    public void setManufacturer(Manufacturer manufacturer) {
      this.manufacturer=manufacturer;
    }

    }  

manufacturer.java

mport java.io.Serializable;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
 @XmlRootElement(name="manufacturer")    
public class Manufacturer implements Serializable {

  /**
   * 
   */
  private static final long serialVersionUID = 1L;
  private String Name;
  @XmlElement(name="manufacturer-name")
  public String getName() {
    return Name;
  }
  public void setName(String name) {
    Name = name;
  }
}

main.java

import javax.xml.bind.JAXBContext;  
import javax.xml.bind.JAXBException;  
import javax.xml.bind.Unmarshaller;  

public class SampleTest {  
public static void main(String[] args) {  
     try {    
            File file = new File("employee.xml");    
            JAXBContext jaxbContext = JAXBContext.newInstance(game.class);    
            Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();    
            game e=(game) jaxbUnmarshaller.unmarshal(file);    
            System.out.println(e.getManufacturer().getName());  

          } 
     catch (JAXBException e) {
         e.printStackTrace(); 
         }    
     }

}